Od kiedy napisałem poprzedniego posta moją uwagę przyciągnęły:
Clojure – Implementacja Lispa w Javie. Wygodna komunikacja z Javą. W projekcie języka nacisk na wielowątkowość. Wszystkie wady i zalety wynikające z tego, że to Lisp. W odróżnieniu od Common-Lispa, oderwanie od niektórych kompatybilności wynikających z przyzwyczajenia do poprzednich Lispów. Standaryzacja tego, co ustandaryzowane nie było. Dodatkowa składnia („[]„, „{}”, „:”), która jest zamieniana na standardowe sekwencyjne odpowiedniki. Brak systemu obiektowego. Ogólnie porządny lisp. Jeśli ktoś kocha lispa – niech się zapozna. Sądzę, że Lisp to jeden z najciekawszych projektów języka jaki powstał, ale brakuje mi w nim obiektowości.
Clean – Bardzo szybki język funkcyjny (zbliżony szybkością do C). Najsilniejsza strona – kompilator. Clean jest bardzo podobny do Haskella. Istnieje translator z Haskella do Cleana, w celu skorzytania z kompilatora Cleana w kodzie Haskella. Mało popularny w sieci. Prawie żadnych materiałów do nauki.
Haskell – Jeden z najbardziej znanych całkowicie funkcyjnych języków programistycznych. Podobno od Haskella można się dużo nauczyć i warto go poznać. Piękna, czytelna składnia. Charakterystyczne cechy to „Lazy-evaluation” i inferencja typów. To pierwsze sprawia, że obliczenia są wykonywane tylko wtedy gdy to konieczne. Teoretycznie zastępuje to lispowe makra. Wykonanie a(b(2)) nie przekazuje do funkcji a wyniku b(2), tylko wynik ten jest wyliczany dopiero wewnątrz ciała funkcji a (lub w kolejnych zagłębieniach). Teoretycznie umożliwia to osiągnięcie podobnych efektów jak przy lispowych makrach. Inferencja typów sprawia, że nie musimy deklarować typów tam, gdzie kompilator jest je w stanie sam zobaczyć. W język bazowo wbudowane są także „partial functions”, co oznacza, że gdy podamy za mało argumentów do funkcji, to zwróci ona kolejną funkcję, która oczekuje pozostałych. Ciekawy język, ale nie wydał mi się aktualnie do niczego potrzebny
Scala – „Nowa Java”. Język funkcyjny i obiektowy jednocześnie, napisany na JVM. Duże zainteresowanie w internecie. Syntax podobny do Javy, ale lżejszy dzięki inferencji typów i cech funkcyjnych. Ciekawe podejście do projektowania składni, która kieruje się wieloma regułami, ale pozostaje w miarę uniwersalna. Operatory to metody. Funkcje to obiekty. Wiele składniowych trików (takich jak hash w ostatnim argumencie funkcji w ruby), które prowadzą m.in. do możliwości tworzenia własnych instrukcji warunkowych. „Tail recursive optimization” – coś, czego nie ma w Clojure. Nie podobają mi się 2 tryby pracy ze Scalą: tryb aplikacji i skryptu, czego efektem jest brak możliwości tworzenia nowych klas z poziomu REPL-a. Proces pisania i testowania nie jest przez to tak dynamiczny jak w Clojure. Przez to nie przekonuje mnie mimo swojego dużego momentum.
Rhino – Opensource’owy JavaScript na JVM zrobiony przez Mozillę. JavaScript ostatnio wychodzi z przeglądarek. Dzięki Rhino możemy korzystać z js lokalnie, na serwerze, lub zamieszczać w projektach javowych. Mozilla tworzy specyfikację ServerJS, która dodaje do js obsługę plików i inne zakazane w przeglądarce akcje. Istnieją projekty, które dodają te funkcjonalności do Rhino, co tworzy z niego język ogólnego przeznaczenia. Javascript ogólnie mi się podoba, a w nadchodzącym wydaniu drugim pojawi się kilka ciekawych nowości, w tym normalna obiektowość. Jeśli w projekcie duży udział ma javascript po stronie przeglądarki to użycie go także po stronie serwera jest całkiem zasadne. Rhino można sobie odpalić na Google App Engine i jest aktualnie moim tematem nr 1.