I have gotten a more recent version of CCW up and running in Eclipse
and can now compare some aspects of their behavior, particularly
regarding the REPL.


On the plus side for CCW:


* No timeout bug starting REPLs. The timeout period seems much longer
than Enclojure's. (The Enclojure Google Group seems to have a recent
thread about this issue, with a link to a patch to lengthen the
timeout recently having been posted by the maintainer, but the
instructions for applying it seem both awkward and somewhat vague --
where is the manual override for the update site URL supposed to be
set, and how do you undo this later? Not mentioned in the post. The
awkward bit being the need to override something like that at all.)


* Correct behavior of *print-length*, e.g.

=> (set! *print-length* 20)
20
=> (iterate inc 0)
(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...)
=> 42 ; Look, ma! It didn't hang!
42


* None of several NetBeans REPL bugs, such as

user=> (defn foo [x]
         (let [bar (frobulate x)
user=> #<CompilerException java.lang.Exception: unmatched delimeter '['>
user=> #<CompilerException java.lang.Exception: unmatched delimeter '('>
#<CompilerException java.lang.Exception: unmatched delimeter '('>
user=>

and the ability to sometimes hang or otherwise b0rk up the Enclojure
REPL by terminating a line inside a string or character constant or by
having an unescaped backslash in a string literal.


* Eclipse tools such as built-in diffs/history can easily be applied
to Clojure source files.


* Rainbow parens.


* Whole thing seems snappier, in particular not freezing for extended
periods after being left idle for a while. Memory consumption by
Eclipse seems lower than by NetBeans.


On the minus side for CCW:


* There's no easy way to restart a REPL or close one; one must close
the REPL tab and also find and kill a java process using ps/kill or
Windows Task Manager or whatever tool, depending on OS.


* There seems to be no right click menu option to (re)load a source
file (either from the open file in the editor, or from the file's
listing in the package explorer) in an open REPL. Run... will start a
new REPL for each file/reload; to (re)load in an existing REPL seems
to require select all, copy, paste, enter, which will clutter up the
REPL history with (possibly very long) blocks of code. Drag and drop
from editor to either pane of REPL does not accomplish anything
either.


* No separate option to start a project-classpath'd REPL without
loading any files initially.


* Namespace Browser is nifty, appearing to introspect on the open REPL
to maintain a set of defined symbols; similarly, autocomplete "sees"
your REPL-defined functions and vars. However, it won't update if a
var is redef'd with changed metadata; e.g. if you define a function
without a docstring, then redefine it with a docstring, the docstring
won't get added to the tooltip for its symbol in the Namespace
Browser. In fact, under some circumstances (I'm not sure what), it
won't update promptly to reflect a new function definition at all.
Oddly, it will update eventually but I'm not sure what triggers it. On
the other hand, it has a handy incremental search box at the top.


* Editor doesn't seem to have an option to reindent a block of code;
going line by line and hitting tab seems to be the only method
provided, short of fully-manual reindentation.


* REPL editor turns a dark gray if there's an unmatched close
delimiter, which on my monitor/system, at least, makes it difficult to
see the insertion point and paren-matching marker box, and thus to
find and remove the mismatched delimiter (or add its missing mate).
The main editor also turns dark gray under similar circumstances,
except, crucially, for the line containing the insertion point. Also,
unmatched delimiters aren't always detected, e.g. (defn foo [x (] bar)
does not flag the unmatched ( inside the arglist.


* There seems to be no easy way to get the REPL to use the -server vm.
Eclipse seems to only look for JRE runtimes, not JDK runtimes, and if
manually pointed to a JDK directory, it says it can't recognize the
runtime library, whereas if pointed to the JDK /bin subdirectory, it
says it can't recognize the java executable. So it doesn't seem to
provide a way to use the JDK's java runtime instead of the JRE's, and
the JRE's does not recognize the -server flag, at least not on
Windows, for whatever reason. The only apparent workaround is to
manually launch the JDK's java.exe with a manually-set classpath and
appropriate arguments to run the REPL server in it, and then manually
connect to that server to get a REPL pane in Eclipse.



All in all, the bugs/awkwardness factor seems similar for both options
at this point. There is an odd pattern though. Most of the Enclojure
bugs make it easier to crash the REPL and harder to restart it when it
goes, and/or make using the thing slow in general. There's a few
missing features that might be desired, such as rainbow parens. On the
CCW side, there are few outright bugs, aside from the install
procedure being less simple than just "browse Marketplace, click
install, restart IDE" and this fact simultaneously not being obvious
if you approach CCW along certain trajectories. Instead, there are
what seem to be mainly missing features: separate start-repl and
load-file-in-repl commands; kill/restart repl process; one-keystroke
command to reindent all lines intersecting a multi-line selection. All
I foresee as being likely to be substantial sources of day to day
editing/testing awkwardness, however.


Please do not take this the wrong way. No "bashing" of either IDE is
intended here. Rather, I would like to see both IDEs improve, and
believe that providing constructive feedback after using both of them
is one way of assisting in that process; and that the maturation of
these tools is crucial while Clojure is still young, lest it get
perceived as having "perpetually" poor tool support or something (by
the non-emacs user contingent, anyway). At this point, it's to be
expected that the IDEs and other tools are still maturing; the
language is what, four years old? If that. But Clojure adoption may be
getting close to hitting the knee of the curve, and if the tools
aren't just a *bit* more polished by then, it may begin to
significantly hinder adoption.


Furthermore, I acknowledge the possibility that one or more of the CCW
"missing" features (e.g. restart REPL) is actually present, but if so,
it is not easily discovered within the interface by menu-browsing,
examining toolbar buttons, and similar methods. It may be documented
somewhere else and, say, accessible only via shortcut key; IMO that is
not enough. As has already been discussed once, it is a fact, if an
unfortunate one, that installing the plugin via the Marketplace does
not cause the user to be presented with documentation or links to
same; and it is a general industry standard these days for commands
that exist in a GUI application to be in *some* menu *somewhere*,
usually in a right-click menu on the appropriate target in particular,
and any shortcut key documented there, as in the common example of an
Edit menu including the item "Copy      Ctrl+C". If such is the case
for one or more of the features I noted as "missing" from CCW that
Enclojure has, consider the lack of a menu option/toolbar button for
that feature to be the missing feature instead; it is still a problem,
and not much less serious -- but a lot easier to fix!

Thank you for your consideration of these observations.

-- 
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