Saturday, December 13, 2008

Java application development

When writing a new application in Java you really have several choices. You can use the SWT, swing, and perhaps QT to name a few. On Linux, you can probably use some GTK wrapper but I don't know.

Everyone wants extensible applications, but what does this really mean? The answer to this question is kind of important. There is eclipse-style plugin architecture; plugin with a capital P. You will not write a better plugin architecture than this. You may write one that is more minimal that suites just exactly your needs but it won't be better for sure.

I am stuck at this point. I would in some cases like to build an application off of the eclipse system but there is something about it I don't like; mainly the steep learning curve. My application will not look like eclipse and I am not certain it should use the workspace API. If you don't use the workspace plugin as the basis for your application, then the way I see it most of eclipse isn't really that necessary.

I am not certain I like how the SWT looks, or how responsive (or otherwise) it is. Swing is out of the question because I am going to use openGL. QT is my absolute top pick, but then I have to design the application framework myself.

The question is it worth it to spend serious time learning the eclipse application development foundation *and* figuring out how to get it working in a live coding sense, or should I just mess with QT?

It really bothers me, more than I would like. I have built applications before; the framework (the command architecture, input handling, the UI sub-structure) is really pretty detailed and takes a bit of effort. If you want chording inputs like emacs then you have to do a lot more work but that is honestly the only thing that makes sense. Now you want internationalization? That will take a bunch more work, something else eclipse has already solved well.

On the other hand, if you want great user-interaction; arguably eclipse does not have this solved. I don't like using eclipse; I always get into weird states with it and it really is slow. I would take visual studio over anything in most cases, followed closely by vim or emacs. Eclipse is a distant, distant choice I would only use if it really made sense. Perhaps this is ignorance on my part; but it is never enjoyable for me learning a new, large, non-trivial IDE. Visual studio crashes like it was born to but it is still pretty quick to do things with.

Actually, thinking about it I guess I could try to write some clojure extensions for eclipse before I jump into doing things with QT. The problem is that the UI lib is only 10% of the problem space that I don't care about any more. Everything else I mentioned is also a part of the space I don't want to solve in some amateur, one-off fashion.

But this is the thing. I am not going to use a system that doesn't support live coding. This means either I can launch it from the repl and come back to the repl by pushing a button (thus exiting the application's even handling) *or* I need some repl abilities *in* the app itself.

If I went with QT, I could run everything from the emacs-slime repl. If I go with eclipse, I will need to first build and extension that works with the repl.

Following my heart at this point means QT. Following my head means eclipse.

I guess that answers the question. I will mess with QT and hopefully come up with stuff that could be moved to eclipse should the need arise.

No comments: