狠狠撸

狠狠撸Share a Scribd company logo
?入门颁濒辞箩耻谤别厂肠谤颈辫迟
ClojureScript勉強会
2015/05/23 @HaLake
@athos0220
ClojureScriptとは
? JavaScriptにコンパイルされるClojure
? 正確には、Clojureと多くの共通点を持つ別言語
? すでにさまざまな企業で商用に使われている
- CircleCI
- Prismatic
- Cisco
- eBay
- etc.
https://github.com/clojure/clojurescript/wiki/Companies-Using-ClojureScript
ClojureScriptの利点
? immutableなデータ構造が使える
仮想DOMとの親和性
? マクロが使える
core.asyncなどの強力な抽象化
? Clojureとのデータとコードの共有
isomorphic Clojure
単なるイロモノでなく具体的な利点をもつAltJS
【言語概論】Clojureとの共通点
? 基本的なデータ型 (数値、文字列、シンボル、キーワード、関数)
? コレクション型 (リスト、ベクタ、マップ、セット)
? ユーザ定義型 (deftype, defrecord, defprotocol)
? マルチメソッド
? 名前空間
? Host Interop (コンストラクタ、メソッド呼び出し)
【言語概論】Clojureとの相違点
? Atom以外の参照型がない
? evalがない
? マクロはClojureでしか定義できない
? Host Interop
- js-obj
- #js[], #js{}
- clj->js, js->clj
- js名前空間
- js*
コンパイルパイプライン
? Clojureで書かれたコンパイラでJSコードを生成
? 生成されたJSコードをClosure Compilerで最適化
Closure Compiler: JSからJSへの最適化コンパイラ
Stuart Sierra, Luke VanderHart (2012) “ClojureScript: Up and Running” O’Reilly Media
Closure Compilerの最適化レベル
? WHITESPACE_ONLY
不要な空白、改行、コメントの削除
? SIMPLE_OPTIMIZATIONS
WHITESPACE_ONLY + ローカル変数名書き換え等
? ADVANCED_OPTIMIZATIONS
SIMPLE_OPTIMIZATIONS + 以下を含む最適化
- よりアグレッシブなリネーム
- デッドコード除去
- インライン化
https://developers.google.com/closure/compiler/docs/compilation_levels
ClojureScriptのはじめかた
? Leiningen + lein-cljsbuild でのやりかた
1. lein-cljsbuildを :plugins に追加
2. project.cljの :cljsbuild にオプションを設定
(defproject lein-cljsbuild-example “0.1.0-SNAPSHOT”
:plugins [[lein-cljsbuild "1.0.6"]]
:cljsbuild {
:builds [{:source-paths ["src-cljs"]
:compiler {:output-to "js/main.js"
:optimizations :whitespace
:pretty-print true}}]})
:optimizationsオプション
:optimizations 対応する最適化レベル
:none
(ClojureScriptコンパイラが出力した???
JSコードのみが生成される)
:whitespace WHITESPACE_ONLY
:simple SIMPLE_OPTIMIZATIONS
:advanced ADVANCED_OPTIMIZATIONS
ClojureScriptのコンパイル
? lein cljsbuild once
指定したパス中のClojureScriptファイルをコンパイル
? lein cljsbuild auto
ファイルを監視して、変更があれば自動的コンパイルし直す
ClojureScriptのREPL起動
? lein cljsbuild repl-rhino
RhinoベースのREPLを起動 (ブラウザ機能は使えない)
? lein cljsbuild repl-listen
指定したポートでClojureScriptからの接続を待ち合わせるREPLを起動
? lein cljsbuild repl-launch
:repl-launch-commandsで指定したコマンドからブラウザREPLを起動
* 実際にはREPLを起動するときは lein trampoline 経由で呼び出す必要があります
参考文献
? Clojure: Up and Running
? ClojureScript wiki
? lein-cljsbuild wiki

More Related Content

入门颁濒辞箩耻谤别厂肠谤颈辫迟