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 Github.png — Enfocus/Enlive для React (для Om или для Reagent)

[править] Reagent

Другая библиотека, адаптирующая React к использованию с ClojureScript.

Очень минималистична и очень приятна. Используент синтаксис Hiccup для селекторов.

[править] Quiescent

[править] Интеграция ClojureScript с экосистемой Node.js

  • lein-npm Github.png — плагин npm для Leiningen
  • lein-bower Github.png — плагин bower для Leiningen

[править] Дополнительная информация