Clojure
Личный взгляд
Срыв покровов
— Это не тот Common Lisp
— Разница культур
— Это очень мощный и выразительный язык...
— ...подкрепленный Лиспом
— Скобочки не только круглые )))
Основное
— Работа с коллекциями
— Неизменяемость
— Транзакционная память
— Типы там, где они нужны
Все, что есть в ООП
— Расширение протоколов
— Паттерн-матчинг
— Ссылочные объекты
ClojureScript
— Компилируется в JS
— Модульность, неймспейсы, макросы
— Повторное использование кода Clojure
— Om — биндинг к React
Свобода действий
— Макросы
— свой DSL, например, ORM
— работа с деревьями (XML, HTML)
— многопоточность
ORM DSL example
(-> (select :*)
(from :users)
(where '(= id 5)
'(= status "active"))
sql/format)
Еще о макросах
(/ (* 2 (+ 2 3)) 100)
(expr (2 + 3) * 2 / 100)
(for [item some-seq]
(* item 2))
(-> initial func1 func2 func3)
IDE
— Емакс (trollface)
— Light Table
— Idea plugin
— Cursive IDE
Гомогенность
— Ring — призводительный веб-фреймворк
— приложение это функция (app request)
— добавили роутинг — получили функцию
— добавили мидлварь — получили функцию
— и тд.
Разве можно ничего не менять?
(defn wrap-user [view]
(fn [request]
(view (assoc
request
:user (when-let [user-id
(-> request :session :user-id)]
(get-user-by-id user-id))))))
(def app (-> app-routes auth/wrap-user))
Не надо про скобочки!
— Они теперь разные
(function($){$('.foo').click(function()
{alert(123);})})(jQuery); — 18 шт
Лисп упрощает сам себя
(get (get (get response :data) :user) :name)
(getin response [:data :user :name])
(-> response :data :user :name)
Pros
— библиотеки
— простота
— uberjar: деплой, дистрибуция, кроссплатформенность
— свобода
— производительность
— Google for "awesome-clojure"
Cons
— непривычно!
— для серьезной разработки нужен Емакс
— (пока еще) мало вакансий
— ограничения Java-платформы
Спасибо!
Вопросы?

Личный взгляд на Clojure