62 lines
1.8 KiB
Markdown
62 lines
1.8 KiB
Markdown
# 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).
|