Celem mojego pytania nie jest rozpoczęcie wojny o płomienie, ale raczej określenie, w jakich okolicznościach każdy język jest „najlepszym narzędziem do pracy”.
Przeczytałem kilka książek o Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure i Manning Early Access Edition of Clojure in Action ) i myślę, że to fantastyczny język. Obecnie czytam Let Over Lambda, który zajmuje się głównie makrami Common Lisp i jest również bardzo interesującym językiem.
Ja nie Lisp ekspert (więcej początkujących), ale to rodzina języków fascynuje mnie, podobnie jak programowanie funkcyjne, w ogóle.
Zalety Clojure (i wady „innych”):
Działa na JVM.
JVM to bardzo stabilne, wydajne środowisko językowe, które całkiem dobrze spełnia marzenie Sun'a o „Napisz raz, uruchom [prawie] wszędzie”. Mogę pisać kod na moim Macbooku Pro, skompilować go do wykonywalnego pliku JAR, a następnie uruchomić go w systemie Linux i Microsoft Windows z niewielkimi dodatkowymi testami.
JVM (Hotspot i inne) obsługuje wysokiej jakości wyrzucanie elementów bezużytecznych oraz bardzo wydajną kompilację i optymalizację w trybie just-in-time. Tam, gdzie jeszcze kilka lat temu pisałem wszystko, co musiało działać szybko w C, teraz nie waham się robić tego w Javie.
Model standardowy, prosty, wielowątkowy. Czy Common Lisp ma standardowy pakiet wielowątkowy?
Zrywa monotonię wszystkich tych nawiasów za pomocą
[]
,{}
i#{}
chociaż eksperci Common Lisp prawdopodobnie powiedzą mi, że za pomocą makr czytnika można je dodać do CL.
Wady Clojure :
- Działa na JVM.
- Bez rekurencji ogona lub kontynuacji. Czy Common Lisp obsługuje kontynuacje? Uważam, że program wymaga wsparcia dla obu.
Zalety innych (w szczególności Common Lisp) (i wady Clojure):
Definiowane przez użytkownika makra czytnika.
Inne zalety?
Myśli? Inne różnice?