| > I have a feeling given your screen name I'm talking to some who is equally biased as I am to Java :) The main difference: I have a Lisp Machine at home. :-) > Hmmm an IDE is supposed to be a REPL and more. No, a Read Eval Print Loop came from Lisp in the early 60s. It originally means to read a data structure, treat it as code and evaluate it and print the result data structure. READ, EVAL, PRINT are actual functions in Lisp. This stuff executes in a LOOP and is enriched by all kinds of stuff. An IDE does not need to have a REPL. If it can interact with a running application (for example via a debugger), this might still not be a REPL. > However for the case with Java it can be done with JRebel and various other tools. Even JRebel can not do to a running JVM application what some Lisp implementations can do. Not near of that. > IDE with a powerful debugger will let you evaluate expressions based on a state that is stuck... ie setting breakpoint (as well of course as investigating current variables and such) This is pretty basic. > traditional REPLs Check out Symbolics Dynamic Windows and McCLIM on the Lisp side... Old demos from me: https://www.youtube.com/watch?v=VU_ELJjbnWM https://www.youtube.com/watch?v=9whxPd4haKc http://lispm.de/videos/lispm-3a.mov |
I still don't think its REPL that makes Lisp or clojure magic (when I say magic I mean awesome). Its all the other stuff like macros and homoiconicity (which I see your point plays some part in academic REPL).
> Even JRebel can not do to a running JVM application what some Lisp implementations can do. Not near of that.
Well thats because of the Java compiler and in some parts the language of Java. It has nothing to do with the JVM otherwise Clojure wouldn't work. But I agree JRebel is far cry from the full reloading capabilities of Lisp, Erlang and other dynamic languages.
> IDE with a powerful debugger will let you evaluate expressions based on a state that is stuck... ie setting breakpoint (as well of course as investigating current variables and such)
> This is pretty basic
I agree but its still surprising how many languages do not do this well and I didn't mention that you can execute simple expressions in that mode something other static languages like C will not allow.
Besides.... I can change a function name in Java or Scala and see immediately everywhere in my code base with (e.g. red squiggle lines) how that impacts other code... for static languages that is pretty basic :P
I'm totally envious of your lisp machine (EDIT: in all honesty...I realize that originally sounded sarcastic).