Any chance you could detail some specific examples? I think aside from the ongoing debate about this project it would be quite nice to compile a list of common problems/edge cases for beginners.
I've forgotten the details of the problems that I personally ran into, since it's been a while, but I think I remember what they were about. They were problems that my friend (another engine dev) also ran into, so I may be able to ask him.
Anyway, on two separate occasions, we were trying out a new client and by complete coincidence both had the same issue; on both occasions, the symptom was that the connexion would eventually hang. The problems had to do with some combinations of `stop` and `go` sent in immediate succession and with searches that finished instantly due to mate distance pruning. The cause of one problem ended up being a bug in our engines and the other was a bug in the client (which we had to write hacks around).
———
Maybe less words and more charts and diagrams. Perhaps a fully exploded grammar for the commands/responses would be nice as well. BNF would work well there.
Will do! I'll plan to include summaries using EBNF or PEG in the next draft or two.
———
Hey, I just wanted to chime in
thank you, Clayton! ^_^
If you remember any questions you had or difficulties you encountered, that'd be really helpful. (No obligation, though!)
———
Honestly, I didn't find it very formal.
True, it's not written in Coq, Lean, TLA⁺, or something similar, and I do think that properly the term
formal should be reserved for that sort of thing. Describing it as "formal" bothers me a bit, but it's a convenient shorthand; by "formal" I just mean precise and complete.
If there are any passages that are imprecise, that aren't exhaustive, or inconsistently use terminology, please let me know!
If the engine sends an illegal move maybe it will lose the game. Or maybe the current position will be sent again with the updated time. Or maybe something else. It depends on the circumstances and there is no right behavior that needs to be specified.
Sure! but then either the behavior should be explicitly stated to be implementation-defined, or it should be explicitly stated that the event causes the governance of the specification to end.
It is impossible to guarantee that all limits are met, a fast computer may reach the desired depth in less than movetime. A slower one maybe not.
The engine should just stop thinking when it reaches the first limit.
My apologies – this was a bad example on my part! because it's actually outside the purview of a communication protocol. (However, a recommended interpretation is mentioned in the draft as a comment.)
———
As far as I am concerned almost anything would be better than UCI.
Oh, that's right! You wrote the second version of the Chess Engine Communication Protocol ;)
You missed the point. The recommendation was that there should not be any difference. Just clarification and recommendations. [...] Designing new protocols is something completely different from improving the specification of an existing one. Just call it NCI for New Chess Interface and you would not hear any objections from me.
Truthfully, I'm not sure what to do about the naming.
On one hand, it seems right to give it a separate name so that we can talk about HMK vs "NCI". On other hand, this is pretty obviously just a flavor of UCI, not a brand-new protocol.
Suppose the restriction that the client wait for `bestmove` after sending `stop` is already fixed and removed; that leaves only one incompability that could cause things to break if you used an "NCI" engine with a legacy UCI client: whether or not the engine is allowed to send `bestmove` befores it receives the `stop` following a `go infinite` message.
HMK says the engine may not. If HMK is the definition of UCI, then none of the following are UCI engines:
- Berserk
- Koivisto
- Ethereal
- Nemorino
- Velvet
- Halogen
- Asymptote
- Glaurung
That's because these engines all send a `bestmove` message (nearly instantaneously) in response to
Code: Select all
position fen 8/8/8/8/8/1QK5/8/k7 w - - 0 1
go infinite
However, everyone considers them to be UCI engines. They are in fact "NCI" engines! This suggests that, in actual usage, whatever the term
UCI refers to very much includes "NCI". And in light of that observation, a name like
UCI version 2 seems perfectly reasonable.