A related question:
What IDE are people on Windows using?

I've struggled for a long time to find an acceptable environment on
Windows and would love to have more detailed pointers.

My experience:

Clojure Box - Easiest way to get started.  Runs without much hassle.
Dependency management is difficult, in part because it doesn't
integrate with the community-standard tools such as lein and clojars.
It is possible to set up a classpath and install libs for the whole
environment, but I've never figured out how to do it on a per project
basis, launching a "project-oriented REPL" that has exactly the
dependencies needed for a given project.  Only runs the latest stable
version, so there's no way to play around with alphas or go back and
forth between projects that use 1.1 and 1.2.  I've also never figured
out how to do any debugging/profiling in Clojure Box.  Also, don't
know how to build any kind of standalone jar in Clojure Box.  Some
libraries don't seem to work with Clojure Box (e.g., Clojuratica), and
messages printed in multi-threaded apps don't always show up.

lein/emacs - Getting lein to run under Windows has been an ongoing
struggle.  It sort of works, but there are a lot of little problems.
I've made lots of edits to my batch file to try to address the
problems, but then it becomes difficult to update to new versions of
lein.  Some of the problems I've encountered: REPL doesn't use version
of Clojure specified in the project file; doesn't use specified jvm
flags; tests don't work.  Whereas Clojure Box starts you right up in a
REPL, with lein/emacs it is a multi-step process in which you first
have to start a swank server from the command line, and then
slime-connect to it from emacs (usually generating a bunch of warnings
about mismatched versions).  The good part is that the REPL is then
customized specifically for your project with all the right
dependencies.  Also, compiling uberjars is easy.  The bad part is that
killing threads and restarting the session from within emacs doesn't
seem to work, so it's quite a hassle to stop and restart everything
when you get caught in an infinite loop.  As with Clojure Box, I've
never figured out how to debug or profile code in lein/emacs.

My favorite part about emacs:  Emacs is incredibly stable, and I run
it for days without closing it, and have no trouble.

General complaints about emacs:  My #1 issue with emacs is that I
don't know how save my "workspace" so that I can return to emacs and
automatically open the last set of files I was working on, and my
places within them.  It's always a big hassle when I sit down to work
to open up all the files manually and find my places.  I don't like
the way so many of the keystrokes conflict with the normal keystrokes
used in other programs, so when I get in the habit of typing, say
Ctrl-X Ctrl-S to save a file, and then do it in another file, I
discover I've accidentally "cut" a huge block of text and then saved
it.  It's so out-of-step with other apps, it's very frustrating to
use.  I've learned how to adjust some of the keystrokes in the config
file, but inevitably, these modifications end up clashing with other
packages.  I've experimented with paredit and org-mode, and if you use
things like CUA or other customizations, they just don't work that
well.  Lots of little things don't work quite right in emacs (at least
on Windows), for example, dragging a file onto emacs to edit it, and
copying and pasting between apps.

Netbeans/Enclojure:  Lots of nice stuff here.  The REPL works very
well, and is easy to restart.  I found Netbeans' source control
integration to be easy to use.  You can build a standalone app which
places the dependencies in a folder, but I don't know of a way to
build an uberjar using Netbeans/Enclojure.   If you know what jars you
want, it's easy enough to add them to the project and get a custom
REPL that sees those jars.  Unfortunately, many Clojure libraries
assume you are using lein to automatically download chains of
dependencies; it can be hard to find all the relevant jars and add
them manually to the project.   For me, the #1 showstopper is that
Enclojure becomes unreliable after about an hour of use, and any
customized settings are repeatedly lost.  I tried to update to the
latest versions of Netbeans/Enclojure to see if things had gotten
better, but just experienced a whole lot of breakage.

IntelliJ/La Clojure:  I tried this briefly when it first came out.  I
liked the look and feel of IntelliJ and found it to be the most
intuitive of the IDEs I tried.  I couldn't figure out how to run the
REPL with customized java flags (such as -server), and I encountered
several formatting errors and bugs that were frustrating.  I reported
the problems and checked back several months later, and as far as I
could tell, nothing had changed.  So I gave up, assuming the plug-in
wasn't being actively developed.  I never got far enough with it to
determine how it fares on other criteria, such as ease of creating a
customized project REPL with the right combination of dependencies,
the ease of compiling some sort of standalone app, ease of
debugging/profiling, etc.

Eclipse/Counterclockwise:  Never tried.  From the project page, it
sounded like many features were not yet implemented (e.g., formatting
of code) and that it therefore wasn't ready for prime-time.
Furthermore, in my previous exposures to Eclipse (unrelated to
Clojure), the environment seemed bloated and confusing.  Maybe I need
to give this IDE more of a chance?

VimClojure: I've never liked vi, so I didn't try this one.

Overall, there are a bunch of "almosts".  If only Clojure Box had
better dependency management...  If only lein and emacs weren't so
quirky on Windows...  If only Enclojure didn't hang and erase settings
after an hour of use....  If only La Clojure had progressed beyond
being a "proof of concept"...  But as things stand, each IDE drives me
up a wall, making Clojure programming far less pleasurable and
productive than it should be.

Looking back over the above comments, it looks like my major checklist
points for an IDE are:
1.  Reasonable set of editing features (indenting, formatting, paren matching)
2.  An easy way to load all the relevant code and dependencies into a REPL.
3.  An easy way to make the REPL obey the -server flag, and use the
proper version of Clojure for a given project.
4.  A way to come back to where I left off with a given project.
5.  A way to compile projects for standalone use.
6.  A way to debug and profile code.

Anyone have anything working on Windows that fits this list?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to