I think that this "getc/putc works with single-character abort" is not really as big an advantage as it seems. getc/putc are simply a standard 1-character buffer on FILE *'s provided by posix. It would be about 10 lines to write a similar system that can buffer up entire lines, and that will work equally as well with single-character aborts or "abort" as a text command. The advantages of a readable text "abort" outweigh the simuler code in POSIX systems for single character aborts in my opinion. Although I admit, now we're getting into opinions rather than facts, so it is harder to really argue either side of this.
One thing I haven't heard discussed, does anybody really dislike having an optional "abort" command? Or is everybody OK with adding a section to the spec that says "If you support aborting commands, this is the way to do it"?
On Tue, 2002-10-29 at 03:00, Markus Enzenberger wrote: the single character solution leaves the possibility open for a simple implementation on POSIX systems avoiding the need for a thread. You could use select, getc and putc to poll at certain times during your lengthy command and do a blocking read when waiting for the next real command. Putc allows you to put back only one character. (It does not work if there is still something in stdio's buffer, but this is no problem, since interrupting won't be used in batch mode anyway).
Hi,
On Sunday 03 November 2002 22:04, William M. Shubert wrote: [...]
as a text command. The advantages of a readable text "abort" outweigh the simpler code in POSIX systems for single character aborts in my opinion. Although I admit, now we're getting into opinions rather than facts, so it is harder to really argue either side of this.
One thing I haven't heard discussed, does anybody really dislike having an optional "abort" command? Or is everybody OK with adding a section to the spec that says "If you support aborting commands, this is the way to do it"?
I have thought about implementing it in the various small "xxxplus" engines. But I immediately hit a snag: it's quite obvious that the engine has to react differently according to what it was doing when it receives the "abort" command. What should it do if it receives the "abort" just after it received a "quit"? Or after receiving a "boardsize"?
Let's assume it can only receive an "abort" after it has received a "genmove"... Should it "undo" anything it has done until now? What if it can't undo changes to some data structures? Should it fail? But the spec says that any failed command should not change the state of the engine...
I confess I gave up after a few minutes. Receiving an "abort", either as a single character or as an (IMHO preferable) full word, in a separate thread, is easy in Linux. Making the engine react in a consistent manner, compatible with the rest of the GTP command set, would certainly require a lot of work.
Perhaps I am wrong and somebody can come up with an unambiguous one-paragraph GTP spec for the "abort" command. I couldn't think of any way to do that. :-(
Regards,