Lisp IDEs (where for art thou?)
adrianmouat.com
adrianmouat.com
As for LISP IDEs, I use vim:)
Lots of people have used "Where art thou" in titles, which I think is what I should have used.
Unfortunately I can't change it without breaking any links, so I will now forever have an idiotic title!
-Conrad Barski
Thanks for the comment and the great book!
Also, if I may add, I think that using snipurl.com as a URL shortener in a printed book, for example for pointing to the Hyperspec, was a really bad idea. snipurl.com, like any other link shortener, may be short-lived and going out of business over night (think of tr.im), rendering all the printed links useless and seriously devaluing your book. So if there is any chance to change this for the second printing, by god, remove the link shorteners from the printed text! Anything, footnotes or a references page at the end with full URLs, is better than this.
That's a minor nitpick on a great book, though. :)
If you want to develop for iOS and OS X, it's hard to avoid XCode and Interface Builder.
Isn't Windows development largely dominated by Visual Studio? (I could be completely wrong about this, as I haven't done any Windows development outside of Visual Basic many years ago.)
It seems that various dialects of Smalltalk are strongly tied to their own IDEs, by design.
I believe that Python, Ruby, and Perl still subscribe to the "pick your favorite text editor with syntax bindings for the language" development philosophy.
For Lisp, the problem is that Emacs + SLIME is such an outstanding development environment already, that it forecloses the "itch scratching" motivation of experienced Lisp developers to write something else. They sometimes give it a shot to welcome new Lispers, but their heart is not in it the way it would be if they needed it for themselves.
(And of course, this ignores the paid IDEs, which are also very good.)
Java was around for almost a decade when Eclipse became really mature... And Java was a language that was designed for GUI development from the very beginning, however, the Eclipse team had to develop their own windowing toolkit from scratch to get something that could swing that load.
The Python community has dreamed of a Python-based IDE for as long as Python has existed, but it faces two roadblocks: (i) there is no 'standard' GUI toolkit for Python and certainly none with the required maturity and (ii) it isn't easy for an IDE to reason about dynamically typed code (also not as necessary... Eclipse substantially lowers the 'verbosity tax' that makes Java programming so wet.)
Part of the problem is that an IDE requires that people who are passionate about programming get together with people who are passionate about designing user interfaces. GUI programming is particularly expensive, especially for open mixed initiative applications such as moderns IDEs. The kind of person who is 'hyperproductive' in LISP (or any other language) tends to avoid the morass of GUI development, where you can spend months and months going back and forth with designers and customers making sure the app correctly supports every interaction that would be intuitive to end user.
Now, LISP does have the advantage of being easy to reason about (since the program is also data) but it's fair to say that a really good IDE costs millions and millions of dollars worth of programmer time to develop. The core of Eclipse/Java was developed by professional programmers working around the clock. The community contributed plugins for Eclipse, such as the PHP and Python modes, are just a joke in comparsion... In some sense they're a step up from vi, but they're an embarassment if you compare them to Eclipse/Java or Visual Studio/C#.
Is this true? Could you (or someone else) elaborate? I would assume that an editor trying to reason about Ruby or Python code would parse the source code into an abstract syntax tree, and that would be just as easy (or hard) to reason about as Lisp, since those languages are all dynamically typed.
However, I'm pretty ignorant of how tools like Eclipse reason about Java code, so this is all just guessing.
Seems like you'd want a handful of really good, comprehensive parsers for any language and people would just use those rather than rolling a new one each time.
It's certainly possible to parse PHP, Python or Ruby into an abstract syntax tree (OK, Perl is a little harder) but practically very few people do metaprogramming at that level, even when it's officially supported. (C# and VB have had "expression trees" for a few years now and they're barely used.)
Part of the appeal of LISP is that you can pretend Noam Chomsky was never born and never need to learn how to write parsers or deal with the data structures that they spit out.
Any kind of extreme metaprogramming is going to defeat 'reasoning-in-code'. For instance, in LISP I can easily implement a new kind of control structure... Because 'understanding' a program in general (rather than running it) is an undecidable problem, it's clear that an IDE will ultimately get bogged down.
I've written a lot of PHP lately in a metaprogramming-heavy framework that uses magic methods to 'create' new properties and methods. The way this is done is systematic, and an IDE could probably be loaded with rules that would help it 'understand' this usage, but so far as I do this kind of code analysis, it's going to be in command-line tools that are cheap to develop compared to GUI tools.
I thought you meant easy for an IDE to reason about to support the kind of auto-complete Intellisense that Eclipse and VS offer.
Emacs is an awesome lisp IDE and it appears to be not widely known that emacs is written primarily in elisp, a lisp dialect.
So I would highly recommend learning emacs and elisp together and forget CL for the time being. Sure elisp isn't as pure as Scheme but it's still a good first start and learning the pitfalls of dynamic scope will provide an appreciation for the features of other lisps.
Moreover, though you may not use lisp much in your other work, by learning emacs/elisp you end up with an awesome programmable editor that you can use elsewhere.
But if this writer picked up Land of Lisp, they might not be that quick to drop Common Lisp and jump to Emacs Lisp.
That being said, I think they should just start reading and hacking and not worry about which editor to use. That's going to be the least difficult part of learning Lisp, but people seem to make it out to be much more than that.
http://www.daansystems.com/lispide/
You can run sbcl, clozure and clisp underneath it.
I really wanted to write a portable "IDE" for Land of Lisp, I even have Scintilla right here on my desktop, semi-FFIed, but I absolutely have no time.
P.S. Don't call Java/C#/C++ stuff "IDEs" until you have seen Smalltalk. Pharo/Squeak are inimitable and have yet to be equaled, much less bested. Just a whole different class of software, really.
[1] You'll pry emacs away from my cold dead fingers, but I understand how it's not for everyone.
Hemlock, turns out, was not only an Emacs variant, but an old-skool one, requiring 8 fingers per human hand.
I own the book but have put off starting it for the lack of knowledge regarding a cross-platform IDE to do all the exercises in -- as my time would be split between my work Windows [1] and my home OS X environments.
I do, however, have Racket installed on both; so...
----
[1]: and I have already been shot down on Cygwin
LispIDE already ships with CLISP and full Common Lisp documentation. If you know how to use a text editor and click on a button labeled "Run", then you can use LispIDE.
You can stop by the IRC channel #lisp on Freenode, or you can shoot me an email if you need help, or tweet me a hola. Details in my profile.
One example: I re-implemented much of the example Haskell code from a functional data structures book in Clojure, which improved my Haskell reading, my Clojure writing, and ensured that I actually understood the algorithms.
So I heartily endorse your idea of implementing the Land of Lisp examples in Racket Scheme.
Emacs integration with Lisp distinguishes it from other programming languages, in the same way Smalltalk and it's environment does. You could learn Common Lisp without learning emacs, but you wouldn't want to.
Emacs isn't just an editor. It's arguably one of the best examples we have of how to think in, architect, and use Lisp, Common or otherwise.
The way to learn a language is to immerse yourself in it, and emacs gives you that opportunity, while other editors do not.
I left a comment to that effect.
Emacs is well worth the time, though; I agree with you.
I just don't want to learn Emacs. I just don't want to learn Emacs. I didn't think this was a controversial point. Why does learning lisp mean learning Emacs?
Mobody forces you to learn Emacs, but then you either have to pay for commercial IDEs, or use some unhelpful (even hostile, if you are used to benefits provided by sophisticated IDEs) enviroment. You can also set up Eclipse plugins which nobody in the Lisp world heard about, let alone uses. You can use simple text editor and go back to the way software was written in 70s. All these things because you refuse to use some piece of software, and yet are willing to learn others. The choice is yours, of course.
Actually, I don't see why I have to defend this. I've used Emacs before, I don't really want to again. Isn't that good enough? I'm happy for everybody that gets along with Emacs, but I'd appreciate another choice.
Ever since writing an application in Smalltalk (squeak) I've realize that a language and the environment it's edited in are very closely tied together. If 90% of the community of lispers uses Emacs+Slime there's probably a good reason. I don't particularly like Eclipse, but if I'm doing a reasonably large Java project I'll definitely be using it.
DrRacket does indentation (which can be customized), paren-matching, and syntax coloring, plus it has some Emacs-like keybindings. rlwrap does paren-matching, provides up-arrow access to previous commands (ctrl-p also works), and allows in-line editing (an improvement over the raw REPL, which isn't saying much).
However, there's no reason CUSP should be tied to SBCL.