I think RDD is fine
The thing is I don’t think RDD is the same as Dynamic Development. You could conceive an editor integrated REPL in Java for example, but Dynamic Development implies certain language features, the REPL and integrating it into the editor is just one thing that Dynamic Development allows.
Fundamentally, it’s about what the Clojure page on it says:
Clojure is dynamic. That means that a Clojure program is not just something you compile and run, but something with which you can interact. Clojure is not a language abstraction, but an environment, where almost all of the language constructs are reified, and thus can be examined and changed.
And like the page says, this allows you to:
grow your program, with data loaded, adding features, fixing bugs, testing, in an unbroken stream.
And like Wikipedia says, some of the features you need for it are:
- Runtime eval
- Type runtime alterations
- In-place code replacement (swapping one function with another)
- Full evaluation and modification of a program’s code as data
- Macros that provide access to the inner workings of the compiler, and full access to the interpreter, virtual machine, or runtime, allowing the definition of language-like constructs which can optimize code or modify the syntax or grammar of the language
- Additions/Update/Removal of definitions
These features are why Clojure doesn’t “feel like a hot loading debugger”. I know what you mean here, but even Visual Studio’s debugger for C#, which is probably the most advanced debugger for languages without Dynamic Development features still has limitations when it comes to what I listed above. I know, because I came from using that debugger daily prior to Clojure. You got to be careful what you can replace and re-evaluate when in the C# hot-loading debugger, because the language just doesn’t have the dynamism needed for full on Dynamic Development.
Ya, the word “Dynamic” is a bit overloaded. Dynamic programming and Dynamic typing could both easily be confused with Dynamic Development. Though I still think it’s the right adjective for “development”:
characterized by constant change, activity, or progress
Like this is a perfect definition for what it means to develop in Clojure.
Ya, Clojure has to live with its host in harmony, and I’m quite surprised how much it was able to achieve on the “dynamic” front while running on Java. CL still has it beat in that aspect. But I also don’t think that’s the be all end all, like CL is able to leverage dynamic development to this feature because of its choice of how to handle errors, you could do it in Clojure as well, the language is dynamic enough to do it, but doing so would be fighting the interop with Java, and I think the trade off here is worth it; of being able to leverage Java and the performance gains of not adding an additional exception layer.
For example, Emacs lisp similarly didn’t bother adding a conditional restart with debugger default handling, but the language is 100% dynamic, you can redefine everything and reify everything at run-time.
I haven’t used condition/restarts in large enough systems to know if I wish Clojure went with it by default or not. But Cider’s debugger, isn’t actually a debugger, it actually just dynamically reify your code to actually stop where the exception is first encountered and allows you to modify everything that follows, which gets pretty close, except you don’t have the ability to “restart”, unless you actually add that in yourself like by using a library for it like GitHub - clojureman/special: Special (Conditions). A condition system for Clojure