diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..cf77afc --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "uci" +version = "0.1.0" +authors = ["Taylor Bockman "] +description = "An implementation of the UCI specification in Rust" +repository = "https://github.com/angrygoats/uci" +readme = "README.md" +keywords = ["uci", "universal chess interface", "chess", "engine", "chess engine"] +categories = ["games", "game-engines", "api-bindings", "config", "development-tools"] +license = "GPL-3.0" + +[dependencies] diff --git a/README.md b/README.md index 365363c..75ea8f2 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,37 @@ -# uci -An implementation of the Universal Chess Interface in Rust +# UCI + +UCI is an acronym for **U**niversal **C**hess **I**nterface. It is a standard for communication that competes with +XBoard/Winboard. [http://wbec-ridderkerk.nl/html/UCIProtocol.html](UCI) makes communication a little easier, but +it seems there's a nearly religious debate on which is better. + +Here are some benefits to using UCI: + +* It works with Chessbase 14 +* Simple to use +* Fewer bugs in code +* Built from scratch rather than ad-hoc +* Flexible time controls +* Additional search information can be displayed + +and to be fair, some downsides: + +* Stateless +* Delegates some important decisions to the GUI +* Difficult to add new features on top of it +* Sends the whole move list each turn + +Overall, UCI seems to be fairly popular and is worth considering for your next engine. + +## Why + +People shouldn't waste their time implementing protocols that really should be libraries. With this, you can +include it in your project, build your engine on top of it, and be able to focus on what matters - beating Stockfish. + +## Will You Implement Winboard? + +Yeah, probably. + +## Why GPL 3.0? + +I have noticed that there are no good _free_ solutions so that anyone can build a chess engine. Since UCI is +a common format, and something all engines (should) implement, making this chunk of it free makes _total_ sense. diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..31e1bb2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,7 @@ +#[cfg(test)] +mod tests { + #[test] + fn it_works() { + assert_eq!(2 + 2, 4); + } +}