A bird's-eye view of computer-Go programming: a large part of what a Go program does will probably be some sort of analysis of a deep tree of possible moves, involving the exploration of millions of possible positions. The guts of this should be as optimal as possible. A slower language such as Ruby or Perl is not a good fit for such efforts - but that's a strawman argument, of little practical relevance.
Higher-level optimizations can provide far more remarkable speed gains than the choice of implementation language. When Lukasz Lew wrote libego, I believe he recast the algorithms a few times in order to extract maximum performance, as he discovered more about how his chosen language ( C++ ) is compiled into assembler, and how that affects performance. Improvements to move ordering algorithms can enable reductions in the breadth of trees, which greatly reduce the size of the tree. Improvements in the quality of playouts result in vast improvements to the quality of the evaluations, which can lead to reductions in evaluation times. Several have noted that fast mersenne twister algorithms improve the speed and quality of "random" playouts. Ways to refactor, to incorporate higher-level knowledge, and otherwise increase the performance of our programs will be discovered as we learn more about the demands of computer Go. Better algorithms can improve program performance by factors of tens, hundreds, even thousands. Some future improvements will surely lead to increases of hundreds of elo points in ratings, given the same hardware and implementation language. Some of us will find ways to wring lots of elo points from multiple processors. Some of these improvements may be much more easily expressed in higher-level languages than in C. I cut my teeth on FORTRAN and C and assembler, having written hundreds of thousand lines in such languages, as well as piles of scripts in Perl, Ruby, Python, R, and other languages. I've chosen to study Lisp again ( which I last tinkered with in the 70s ) because I think I see interesting ways to take advantage of the unique properties of Lisp. I could write C equivalents to these capabilities - but I'd rather use a language where where my ideas are a more natural fit. There's a saying that any sufficiently sophisticated program will eventually include a buggy implementation of the Lisp eval loop. My efforts may use C libraries for some speed-intensive task; it may be all Lisp; too early to make that judgment. When humans explain how they play Go, their algorithms rarely require the investigation of millions of potential positions. A good program need not follow the same methods as a good human player, but it just might be that human play still offers a few very high-level optimizations. Fuel for thought. ____________________________________________________________________________________ Get easy, one-click access to your favorites. Make Yahoo! your homepage. http://www.yahoo.com/r/hs
_______________________________________________ computer-go mailing list computer-go@computer-go.org http://www.computer-go.org/mailman/listinfo/computer-go/