I decided to go ahead and convert the remaining printf()
calls (too chicken to try switching to Java 5 at this point) and ignore the signal()
calls so I could try running GNU Chess/Java. The signal()
calls are only used for handling control-C to allow interupting of the think process. Not sure what the Java equivalent would be.
For a while, I would get early crashes when trying to run. Usually these were NullPointerExceptions due to uninitialized array members. IndexOutOfBounds errors were a little trickier to fix, and for one of them I had to actually run the C version to compare values. Turns out the array index was -1 there, too! I’ve already marked a half dozen or so places where the C code looks suspicious, so I think this effort will unearth a few problems in the original source.
There were a couple of errors to get around when trying to build the C version, which I’m guessing are due to different versions of the developer tools on Mac OS X 10.4. There is also a problem running the C version. It seems to process one command and then get a bus error. Coincidentally, the Java version has a similar problem. After processing one command, it gets lost trying to look for more input — there’s some threading issue going on.
The program has some self-test commands that I was able to use to compare speeds. The Java version appears to be about half the speed of the C version. Some results
Test | C | Java |
---|---|---|
movegen | 34M moves/sec | 16M moves/sec |
eval | 217K evals/sec | 110K evals/sec |
Not bad.
Other tests, which actually try to find the best moves, are crashing …. If I can get past that, I may need a catchy name for this project. Jnuchess?