Shibuya.lisp テクニカルトーク #1に行ってきた.

Lisp関係でこれだけ熱い人たちが集まってくるのは,結構すごいね.あとLL言語に比べて,何かしらのこだわりが強い人が多かった感がある.楽しいだけじゃない,熱意というか.まだ初心者な私にも何かしら凄さを感じさせてくれました.

話の内容的にあんまり追えてないので,詳しいまとめなどは,他の参加者を参照してくださいorz.

開会の言葉@ひげぽんさん

50万行オーダーのプロジェクトを俺Lispで書く

  • 目的はプロジェクトの成功
    • Lispを使いたいからじゃない
    • 切り分けて制作
  • 実際問題としてLispしか選択肢がなかった
    • 小さなコア
  • チーム開発では
    • Lisp に拒絶反応を起こす人がいる
  • L4u
    • Lisp for you! <- 破壊的
    • 大規模開発用
    • スケーラブル
    • 超並列型
    • Rubyみたいな普通の言語っぽい見た目
    • Erlangみたいに超並列型
    • プロファイラー実装
      • 最適化しやすい
  • 超並列型
  • みんなに使ってもらうためにエディタも作った
  • S式
    • tuple を導入
    • まずはJSONで開発して,後でS式に置き換える
    • それとは気がつかないうちにS式を使ってる感じに.
  • 携帯電話のリモートデバッグ
    • Doja はソケット使えないので,ポーリングして GET でコマンドを受け取る
  • サーバサイド L4u
    • 携帯でもサーバでも同じ処理が動く
  • どこでもREPL
    • ホスト言語との連携を前提
      • L4u で不得意な部分はホスト言語に置き換えた
  • delegate/cc
    • 呼び出した時点でL4uの処理は止まる.戻りが発生したら,継続.
  • 超並列指向
    • Erlang と同じものを目指している
  • L4uは人に優しい構文
    • Lisp は人間に優しくなく,コンピュータにやさしい言語.
    • return/breakとかloop/while が使える
    • かっこを減らす工夫をしている.
    • なぜCLOSがあるのにJavaっぽいクラスを使うのか
      • ホスト言語で書き直す手間を低減させるために.
  • Lisp と言わないのがポイント

HyperSpec ひとめぐり

  • NANRI さん
HyperSpec
  • CLtL2 とは
    • Common List the Language 2nd Edition
  • 感心したところ,他の言語にないところを紹介
数の体系
  • 数の種類
    • 整数,有理数,実数,複素数
    • 正確数と非正確数の区別
      • 1/3 != 0.3333.... とかの区別
    • 有理数の正準化
      • 2/1 -> 2 になど
    • 複素数の正準化
      • (1 2) -> 1 になど
      • (1.0 0.0) だと,非正確数なので正準化は行われない
Common Lisp には
  • コンパイラが含まれます
  • デバッガが含まれます
    • Common Lisp ではエラーが起こるとデバッガに移行する.
  • エディタを起動する関数がある
    • ed

scheme on PINBALL(仮)

  • PINBALL で稼いでる人
  • 200fpsで動くらしい.140fpsを下回ると,動きがぎくしゃくするらしい.
  • PINBALL のルールが複雑で,それを記述するために Ypsilon を作った.
  • 5ms 以内に処理を行わなければならないので,GC が起こるようだと厳しい.
Ypsilon
  • R6RS 準拠の ピンボールゲームのための Scheme インタープリタ
  • マルチコアに最適化した Concurrent GC
    • ゲームに特化すると,マルチコアが前提でもOK
  • 極めて短い GC 停止時間と並列実行によるパフォーマンス
  • システム全体の信頼性・レスポンスを重視
  • VM の並列化が現在進行中
  • ネイティブ・コード生成も予定中
YpsilonVM の開発
  • 基本的な最適化
    • Direct Threading
      • Dispatch のコストを少なく.
    • Super Instruction
      • プログラムに必要な VM 命令数を少なくすることにより,Dispatch の回数を少なくする.
      • Data-Cache の利用効率が上がる
      • トレードオフ
        • かなり頻繁に使用されるコードでなければ,実行コードの局所性が失われることになり逆効果をもたらす.
        • あまり使われない処理を埋め込んでも,そこが使われる頻度が少なかったら,nop と同じ意味になり,局所性がなくなる.
    • Operand Fusion
    • Cache Access
      • 近年の CPU ではメモリアクセスがボトルネックになっている.
      • D-Cache と CacheLine のコンフリクトが問題
        • 広範囲に発生する場合は優先的に解消を図って,限定的な場合は放置する.
      • VM では I-Cache が一般プログラム以上に重要
  • Scheme 専用の最適化
    • コンセプト
      • ポータブル
      • 高いメンテナンス性
      • デバッグ機能
        • Backtrace を有効にする.
        • Scheme では末尾呼び出しでが継続で保存されない.
        • エラーにならないと使わない機能なので,どうするか.
          • Stack GC
      • コードに弱点のない
      • コンカレントGC が有効に働くこと
    • Stack GC と Stack Closure の組み合わせで大きな効果を出す
  • 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 を行っている領域からにはアクセスしないように変更.
    • Heap の使用量を減らす方向で VM の最適化を行う.
      • まだまだイタチごっこは終わらない.

Lightning Talk

  • ナベアツ問題
    • Gauche で日本語的にやってた.
  • quine
    • 自分自身を出力する
      • format = printf
      • let1 = 昔の LET

http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/quine.html

  • 設計なしでどうするか
    • 某L言語の糖衣構文ですべて解決
  • ケーゾク小説
  • 動的Cコンパイラモジュール dyncomp
    • Tiny C Compiler を組み込んで C の記法を S 式で(cise)
    • 評価,即コンパイル
  • CL/Scheme
  • Gauche でロボット制御
    • NetTanser++
      • 5万か・・・・
  • Reading Gauche
    • Gauche のコードいいよ