ClojureScript
Материал из Xgu.ru
ClojureScript — реализация Clojure, компилирующаяся в JavaScript.
Отличается от Clojure несколькими особенностями, связанными прежде всего с особенностями платформы (JavaScript против JVM).
Особенности языка (в сравнении не с Clojure, а с другими):
- LISP
- STM
- Runtime polymorphism
- The REPL
- Functional programming
- Immutable data structures
- Uniform API over immutable data structures
- Macros
- Lazy sequences
- Destructuring
- State VS Identity
Содержание |
[править] Как начать
Лучше всего начинать не с ClojureScript, а с Clojure. Если знания по Clojure уже есть, то можно переходить к ClojureScript.
Довольно хорошей стартовой точкой может быть учебник:
Он требует небольшого знания Clojure, при условии, что с этим проблем нет, погружение в ClojureScript осуществится быстро.
[править] Самые первые шаги
Создать проект Clojure/ClojureScript, как обычно:
$ lein new my-first-cljs-project
После этого внутри проекта немного перерасположить каталоги и создать новые:
$ cd my-first-cljs-project
$ mkdir -p src/{clj,cljs/my_first_cljs_project}
$ mv src/my_first_cljs_project src/clj/
После этого нужно подправить описание проекта, факт project.clj, и указать в нём правильные каталоги:
(defproject my-first-cljs-project "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
;; Путь к программа на Clojure (clj) и ClojureScript (cljs)
:source-paths ["src/clj" "src/cljs"]
:dependencies [[org.clojure/clojure "1.5.1"]]
;; Плагин lein-cljsbuild для сборки CLJS-проектов
:plugins [[lein-cljsbuild "1.0.0"]]
;; Конфигурация cljsbuild
:cljsbuild {:builds
[{;; Путь к файлам cljs
:source-paths ["src/cljs"]
;; Конфигурационные параметры Google Closure (CLS)
:compiler {;; Имя JS-файла, генерируемого CLS
:output-to "resources/public/js/modern.js"
;; Минимальный набор директив для оптимизации JS
:optimizations :whitespace
;; Нужно ли делать генерируемый JS-код красивым (prettyfication)
:pretty-print true}}]})
После этого можно создавать первую ClojureScript-программу:
$ emacs src/cljs/my_first_cljs_project/main.cljs
Откомпилировать её можно так:
$ lein cljsbuild once
Сгенерированный код будет записан в файл resource/public/js/modern.js.
[править] core.async
Одним из важнейших для ClojureScript модулей является core.async. Он важен, безусловно, и для Clojure, но для ClojureScript его значение ещё выше, поскольку существующие виртуальные машины JavaScript однопоточны.
[править] Использование React с ClojureScript
[править] Om
Интерфейс ClojureScript к React.js. Важнейшая библиотека для тех, кто собирается писать UI на ClojureScript.
React сам по себе очень хорош, но в сочетании с персистентными структурами данных Clojure, его сильные стороны становятся ещё на порядок сильнее.
Другие библиотеки, которые можно использовать в сочетании с Om:
- kioo
— Enfocus/Enlive для React (для Om или для Reagent)
[править] Reagent
Другая библиотека, адаптирующая React к использованию с ClojureScript.
Очень минималистична и очень приятна. Используент синтаксис Hiccup для селекторов.
[править] Quiescent
[править] Интеграция ClojureScript с экосистемой Node.js
- lein-npm
— плагин npm для Leiningen
- lein-bower
— плагин bower для Leiningen
[править] Дополнительная информация
- http://murilopereira.com/the-case-for-reactjs-and-clojurescript/ — слайды на тему Clojure/ClojureScript/React/Om
- http://jlongster.com/Removing-User-Interface-Complexity,-or-Why-React-is-Awesome — очень приятная статья на тему React
- ClojureScript Tutorial (англ.) — содержательное введение в ClojureScript