I haven't seen a lot of response to this, so I'll post my two cents. What follows is specific reactions to the various proposed commands. If you didn't read the original post, I recommend doing that first (it's copied below my response)
I find it really hard to believe that there isn't already a rules command in GTP. Is it possible that one exists but doesn't work well? If there is no such command, I'd think it really should be in there.
captured_by_black and captured_by_white could in theory become a single command (accepting a color argument).
is_legal seems useful for regression testing, at the very least for super ko and suicide. It might be interesting to try and consider shades of gray with this command. Filling your own eye is probably frowned upon even though it's legal...
adjust_status seems interesting but may be a little too close to implementation dependent details?
thinking seems interesting, but I wonder how compatible it is with the way most engines implement GTP. I'd be in favor of this command but it might not work in many cases. At the very least, this can only be done when command ids are used.
I personally don't see much value in standardizing last_move, next_move_nr, and a few others. It seems like a test once, never use again type of a thing. I don't really even see it as being that useful for regression testing.
Mark Boon wrote:
I'm currently looking to see what it would take to replace my GoEngine interface by an interface that would fit GTP. Since they basically fill the same role, except that GoEngine was only meant for Java, there must be similarities. There are of course, but there are also some differences. These probably fall in one of three categories:
- Commands my GoEngine has but GTP doesn't and that are not strictly
necessary. 2) Commands my GoEngine has but GTP doesn't where maybe GTP could/should be extended. 3) Commands GTP has but my GoEngine doesn't, which are not striclty necessary to support.
At the moment only category 2 is of interest now, the other two categories I could deal with myself. I'll list them below. Most of them are related to the state of the game. Although the GTP definition explicitly states a certain amount of state is expected to be kept by the engine (like the number of stones captured, history etc.), it doesnt provide commands to query this state. Although it is not strictly necessary to provide means to extract this information, it can be very convenient. After all, for an engine to work meaningfully, it needs to implement a minimal administration of the game and knowledge about legal moves. By exposing this knowledge, a front-end could trust the engine to provide this information correctly, thereby reducing the complexity of the front-end.
# set_rules arguments rules (string) effects the engine will return moves and score according to these rules. output none fails when rules are not supported by the engine comments The engine needs to know by which rules the game is played, it seems strange this command is missing.
# captured_by_black arguments none effects none output number of stones captured by the black player (int) fails never
# captured_by_white arguments none effects none output number of stones captured by the white player (int) fails never
# is_legal arguments vertex color effects none output whether a move played by color would be a legal move (boolean) fails never
# next_move_nr arguments none effects none output number of the next move to be played (int) fails never
# color_to_move arguments none effects none output color of the next move to be played (b|w) fails never
# last_move arguments none effects none output vertex color (b|w) of the move that was last played fails never
# last_move arguments none effects none output vertex color (b|w) of the move that was last played fails never
# last_move arguments none effects none output vertex color (b|w) of the move that was last played fails never
# nr_passes arguments none effects none output number of consecutive passes played (int) fails never
# adjust_status arguments vertex* status (alive,seki or dead) effects the next call to final_score will return the score with the status adjusted at the list of points passed output none fails never
# thinking arguments none effects none output whether the engine is currently thinking about its next move(boolean) fails never comment this can be very useful to prevent undesirable re-entry of the engine
I would be interested to hear opinion against or in favour of these.
Mark