mar wrote: ↑Mon Nov 30, 2020 10:47 pm
yes, well with UCI being verbose I wasn't thinking about sending time, but rather sending the game state, which is sent before each search.
like position startpos moves ..... and a long noodle of say 80+ (half)moves, of course GUIs could use FEN compression from the last irreversible move, so position fen .... moves ..., assuming the engine supports position fen of course - might be a nice option for GUIs to have, actually
I've actually wondered WHY GUI's don't do that. I have actually only implemented handling "position fen <string>"; when I encounter "position startpos", I just send "position fen <startposition_here>" to the engine thread. It's trivial to support both "position startpos" and "position fen".
With regard to verbosity... I don't really mind. everything after "moves" is just packed up into a vector, flung to the engine thread, and there the engine starts executing moves one by one from the position. If it encounters an illegal move (which has only happened in testing, with me putting in an illegal move), it stops and prints an "info string".
in general, I prefer CECP mode on Linux (where I use xboard) and when analysing a position from the console => the xboard output is so much nicer than the clutter sent by UCI and you could also send smileys on fail low/fail high

To mitigate this, I've implemented a --quiet option in my engine:
--quiet 0 => full search output including info updates for time, speed, curr_move, etc...
--quiet 1 => only send info when a depth was finished.
--quiet 2 => send nothing at all. I don't use this myself. I basically 'upgraded" --quiet to take a parameter, so I could use the state caused by "--quiet 2" for XBoards "nopost".
this doesn't mean I don't like UCI, quite the contrary - my experience is that (assuming you're writing an engine that plays regular chess) UCI is easier to start with (IMO - YMMV)
CECP is more flexible, but also more difficult to get right. as for variants, I think xboard/winboard + CECP is the best bet, even though I believe there're unofficial modified UCI versions that support variants other than 960
There's an (unofficial) variant "USI" for shogi, and "UCCI" for XiangQi (Universal Chinese Chess Interface).
Personally, I don't like massive protocols and engines that try to cater to everything under the sun. It makes things confusing.
If I'd ever want to write a Shogi engine, I'd use USI and a proper Shogi GUI. Same for XiangQi.
I'll probably never use Winboard, as the program is not my kind of software. I've also been a UCI-engine user since forever (under the Fritz GUI, and Fritz itself before I actually started to use other engines), so I probably won't even run my own engine in XBoard mode.
I do respect Winboard/XBoard however, and the CECP protocol, and I can understand why people like the program and the protocol; and that's why I implement CECP to make the engine run as a native XBoard engine. That way, people who absolutely loath UCI and don't trust or want to use adapters, can still use the engine in XBoard (or Arena or Banksia for that matter; they both work, at least the current analysis mode).
When I'm done with these last bits in XBoard CECP, the implementations in the engine will be equal. The engine can then do with CECP what it can do in UCI, and I intend to keep them on par... as long as I don't have to go out of my way and suddenly discover that I'd have to rewrite half my engine to support some feature in XBoard. (But I doubt that, to be honest.)