I'm really undecided about which is the "best" language for open source
graphical apps. C/C++ require lots of debugging and have too many subtle
ways to introduce bugs, but interpreted languages just require too many
resources.
Most interpreted langs require resources because they do a lot for a programmer. Computers are supposed to make our lives easier. So use the damn things. I never want to have to manage memory ever again. After 5 years of Perl & Java I'm dreading having to go back to C/C++.
I thought apps in a language like python seemed like a good idea, but
I'm not sure anymore. Gnome apps seem bloated enough as it is when
written in C/C++, but something like gdesklets (lots of cool desktop
I have seen a number of things that suggest Python tends to be slow and heavy. But I don't use python so I can't comment authoritatively.
However, interpreted languages make for quicker development, and much
easier to tweak/patch/improve, so maybe the tradeoff is worth it, even
if it does require faster gruntier computers to run a modern desktop.
The language doesn't have to be interpreted. Java is a compiled language. It's just not compiled to the native machine code.
Java isn't free enough to be included by linux/bsd distributions,
although hopefully some free Java Runtime Environments (ie not the ones
from Sun or Blackdown) will get "good enough" in the near future. Even
I have hope that Java will be Open Sourced in the not too distant future. Sun are edging towards accepting this idea. If they don't they will ultimately loose out to Mono (as long as Mono doesn't run into Patent issues).
so, java doesn't seem very good for graphical apps, and the virtual
machine needs too much memory/startup time, although runtime performance
Not true. Not true at all. Java's Swing library isn't very fast. This I conceed. But it is fast enough for most things on modern hardware. However you don't have to use Swing. You can use SWT. This is a GUI API developed by IBM that is a very thin wrapper around the native widget set of GTK or Win32. Eclipse uses it to great effect and so do a few other apps such as Azureus (a nice BitTorrent client/server). So you get native GUI performance with Java's nice internals and huge library of reusable code. The Jakarta project rocks in this regard.
And of course for server or command line apps you can always compile them with gcj if you want to try and get more performance. Though this isn't guaranteed. Sometimes Java is faster than native code.
Ultimately if we want faster apps we need more memory in our PCs. This is what 64bit computing will give us. Huge amounts of RAM. Disks suck. They are extremely slow devices. They should only be used for persistent long term storage. Your entire OS and app set should run out of RAM. You should never turn a computer off. There are three types of efficiency in programming. Speed efficiency and space efficiency and man-power efficiency. I personally want man-power efficiency. RAM and CPU's are cheap, life on the otherhand, is in short supply. :)
Regards