Well, you can boldface the entire specs, if you want, but that won't succeed in highlighting the word 'user' anywhere. That seems to spring entirely from your imagination. I would say the info commands are there to provide the GUI with information, as the GUI is the party to receive that info.syzygy wrote:Well, according to this document:So, the purpose of the "info" command is merely to provide the user with information, e.g. about the move currently being searched. It is certainly not intended to provide the GUI with a list of legal moves.info
the engine wants to send infos to the GUI. This should be done whenever one of the info has changed.
The engine can send only selected infos and multiple infos can be send with one info command,
e.g. "info currmove e2e4 currmovenumber 1" or
"info depth 12 nodes 123456 nps 100000".
Also all infos belonging to the pv should be sent together
e.g. "info depth 2 score cp 214 time 1242 nodes 2124 nps 34928 pv e2e4 e7e5 g1f3"
I suggest to start sending "currmove", "currmovenumber", "currline" and "refutation" only after one second
to avoid too much traffic.
(...)
* currmove
currently searching this move
I dont think that washes. To do things some (most?) users want, like printing PVs, you must rely on the engine sending you those PVs. As sending PVs is not required by the protocol, in your philosophy any GUI that would print PVs should be considered 'broken', and good GUIs should never show the user any PVs. In practice, however, >99% of the users would consider a GUI that does never shows PVs broken, and an engine that doesn't send PVs to a GUI that normally shows PVs a crappy engine.Sure you can tell me that you don't care what the protocol author thinks you should do with the information you get. However, relying on behavior not required by the protocol is simply broken.
What the GUI can do for the user reflects the capabilities of the engine. If the engine is stingy with information, the user will necessarily get less. Never using information that is not mandatory sent would make it completely pointless to ever send that info, and that cannot have been the idea of adding the possibility to send it to the protocol.
The title of this thread contains the phrase 'bad UCI practice'. That is not the same as 'Non-compliance', right? It is the task of engine developers to use the protocol in such a way that their product becomes useful. And I want to draw attention to the fact that not sending the currmove infos, or delaying it to far beyond the recommendation by the specs author, damages the usefullnes of the engine.
Actually it is better to recommendate them to stay away from UCI and use WB protocol, which solves all issues satisfactorily. It is just that there already exist quite a few UCI engines fro Xiangqi and Shogi.For regular chess your problem is easy to fix: just let the GUI generate the legal moves. You can then use any info you get from the engine to improve the sorting of moves or whatever. If you don't get that information in time, then so be it.
For variants, I am sure engine authors will want to accomodate for your wishes. Just come up with a proper protocol extension that does what you need.
I can further add that recommendations by the specs author (like any recommendations) should be understood in the context of his intentions, rather than taken as gospel. The UCI specs originally served the purpose of prescribing rules engines had to follow to be compatible with Shredder GUI. And what is good for Shredder GUI, is not necessarily good for other GUIs. So engine authors that are interested in making there engine run well on other GUIs should rather think for themselves what would be optimal behavior, rather than blindly following recommendations in the specs... As the world changes, demands in computer Chess change as well. Of course I understand that UCI is a dead protocol, carved in stone and not able to adapt to the needs of the time, but that doesn't mean that recommendations that once might have been good are still good today.