1
0
Fork 0
computing chess moves https://docs.rs/eschac
Find a file
2025-09-06 16:43:22 +02:00
src meta (wip) 2025-09-06 16:43:22 +02:00
tests meta (wip) 2025-09-06 16:43:22 +02:00
Cargo.lock eschac 2025-09-03 20:57:14 +02:00
Cargo.toml meta (wip) 2025-09-06 16:43:22 +02:00
COPYING eschac 2025-09-03 20:57:14 +02:00
README.md eschac 2025-09-03 20:57:14 +02:00

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

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

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 (or any later version at your option).