<div dir="ltr"><div>I was flirting a bit with the ??? and looking at Clojure. While I am not that impressed (LFE is better :-)) there was some interesting stuff in the Rationale:<br><font size="2"><br>Object Orientation is overrated</font>
 
<br>+ Born of simulation, now used for everything, even when inappropriate<br></div>    - Encouraged by Java/C# in all situations, due to their lack of (idiomatic) support for anything else<br><br><div>+ Mutable stateful objects are the new spaghetti code<br>
    - Hard to understand, test, reason about<br><div>    - Concurrency disaster<br><br>+ Inheritance is <em>not</em> the only way to do polymorphism<br><br><div>+ "It
is better to have 100 functions operate on one data structure than to
have 10 functions operate on 10 data structures." - Alan J. Perlis<br><br>+ Clojure
models its data structures as immutable objects represented by
interfaces, and otherwise does not offer its own class system.<br><br>+ Many functions defined on few primary data structures (seq, map, vector, set).<br><br>+ Write Java in Java, consume and extend Java from Clojure.<br>
<br>Couldn't have said it better myself, except for the Java bit and the end. Of course deciding to base it on the JVM has introduced some strange things for a functional language, for example the lack of (guaranteed) last-call optimisation means they have a recur form for recursion. This only works for recursion and not general jumping around.<br>
<br>Robert<br><br></div></div></div></div>