- Fundamentals: it is a dynamic language and a new LISP, Functional, Supporting Concurrency, Compiles to JVM bytecode, not OO
- Why not OO? Because OO encourages mutable state and Mutable stateful objects are the new "spaghetti code". His words, not mine! :)
- Supports a REPL (read-eval-print-loop)
- Load/change code in running program
- On Data Types it has, for example, Arbitrary Precision Integers, Ratios (no precision loss?), doubles, BigDecimals...
- On Composite Data Structures it has, for example, Lists, Vectors, Maps, Sets and everything nests
- Data structures are the code, not text-based syntax and everything is an expression
- All data structures are immutable; performance problems are avoided by two rules: new versions are not full copies and make use of a structural sharing of data (this last one is kind of hard to put in a few words here)
- Abstraction-based library built on concrete classes for structures with a Java Interface
- Clojure supports prallel computation, mostly because it focuses on concurrency, which is made easy by using immutable data; no locks needed
- The only thing that mutate are references themselves, in a controlled way
- Clojure uses MVCC - Multiversion Concurrency Control through the command dosync which is the transactional control done by databases
- Clojure integration with Java is natural beacause the data types are the same as Java; it has debugging support and all the Java bytecode infrastructure works with Closure
Why is it that everytime I see a brand new language or programming paradigm it reminds me of everything I learned 15 years ago at College? My words, not his! :)
No comments:
Post a Comment