sje wrote:Generating SAN is fast and easy. To make it even faster, Symbolic has a routine which will scan a list of the moves for a position and determine which moves give check without actually doing an Execute()/Retract() cycle. Another routine tests each checking move for being a checkmate, and this is fast because Symbolic uses a HasNoMoves() routine, highly optimized for this purpose.
Symbolic also handles notation generation for list of sequential moves. Each move has a set of move flags, and one of them indicates if the move has already had its four notation flags (check, checkmate. rank/file disambiguation) correctly set. Therefore, notation work is not done more than once for the same data.
When Symbolic handles user move input, that input can be a long sequence of sequential moves. Each is checked before the entire sequence is played on the main beard.
Yes, I have some fancy stuff too. That is the issue, a protocol should not impose an author to do fancy stuff when there is a light weight solution, and more is not needed. You can always do it yourself, but a author may have no intention to write an application for human interaction.
The notation processing can handle millions of moves per second. I do not see how that can cause a program to lose on time.
No, that is not the point. 1. e4 e5 2. f3 Qh4 (no +, GUI's fault) and the engine rejects the move as unknown/illegal. Then the engine waits and loses on time. This is not an exception for one GUI.
All of the output for a single search would likely need less than a millisecond for SAN encoding and decoding.
If winboard/xboard does not handle SAN check/checkmate marks correctly, then that's a problem and should be fixed.
I said that winboard does it well. Others don't. But that is the issue, it is error prone. In fact, some GUI writes REFUSE to add the check because they claim is sifnicant for ultra fast testing. I do not know if that is correct, but the fact that some have this policy clearly tell me that this is doomed to failure.
Simple move communication is the minimum an author should have to start writing an engine. Forcing them to have SAN parsing before they even can play a game is also discouraging.
Why is all of this important? Because people post long traces of coordinate notation variation data. This is gibberish to human readers. It is also useless when someone would like to cut-and-paste variations into another program.
That is an unrelated problem. You can have optional input/output in your engine.
Miguel