kawasima (@kawasima) | Twitter twitter.com

特長

重要なのはイミュータブルであること

Lisp

関数型プログラミング

確固たるプラットフォームと共生(.netやJS上でも動く)

型にこだわる人にはなじまないかも

Concurrencyのためにデザイン(マルチコア)

matthiasn/talk-transcripts github.com

Simple

ひとつの役割

ひとつのタスク

ひとつの概念

ひとつの次元

シンプルな構成要素を定義しようっていうのがClojureの思想

Easy

すぐに実現できる

IDE

apt-get gem install

Complex or Simple

状態やオブジェクトは複雑、値はシンプル

メソッドは複雑、関数やネームスペースはシンプル

出来るだけvarは使いたくない

複雑さのもとは組み合わせ

状態=触るもの皆複雑

オブジェクト=状態、アイデンティティ、値 → これらのものは分解しよう

文法 意味と順序

Abstraction

10のデータ構造に10の関数操作があるよりも、1つのデータ構造に100の関数操作があるほうがいい

seq function

Clojure - sequences

Clojureについて使いたくなる本

非同期プログラミングのやり方が書いてある

Immutable

すべてがイミュータブル

(println "Hello World!")

Sharing Structure

イミュータブルっていうともとのデータ構造をコピーしている

コレクションに対して変更操作すると新しいコレクションがかえるが、変更のないデータは共有される

Managed refs

あまり実用的じゃない部分があるので、refの仕組みがある

Clojure - refs

参照先を切り替える(若干いんちきくさい)

Epochal time model

Identity, value, and epochal time model www.safaribooksonline.com

過去の事実はそのまま残しておいて、状態を変更する。

Identity/State/Value

Identity 普遍的に同一実体

State ある時点の集合

Value 不変なデータ

STM

複数のrefsを一貫性を持って更新したい

STMはロックをしない

Clojureが出た最初はSTMが標準実装されていた

でもSTMは性能が出にくい

ClojureのConcurrencyの対応としてcore.asyncが使われている

core.async

イミュータビリティを基礎として作られたライブラリ

別のスレッドで呼び出す

clojure/core.async github.com

スレッドベース。ひとつの処理はひとつのスレッド、チャネルの入出力でブロック

並列性と多くのスレッドを要求する

スレッドプールからスレッドを取り出す

スレッドマクロに渡されたコードを実行する

コルーチンベース。ブロック地点でpark状態にし、スレッドをプールに戻す。少ないスレッドで並行処理ができるのがメリット。

JVMだとサイズが大きくなる。

core.asyncはClojureScritpでも、Clojureと全く同じように動く。

ただ、JavaScriptはシングルスレッドモデルなので、goのみ対応。

core.asyncのいけてるところ

go配下の構文解析

ブロック呼び出しの箇所を分割

ただのライブラリなので本体とは非依存

やっぱりマクロはすごい

Clojureをはじめてみよう

依存性はleiningen(ライニンゲン)

IDEはLighttableもしくは Emacs + cider(開発者はEmacsが多い)

独習サイト

4clojure – Welcome!

Clojureはわりと実用的でRubyと同じようなアーキテクチャスタックで開発出来る

(Clojure)tomcat jetty Ring Compojure hiccup enlive

(Ruby)thin puma Rack Sinatra Haml Erb

Clojurescript

clojure/clojurescript github.com

Google Clojure CompilerをつかってJSに変換。CircleCIなどで実績あり。

Grunt / Gulp layer

leiningenに統合されている

Aggregate / Minify

ライブラリロード

React

ReactもClojurescriptから自在に使える(JSX不要 すべてLispっぽく)

業務だとどうなの?

Excel開発も出来る

Excel界隈のつらみをどうにかしたい

Clojure - Excel方眼紙をHTMLライクに作ってみる - Qiita qiita.com

kawasima/jagrid github.com

仕事の開発

Job Streamer

JobStreamerではじめるJavaBatchのクラウド分散実行 from Yoshitka Kawashima from

あなたとClojure今すぐイミュータブル