Shibuya.lisp テクニカルトーク #1に行ってきた.
Lisp関係でこれだけ熱い人たちが集まってくるのは,結構すごいね.あとLL言語に比べて,何かしらのこだわりが強い人が多かった感がある.楽しいだけじゃない,熱意というか.まだ初心者な私にも何かしら凄さを感じさせてくれました.
話の内容的にあんまり追えてないので,詳しいまとめなどは,他の参加者を参照してくださいorz.
開会の言葉@ひげぽんさん
50万行オーダーのプロジェクトを俺Lispで書く
- 目的はプロジェクトの成功
- Lispを使いたいからじゃない
- 切り分けて制作
- 実際問題としてLispしか選択肢がなかった
- 小さなコア
- チーム開発では
- Lisp に拒絶反応を起こす人がいる
- L4u
- 超並列型
- みんなに使ってもらうためにエディタも作った
- S式
- tuple を導入
- まずはJSONで開発して,後でS式に置き換える
- それとは気がつかないうちにS式を使ってる感じに.
- 携帯電話のリモートデバッグ
- Doja はソケット使えないので,ポーリングして GET でコマンドを受け取る
- サーバサイド L4u
- 携帯でもサーバでも同じ処理が動く
- どこでもREPL
- ホスト言語との連携を前提
- L4u で不得意な部分はホスト言語に置き換えた
- ホスト言語との連携を前提
- 超並列指向
- Erlang と同じものを目指している
- L4uは人に優しい構文
- Lisp と言わないのがポイント
scheme on PINBALL(仮)
- PINBALL で稼いでる人
- 200fpsで動くらしい.140fpsを下回ると,動きがぎくしゃくするらしい.
- PINBALL のルールが複雑で,それを記述するために Ypsilon を作った.
- 5ms 以内に処理を行わなければならないので,GC が起こるようだと厳しい.
Ypsilon
YpsilonVM の開発
- 基本的な最適化
- Scheme 専用の最適化
- Concurrent GC
- Mark Phase
- Mutator を止める
- ルート集合をとる.
- Mutator を再開する.
- Mutator の実行と並列に Collector が Mark を行う.
- Mutator を止める.
- Mutator が変更のあったルート集合を集める
- Mutator を再開する.
- Sweep Phase
- ゴミは確定している
- Mutator はゴミにアクセスしない.
- Collector はヒープをみてゴミを回収する.
- 簡単ではない理由
- Mutator と Collector が激しい競合を起こす.
- Mark Phase 中に Mutator がアロケーションを行っている.
- Incremental Update 方式に変更
- Mutator が早くなったが,アロケーションも多くなり,素食べーションが発生.
- スタベーション
- メモリ消費に回収が追いつかなくなること.
- Sweep Phase での競合が目立つ
- なぜ競合が起きるのか?
- Concurrent Sweep だから.
- Collector が現在 Sweep を行っている領域からにはアクセスしないように変更.
- そしてイタチごっこになった.
- Collector が現在 Sweep を行っている領域からにはアクセスしないように変更.
- Concurrent Sweep だから.
- Heap の使用量を減らす方向で VM の最適化を行う.
- まだまだイタチごっこは終わらない.
- Mark Phase
Lightning Talk
- ナベアツ問題
- Gauche で日本語的にやってた.
- quine
- 自分自身を出力する
- format = printf
- let1 = 昔の LET
- 自分自身を出力する
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/quine.html