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