特長
- 重要なのはイミュータブルであること
- Lisp
- 関数型プログラミング
- 確固たるプラットフォームと共生(.netやJS上でも動く)
- 型にこだわる人にはなじまないかも
- Concurrencyのためにデザイン(マルチコア)
これが「Lisperの悪循環」のなれの果てか… pic.twitter.com/HFDuJR0hd6 RT @imlxgr: switch to emacs, they said... pic.twitter.com/OrIEBvpky8
— kawasima (@kawasima) 2014, 1月 30
Simple
- ひとつの役割
- ひとつのタスク
- ひとつの概念
- ひとつの次元
シンプルな構成要素を定義しようっていうのがClojureの思想
Easy
- すぐに実現できる
- IDE
- apt-get gem install
Complex or Simple
- 状態やオブジェクトは複雑、値はシンプル
- メソッドは複雑、関数やネームスペースはシンプル
- 出来るだけvarは使いたくない
複雑さのもとは組み合わせ
- 状態=触るもの皆複雑
- オブジェクト=状態、アイデンティティ、値 → これらのものは分解しよう
- 文法 意味と順序
Abstraction
![計算機プログラムの構造と解釈[第2版] 計算機プログラムの構造と解釈[第2版]](http://ecx.images-amazon.com/images/I/511qf4jdYjL._SL160_.jpg)
- 作者: ハロルドエイブルソン,ジュリーサスマン,ジェラルド・ジェイサスマン,Harold Abelson,Julie Sussman,Gerald Jay Sussman,和田英一
- 出版社/メーカー: 翔泳社
- 発売日: 2014/05/17
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 10のデータ構造に10の関数操作があるよりも、1つのデータ構造に100の関数操作があるほうがいい
- seq function
Clojureについて使いたくなる本

Seven Concurrency Models in Seven Weeks: When Threads Unravel (The Pragmatic Programmers)
- 作者: Paul Butcher
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2014/07/10
- メディア: ペーパーバック
- この商品を含むブログを見る
- 非同期プログラミングのやり方が書いてある
Immutable
- すべてがイミュータブル
(println "Hello World!")
Sharing Structure
- イミュータブルっていうともとのデータ構造をコピーしている
- コレクションに対して変更操作すると新しいコレクションがかえるが、変更のないデータは共有される
Managed refs
あまり実用的じゃない部分があるので、refの仕組みがある
- 参照先を切り替える(若干いんちきくさい)
Epochal time model
過去の事実はそのまま残しておいて、状態を変更する。
Identity/State/Value
- Identity 普遍的に同一実体
- State ある時点の集合
- Value 不変なデータ
STM
- 複数のrefsを一貫性を持って更新したい
- STMはロックをしない
- Clojureが出た最初はSTMが標準実装されていた
- でもSTMは性能が出にくい
- ClojureのConcurrencyの対応としてcore.asyncが使われている
core.async
- イミュータビリティを基礎として作られたライブラリ
- 別のスレッドで呼び出す
- スレッドベース。ひとつの処理はひとつのスレッド、チャネルの入出力でブロック
- 並列性と多くのスレッドを要求する
- スレッドプールからスレッドを取り出す
スレッドマクロに渡されたコードを実行する
コルーチンベース。ブロック地点でpark状態にし、スレッドをプールに戻す。少ないスレッドで並行処理ができるのがメリット。
- JVMだとサイズが大きくなる。
- core.asyncはClojureScritpでも、Clojureと全く同じように動く。
- ただ、JavaScriptはシングルスレッドモデルなので、goのみ対応。
core.asyncのいけてるところ
- go配下の構文解析
- ブロック呼び出しの箇所を分割
- ただのライブラリなので本体とは非依存
- やっぱりマクロはすごい
Clojureをはじめてみよう
- 依存性はleiningen(ライニンゲン)
- IDEはLighttableもしくは Emacs + cider(開発者はEmacsが多い)
独習サイト
Clojureはわりと実用的でRubyと同じようなアーキテクチャスタックで開発出来る
- (Clojure)tomcat jetty Ring Compojure hiccup enlive
- (Ruby)thin puma Rack Sinatra Haml Erb
Clojurescript
Google Clojure CompilerをつかってJSに変換。CircleCIなどで実績あり。
Grunt / Gulp layer
- leiningenに統合されている
- Aggregate / Minify
- ライブラリロード
React
- ReactもClojurescriptから自在に使える(JSX不要 すべてLispっぽく)
業務だとどうなの?
Excel開発も出来る
Excel界隈のつらみをどうにかしたい
仕事の開発
Job Streamer
www.slideshare.net
あなたとClojure今すぐイミュータブル
- Lispのコンセプトを学びたくてClojure
- 習得する際はClojureで何がしかのアプリを書いてみる