On Sat, 2010-11-20 at 01:10 +0000, James Ashley wrote:
Hi, all.
I've been programming for close to 30 years now, and I've been trying to find a good excuse to really learn common lisp (as opposed to just dabbling) for the past 3 or so.
I've been programming in Lisp (first Zetalisp on a lisp machine, then Common Lisp on Unix, Windows, and Linux) professionally for 25 years and I find it to be the best language for just about anything.
I think I've finally come across a project that feels like the right "fit." The basic idea is a collaborative 3-d client-side application server with a built-in IDE that persists the state off all its applications between all its program runs.
You need to be aware that CLIM doesn't have any 3D concepts in it so you will need to add those abstractions. The good thing is that CLIM is layered so if there are no high level facilities that do what you need, you can build them up from the lower level facilities.
This is total vaporware at the moment...I'm just trying to do some basic research and pick the right tools. I've been involved in way too many where we started out in one environment, got a proof of concept, then realized there were some fundamental limitations that kept us from moving forward, so we essentially had to start over from scratch (or wound up layering ever-more-unmaintainable pieces on top of an unsustainable architecture).
Right now, I'm thinking off "applications" being developed on at least 4 different levels. One would be raw common lisp, that interacts directly with the "interpreter." Another would really be creating custom frame managers (I think...I'm just scratching CLIM's surface) to provide eye candy effects (since I'm planning on targeting the masses, I've learned that it's pretty much all about the eye candy). Yet another would be something like the HTML/CSS/Javascript paradigm to create 2-d "applications." And the last would be the actual 3-d world where the users interact.
A combination of Open Cobalt and World Forge seemed like the "proper" mix at first. But, the more I dug into smalltalk, the less impressed I was. I kept thinking "If only I could write a macro to do all this..."
The more I dug into it, the more I realized just how big and ambitious this project is.
One thing I've found is that I can build applications much faster in Common Lisp and they are much more robust. You may find that as you become more proficient in CL that your project doesn't take as long as you thought.
If I'm going to be dedicating 10 years (or more) to something, and forcing my users to download some obscure runtime anyway...why not go with a language that left my jaw on the floor and my head spinning? I realize common lisp isn't perfect, but what is? (Clojure's tempting. I downloaded it, spent about 20 minutes to get a REPL, and finally gave up. It may be mature and "ready for the big leagues" before this project is, but...common lisp's there now. Racket's similarly tempting, but I just don't seem to fit with the Scheme community).
I currently use SBCL as my free CL of choice and LispWorks as my commercial CL of choice.
The ideas behind McClim seem to feel like it's the right "fit" for the GUI part of the project. Not all the eye-candy pieces, of course. Just...conceptually. I've been digging my way through the old mailing list archives (the check-in comments are a lot more educational than I realized at first. I'm glad they got archived that way), and I see that there's been speculation about an OpenGL backend for ages now (and at least an experimental stab at writing one).
Conventional wisdom seems to dictate using something like one of the GTK bindings for the UI. But it seems to me that, if I started there, I'd just wind up re-implementing tons of CLIM to get to an abstraction level where I could forget about that and get down to real work. It seems to me that my time would be better spent helping get the GTKairo working solidly.
It's interesting that you should mention "re-implementing tons of CLIM". I have watched (mostly) and participated (a little) in the development of XEmacs for many years. As they discussed the various target user intefaces (Win32, GTK, etc.), I noticed that they were implementing parts of CLIM in C.
Actually, one of the nice things about using CL and CLIM is that you get to define your UI separately from the implementation, thus, allowing you to more easily port your application to more systems. CLIM can have multiple backends: GTK, OpenGL, Win32, XLib, etc.
Either way, I'll wind up duplicating the work to switch to some crazy gadget set built entirely on some 3-d engine or other.
I see one of the fundamental programs being a traditional "form builder" kind of drag-and-drop thing along the lines of VB. Probably with some kind of tree view (or maybe boxes) to hide the fact that the code's actually being written in lisp.
Am I barking up the wrong tree? Like I said...I've been going through the old mailing list archives. I've normally have wrapped that up and at least gotten more than a passing acquaintance with actually writing McCLIM code (at this point, I'm just digesting that ancient CLIM "walk-through" referenced first on the home page) before de-lurking. But I ran across someone else today who seems to be thinking on at least vaguely parallel lines to mine, and I figured this was the best place to check before I wasted his time with my ideas.
I say go for it. I haven't found a project yet that I wouldn't rather do in Lisp.
Craig