So far the minimal GTP command set includes:
Boardsize Komi Fixed_Handicap White Black Genmove_Black Genmove_White Undo (* provisional for now) Quit
What else?=20
Shouldn't we start by defining what the objective of a "minimal" command set is?
We have 2 basic ways to go:
1. A purposely small, but reasonably competent set.
2. The very minimal needed to let 2 programs play a game, if you set up the engines correctly.
In the first option, we try to make a set that is "complete" in some sense. A good interface should have enough "interface" to be able to set up the engine. I should be able to tell my engine to use GTP and not have to worry about anything else unless it is highly engine specific.
The second way to go has the appeal that if you set up the engines with the right options beforehand, you can at least play a game and all programmers won't have to work too hard to implement this set.
Although this appealed to me at first, I have this feeling that whatever we do on the first pass, will end up being the defacto standard and nothing beyond this will likely get implemented. We will live with it for years! Maybe we should make some effort to make it complete enough to serve us well?
What I had in mind was a command to tell the engine what kind of ko rule is in use, a command to set the level (otherwise we have to build interfaces that don't have this ability) and a command to set up a board position. We also need a little bit about ruleset usage, because Tromp/Talor or Australian rules actually affect the final score if a program doesn't know these rules are being played.
True, we don't need these features, you can set up the engine ahead of time, but you cannot build a high quality interface this way, can you?
I'm not suggesting we add every bell and whistle, we still keep it very simple, we just add a couple of primitives that are enough to build a full blown interface with a good feature set, like loading and storing games and positions, setting a level, taking back moves, etc.
Is this too ambitious?
Boardsize Komi Fixed_Handicap White Black Genmove_Black Genmove_White Undo (* provisional for now) Quit
So what if we add something like this? (I need feedback here)
ko setup ruleset set_level version
This is short and sweet, and adds a lot of power to interface builders. I would rather add these and then say "it's ok to return "not_implemented" than to leave most everything out.
What do you think? By the way, I'm not sure what arguments to give to these commands, I'm very new to GO and didn't even know the rules when I started writing my program (and probably still don't.) How many KO rules are there? What is most common? Setup should take a list of white and black stone locations, without any kind of move validation expected. I'm not sure what levels to support, what is common usage in tournamants?
Don
P.S. So maybe we should call this the "recommend" gtp command set, and let programmers decide what to implement? Then we don't have to argue about whether "undo" is a useful feature or not.