views:

415

answers:

13

I'm trying to find a programming language I feel really comfortable learning and using for desktop/GUI application development. I realize it's unlikely that any language meets ALL of these criteria, but I'd like to find one that meets as many as possible. I've listed the following features ROUGHLY in order from most desirable/important to least.

Ideal Language Features:

  • Code Style: C/Java-like
  • GUI Development: Easy, elegant, and platform-Native styling
  • Community: Widely documented, active development, friendly & helpful, unity of focus
  • Object-oriented
  • Garbage Collection, no worrying about pointers, etc
  • Native compilation, NO 3rd-party runtimes like GTK or .NET
  • Multi-platform (can be compiled on *nix, Windows, Mac)
  • Reasonably fast
  • Mixed typing (soft-typed, OR both soft- and strict-typed -- i.e. Pike)

Background:

Most importantly, I need something that is straightfoward and reasonably familiar, and something that isn't going to require a deep understanding of platform-specific APIs. I can't afford to spend a lot of time learning to develop Win32 apps in C++ for example. I've used wxWidgets, and liked the basic usage, but I'm really wanting to use a language with garbage collection, dynamic typing, and so on.

My frustration with Java, C#, and others is the need for a 3rd party runtime. I don't want end users to have to worry about installing and maintaining a separate platform. Also, Java's community has a reputation for academic pretentiousness which really annoys me, and Microsoft's platform is oh-so proprietary.

Now then. Ideas??

+7  A: 

I'd suggest Groovy and Griffon. Groovy is a dynamic language (like Ruby / Python) that runs on the JVM and integrates with millions of Java libraries out there easily. Griffon is a high-productivity RAILS-like framework for developing GUIs. Groovy has been around for 5 years and has a robust community and is supported by SpringSource (now division of VMWare). Griffon is a bit younger, but also has a fairly robust community.

These seem to fit your criteria.

I know I switched from Java to Grails (web framework written in Groovy that's similar to Rails), and haven't looked back.

Jean Barmash
But he doesn't want to use Java...
Sebastian P.R. Gingter
Groovy isn't Java, it's a language that runs on the JVM.
Eric J.
Did you miss the first that says no Ruby or Python, which I presume would mean similar languages. Using the JVM breaks a couple of requirements as I see it so that doesn't work, I'm thinking.
JB King
JVM and Java are like apples and oranges -different concepts / layers of stack. There are many people who don't like Java that run their code on the JVM (i.e. JRuby Rails people).
Jean Barmash
@JB King - the JVM as a platform actually meets all of his requirements, and Groovy is one of the few good mixed dynamically- and statically-typed language. It's like Java, but good. An amazing fit for his list.
orip
One thing I was hoping to avoid is the user having to install and maintain a separate runtime on their system. However, I'm actually reconsidering Java at this point.
Brian Lacy
+2  A: 

javascript?

might be not the fastest one and doesn't fully address all your needs, but hey... its everywhere and easy to learn


didn't read after the list, but with prism You can probably achieve most your goals.

or You can try Qt and c++ autopointers

fazo
Perhaps there are frameworks that do that, but How would you develop desktop GUIs in JavaScript?
Jean Barmash
http://prism.mozilla.com/
fazo
+13  A: 

Haha, due to the constraints you imposed you are now left with HTML and javascript. Good luck :)

slugster
Since it's Thanksgiving, I'll thank you for bothering to read my question. Your answer, on the other hand, is worthless.
Brian Lacy
That's ok - i think the majority of the answers given show the futileness of your question. You have been a script programmer, what you need to realise is that desktop UI apps are vastly different to write. Your requirements eliminated every major language from the mix, leaving only what i (and many others) answered with, or some totally esoteric language that no-one uses or the world forgot.
slugster
Honestly, while my question was legitimate, I intended it as much as a thinking exercise (i.e., WHY doesn't such a language exist?). That said, I was hoping for suggestions on finding a platform that gets AS CLOSE AS POSSIBLE to the criteria I listed. Your response (and that of several others) served no useful purpose at all except to be rude and arrogant, and yet you've received a disturbing number of Upvotes for your sarcasm. That's a really unfortunate commentary on the mixed levels of maturity around here.
Brian Lacy
The answer is as legitimate as the question. You were specific with your requirements, i was specific with my answer. If you are not satisfied with the languages out there, then there is nothing to stop you writing your own. Don't revisit the issue several months later and complain - if you are dissatisfied then either rephrase your question or change your requirements.
slugster
Question rephrased, requirements modified. Yes, it's been a few months now, but this is still a topic I'm highly interested in, and one I've found to be highly relevant to a lot of developers besides myself. So pardon me if I'm also a bit frustrated by the lingering -2 vote.
Brian Lacy
+10  A: 

The answer to your question is simply: None. You excluded all desirable languages and platforms in your question.

I'd suggest you throw away your aversion against .NET and go with Delphi Prism. It's not C#, it is cross-platform compatible (everything is officially supported on Mono) and you can create applications that bring the runtime with them (Mono as part of your application).

Sebastian P.R. Gingter
Agreed, but -- by way of confession -- that was, to a certain extent, the point of the question. Why doesn't such a language exist? Still, I'm grateful for your comments and suggestions, they were quite useful.
Brian Lacy
+6  A: 

Have you looked at QT? It's a really great GUI library and there are bindings for just about every language in common usage. There is a ton of documentation and a wide community. You mention that you want to do something in a language with garbage collection and dynamic typing, but rule out Python and Ruby, which are the 2 most popular languages that fit this criteria (also, they both have great QT bindings, I use pyQT4 and it is just awesome). They really aren't that far from what you do in Java/C, you just end up writing a lot less.

Paul Wicks
Thanks for your useful response, Paul. I've looked into QT a bit, but at this point I'm definitely leaning more toward either Java (despite my intense frustration with the Java community) or C# with Mono.
Brian Lacy
+2  A: 

you have too many mutually exclusive contradicting requirements, there is NO language/platform that meets these criteria. If you have OSX Cocoa and Objective-C gets the closest to your ridiculous requirements. That said, Python and QT make for a great cross platform fat client GUI programming solution. Very easy to get started and productive and very powerful features.

fuzzy lollipop
Useful comments, but disappointed by your negative approach.
Brian Lacy
+1  A: 

Silverlight could actually give you enough cross-platform availability to use C#/.NET, but I am not sure it fits all your requirements.

Mathias
As indicated by several, no platform that currently exists meets all the requirements (and I fully suspected as much when I asked the question, ill-fated though it was). But C# on a cross-platform system like Mono may meet my needs. I'm actually re-evaluating the issue right now.
Brian Lacy
+3  A: 

The next iteration of Delphi is said to be cross-platform (Windows, Mac, Linux). I think it meets all your requirements except garbage collection.

Larry Lustig
And not existing yet? :-)
Ken
I don't see "must actually exist" on the list of requirements. . .
Larry Lustig
Point well made.
Ken
+3  A: 

