I fully agree that C++ is much, much, worse than Java. The wonder is that people still use it for major new projects today. At least there are better options than Java available now (I don’t know what the state of art was in 2002 that well).
If you got together an “above-genius-level” programming team, they could design and implement their own language while they were waiting for your FAI theory. Probably they would do it anyway on their own initiative. Programmers build languages all the time—a majority of today’s popular languages started as a master programmer’s free time hobby. (Tellingly, Java is among the few that didn’t.)
A custom language built and maintained by a star team would be at least as good as any existing general-purpose one, because you would borrow design you liked and because programming language design is a relatively well explored area (incl. such things as compiler design). And you could fit the design to the FAI project’s requirements: choosing a pre-existing language means finding one that happens to match your requirements.
Incidentally, all the good things about Java—including the parallelism support—are actually properties of the JVM, not of the Java the language; they’re best used from other languages that compile to the JVM. If you said “we’ll probably run on the JVM”, that would have sounded much better than “we’ll probably write in Java”. Then you’ll only have to contend with the CLR and LLVM fans :-)
I don’t think it will mostly be a coding problem. I think there’ll be some algorithms, potentially quite complicated ones, that one will wish to implement at high speed, preferably with reproducible results (even in the face of multithreading and locks and such). And there will be a problem of reflecting on that code, and having the AI prove things about that code. But mostly, I suspect that most of the human-shaped content of the AI will not be low-level code.
I think it’s pretty fair to say that no language or runtime is that great on concurrency today. Coming up with a better way to program for many-core machines is probably the major area of research in language design today and there doesn’t appear to be a consensus on the best approach yet.
I think a case could be made that the best problem a genius-level programmer could devote themselves to right now is how to effectively program for many-core architectures.
Speaking of things that aren’t Java but run on the JVM, Scala is one such (really nice) language. It’s designed and implemented by one of the people behind the javac compiler, Martin Odersky. The combination of excellent support for concurrency and functional programming would make it my language of choice for anything that I would have used Java for previously, and it seems like it would be worth considering for AI programming as well.
I fully agree that C++ is much, much, worse than Java. The wonder is that people still use it for major new projects today. At least there are better options than Java available now (I don’t know what the state of art was in 2002 that well).
If you got together an “above-genius-level” programming team, they could design and implement their own language while they were waiting for your FAI theory. Probably they would do it anyway on their own initiative. Programmers build languages all the time—a majority of today’s popular languages started as a master programmer’s free time hobby. (Tellingly, Java is among the few that didn’t.)
A custom language built and maintained by a star team would be at least as good as any existing general-purpose one, because you would borrow design you liked and because programming language design is a relatively well explored area (incl. such things as compiler design). And you could fit the design to the FAI project’s requirements: choosing a pre-existing language means finding one that happens to match your requirements.
Incidentally, all the good things about Java—including the parallelism support—are actually properties of the JVM, not of the Java the language; they’re best used from other languages that compile to the JVM. If you said “we’ll probably run on the JVM”, that would have sounded much better than “we’ll probably write in Java”. Then you’ll only have to contend with the CLR and LLVM fans :-)
I don’t think it will mostly be a coding problem. I think there’ll be some algorithms, potentially quite complicated ones, that one will wish to implement at high speed, preferably with reproducible results (even in the face of multithreading and locks and such). And there will be a problem of reflecting on that code, and having the AI prove things about that code. But mostly, I suspect that most of the human-shaped content of the AI will not be low-level code.
How’s the JVM on concurrency these days? My loose impression was that it wasn’t actually all that hot.
I think it’s pretty fair to say that no language or runtime is that great on concurrency today. Coming up with a better way to program for many-core machines is probably the major area of research in language design today and there doesn’t appear to be a consensus on the best approach yet.
I think a case could be made that the best problem a genius-level programmer could devote themselves to right now is how to effectively program for many-core architectures.
My impression is that JVM is worse at concurrency than every other approach that’s been tried so far.
Haskell and other functional programming languages has many promising ideas but isn’t widely used in the industry AFAIK.
This presentation gives a good short overview of the current state of concurrency approaches.
Speaking of things that aren’t Java but run on the JVM, Scala is one such (really nice) language. It’s designed and implemented by one of the people behind the javac compiler, Martin Odersky. The combination of excellent support for concurrency and functional programming would make it my language of choice for anything that I would have used Java for previously, and it seems like it would be worth considering for AI programming as well.