Ping, Xboard, and Cutechess-cli

Discussion of chess software programming and technical issues.

Moderator: Ras

User avatar
hgm
Posts: 28457
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Ping, Xboard, and Cutechess-cli

Post by hgm »

The 'bug' can be 'fixed' by rewording this passage from the specs. I think that is the only way to go, as this passage easily creates the idea that you should do all time-consuming initialization before done=1, and this obviously makes no sense. The engine cannot initialize before sending done=1, because it lacks the essential information to initialize. It does not have the egtpath, and it does not know the hash size at that point.

I don't think it is a bug (let alone a severe bug) that a GUI behaves differently for the first and for later startups. It is up to the GUI to decide what the most efficient course of action is to honor the guarantees of the protocol specs. And the only guarantee is that when you send done=0 the GUI won't overlook any of the engine's features upto the next done=1, no matter how tardy the engine is in sending them. If this is because it really waits for the done=1, or because it already knew all the features from a previous engine run is no business of the engine.

It has been mentioned in the XBoard mailing lists that this behavior could be considered a minor bug, because in theory the user could replace the engine binary by another one, which would send different features, during the session. My take on that is that the reuse=0 feature is not intended to facilitate such wreckless behavior (and it would be impossible in Windows anyway to alter a currently running binary).
alternative specs wrote:Your engine should send one or more feature commands immediately after receiving the "protover" command, since xboard needs to know the values of some features before sending further commands to the engine. To prevent unnecessary waiting by the GUI to see if more features will be coming, it is strongly recommended to send feature "done=1" as the last feature command. This will inform the GUI that all features have been sent, so that it can proceed immediately.
Otherwise the GUI might wait for upto 2 seconds before it concludes that it has received all features. If your engine for any reason needs more time than that, send the feature "done=0" before the other feature commands. This guarantees the GUI won't miss any features upto the following "done=1". If needed, it is okay for your engine to send done=0 soon as it starts, even before it receives the xboard and protover commands.