1
0
Fork 0
This commit is contained in:
Paul-Nicolas Madelaine 2024-04-29 02:00:26 +02:00
commit faccfbc1c5
16 changed files with 5154 additions and 0 deletions

62
README.md Normal file
View file

@ -0,0 +1,62 @@
# eschac
A library for computing chess moves.
## Overview
eschac implements fast legal move generation and a copy-make interface that enforces at compile
time that no illegal move is played, with no runtime checks and no potential panics.
## Example
```rust
use eschac::prelude::*;
// read a position from a text record
let setup = "7k/4P1rp/5Q2/5p2/1Pp1bP2/8/r4K1P/6R1 w - -".parse::<Setup>()?;
let position = setup.validate()?;
// read a move in algebraic notation
let san = "Ke1".parse::<San>()?;
let m = san.to_move(&position)?;
// play the move (note the absence of error handling)
let position = m.make();
// generate all the legal moves on the new position
let moves = position.legal_moves();
for m in moves {
// print the UCI notation of each move
println!("{}", m.to_uci());
}
```
## Comparison with [shakmaty](https://crates.io/crates/shakmaty)
shakmaty is another Rust library for chess processing. It is written by Niklas Fiekas, whose work
greatly inspired the development of eschac. For most purposes, shakmaty is probably a better
option, as eschac comes short of its miriad of features.
Both libraries have the same core features:
- vocabulary to describe the chessboard (squares, pieces, etc.)
- parsing and editing positions
- parsing standard move notations
- fast legal move generation and play
**eschac** distinguishes itself with:
- a focus on performance
- a more compact board representation
- its use of the borrow checker to guarantee only legal moves are played
**shakmaty** will be more suitable for a lot of applications, with:
- vocabulary to describe and work with games, not just positions
- insufficient material detection
- PGN parsing
- Zobrist hashing
- Syzygy endgame tablebases
- chess960 and other variants
- etc.
## License
eschac is licensed under [AGPL-3.0](./COPYING) (or any later version at your option).