No language meets all of those restrictions. Technically, it sounds like you're asking for something almost identical to Java but then explicitly disallow Java for unstated reasons. Conceptually, it sounds like you're looking for Python or Ruby but disallow them for using slightly different syntax.

Given the order of priorities, I think the closest you'll find in existing languages might be C with the Boehm GC and GTK+ for the GUI (and GLib for the object system). You do say "No GTK" under "No third-party runtime required", but I'm not sure what "runtime" you refer to here, since IIRC it's just a bunch of C libraries.

Given the specificity of the requirements, I think your best bet is to write your own language. Compilers really aren't that hard to write anymore. There are off-the-shelf tools to help with parsing and code generation and math and text processing and GC and so on. Once you get started you'll probably find people willing to help port it. Many existing cross-platform GUI libraries (like wxWidgets) use C/C++ so if you have a decent FFI you can use that, too. You want "support" and "documented" but if you're the primary author you'll understand it better than anybody. The hardest part about a language is design, and it sounds like you have a picture in your head of exactly what the language should be already.

Ken
Lots of useful input. Your facts are undeniable.
Brian Lacy
+4  A: 

Wow you really limit your choices. I'm going to jump on the QT bandwagon and recommend C++.

Most of the objects in QT inherit from another object that sort of does it's own garbage collection.

There is incredible documentation out there for it.

QT is extremely powerful and has most of the elements you would like, and is extensible if you want to modify elements yourself.

If you do a static build for your release build the people you give the application to won't need distribute any other libraries as they will all be built into the .exe file.

Brent Parker
Thanks for your useful input, Brent. I may yet give QT another look.
Brian Lacy
+1  A: 

Sounds like Action Script 3 will make you happy. But it's more web oriented but you could try to make a projector or an Air application. I think it's a good solution because you can do anything with AS3 (image, video, text, sound video text keyboard and mouse input, pear to pear and 3d since flash 10, ...) and it's cross platform and you can use it on the web or your desktop :)

If you are a pure root coder (using vim and only command line for ex) you can make your whole app without using the flash ide, by just writing your as files and compiling them with mxmlc (that comes with the free flex sdk).

XPac27
AS3 is a beautiful language. Too bad its confined to the Flash player.
Brian Lacy
A: 

Lots of good suggestions, despite being salted with negativity throughout.

I think I'm going to go with C# and Mono. I like C# well enough syntactically (I've been accused often of being shallow, but the syntax of a language is just as important to me as its features, because I spend a lot of time writing in that particular syntax). Although similar to Java, it has a few unique features that I appreciate, and I think the community seems more open-minded.

My biggest complaint about Java besides performance, frankly, is the community. It seems infected with an excess of arrogance, and it also seems to be very fragmented in terms of support for and development on various overlapping libraries, tools, and so on. The community surrounding Mono seems much more organized.

Actually, so does .NET itself, for that matter. Sun is a big enterprise company that seems every bit as confused about what it IS and what it DOES as Microsoft or IBM, yet they seem to be doing an even worse job of leading and organizing their platform than Microsoft, which is pretty tragic.

Brian Lacy
Admittedly, the relative cohesiveness of the .NET platform is a product of Microsoft' insanely proprietary corporate culture. Sun is more open in that regard, but their leadership is pretty junky even compared to that of many open source projects.
Brian Lacy
+2  A: 

There are a few if you can accept either WxWindows or GTK or QT as a toolkit.

In the order of my personal preference would be:

  1. Eiffel Studio
  2. D with the D-GTK binding
  3. F#
Lothar
+1 for being brave enough to suggest Eiffel ;-) and for recommending D and F#. If I could vote more than once, I would.
Barry Carr
I like D. I also like WxWindows.
Brian Lacy