Crates.io | ruci |
lib.rs | ruci |
version | 2.1.0 |
created_at | 2024-04-05 17:38:44.385982+00 |
updated_at | 2025-05-07 20:30:05.175788+00 |
description | A UCI (Universal Chess Interface) crate. |
homepage | |
repository | https://github.com/tigerros/ruci |
max_upload_size | |
id | 1197553 |
size | 247,748 |
Rust Universal Chess Interface.
This crate is a full implementation of the UCI protocol using shakmaty
for relevant types.
The UCI protocol is the most widely used way to communicate with chess engines and vice versa.
Specifically, this crate contains:
cargo run -p {example_name}
).#![no_std]
compatible.
There's two other crates that I'm aware of which serve a similar purpose; vampirc-uci
and shakmaty-uci
.
shakmaty-uci
is basically an improved version of vampirc-uci
, so I'll only cover shakmaty-uci
. Anyways, it:
ruci
when deserializing, 2 or more times slower when serializing. Results available at tigerros.github.io/ruci/bench, more compact version in the summary of the latest Bench workflow.Cow
s (which is what ruci
does), but it hurts performance. Converting a message to a string doesn't require owned data, and seeing as that is half of the functionality of this crate, it would be wasteful to force ownership.nom
for parsing, whereas ruci
doesn't pull in anything.ruci
has more benches per scenario than the other two. This is because it uses Cow
s to allow for borrowed or owned data. So, the suffix borrowed
in bench names means that it is using a statically borrowed type rather than the owned type, e.g. &'static str
instead of String
. The flip side is the suffix owned
.
default
: no features are enabled by default.engine-sync
: adds the Engine
struct for communicating with an engine.engine-async
: adds async versions of Engine
functions.tokio-process
: adds a tokio version of Engine::from_process
.gui-sync
: adds the Gui
struct for communicating with a GUI.gui-async
: adds async versions of Gui
functions.serde
: enables serde support for most types. All implementations are derived with no parameters.