Shibuya.lisp テクニカルトーク

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

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

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

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

  • mitamex さん
  • ゼンリン電子地図帳Ziを開発
  • docomo 標準バンドルのゼンリン地図+ナビの開発など

  • 目的はプロジェクトの成功

    • Lispを使いたいからじゃない
    • 切り分けて制作
  • 実際問題としてLispしか選択肢がなかった

    • 小さなコア
  • チーム開発では

    • Lisp に拒絶反応を起こす人がいる
  • L4u

    • Lisp for you! <- 破壊的
    • 大規模開発用
    • スケーラブル
    • 超並列型
    • Rubyみたいな普通の言語っぽい見た目
    • Erlangみたいに超並列型
    • プロファイラー実装
    • 最適化しやすい
  • 超並列型

    • アクターモデル
    • クライアント/サーバモデルと同じ感覚で作れる?
  • みんなに使ってもらうためにエディタも作った

  • S式

    • tuple を導入
    • まずはJSONで開発して,後でS式に置き換える
    • それとは気がつかないうちにS式を使ってる感じに.
  • 携帯電話のリモートデバッグ

    • Doja はソケット使えないので,ポーリングして GET でコマンドを受け取る
  • サーバサイド L4u

    • 携帯でもサーバでも同じ処理が動く
  • どこでもREPL

    • ホスト言語との連携を前提
    • L4u で不得意な部分はホスト言語に置き換えた
  • delegate/cc

    • 呼び出した時点でL4uの処理は止まる.戻りが発生したら,継続.
  • プリプロセッサ・マクロ

    • 同じシリーズの携帯でもコードを分ける必要があるので,プリプロセッサを使う.
    • どんな構文でも最後にはS式に変換される
  • 超並列指向

    • Erlang と同じものを目指している
  • L4uは人に優しい構文

    • Lisp は人間に優しくなく,コンピュータにやさしい言語.
    • return/breakとかloop/while が使える
    • かっこを減らす工夫をしている.
    • なぜCLOSがあるのにJavaっぽいクラスを使うのか
    • ホスト言語で書き直す手間を低減させるために.
  • Lisp と言わないのがポイント

##HyperSpec ひとめぐり

  • NANRI さん

###HyperSpec

  • ANSI Common Lisp の使用

  • CLtL2 とは

    • Common List the Language 2nd Edition
  • 感心したところ,他の言語にないところを紹介

###数の体系

  • 数の種類
    • 整数,有理数,実数,複素数
    • 正確数と非正確数の区別
    • 13 != 0.3333…. とかの区別
    • 有理数の正準化
    • 21 -> 2 になど
    • 複素数の正準化
    • (1 2) -> 1 になど
    • (1.0 0.0) だと,非正確数なので正準化は行われない

###Common Lisp には

  • コンパイラが含まれます
    • compile によりコンパイルできる
    • 他の言語の言語仕様では,Java/Haskell以外では見つからなかった.
    • 逆アセンブル関数 disassenmble がある
  • デバッガが含まれます
    • Common Lisp ではエラーが起こるとデバッガに移行する.
  • エディタを起動する関数がある
    • ed

##scheme on PINBALL(仮)

  • PINBALL で稼いでる人
  • 200fpsで動くらしい.140fpsを下回ると,動きがぎくしゃくするらしい.
  • PINBALL のルールが複雑で,それを記述するために Ypsilon を作った.
  • 5ms 以内に処理を行わなければならないので,GC が起こるようだと厳しい.
    • しかしユーザに GC がないような言語で書いてもらうと,メモリリークを起こす.
    • そこで Scheme

###Ypsilon

  • R6RS 準拠の ピンボールゲームのための Scheme インタープリタ
  • マルチコアに最適化した Concurrent GC
    • ゲームに特化すると,マルチコアが前提でもOK
  • 極めて短い GC 停止時間と並列実行によるパフォーマンス
  • システム全体の信頼性・レスポンスを重視
  • VM の並列化が現在進行中
  • ネイティブ・コード生成も予定中

###YpsilonVM の開発

  • 基本的な最適化

    • Direct Threading
    • Dispatch のコストを少なく.
    • Super Instruction
    • プログラムに必要な VM 命令数を少なくすることにより,Dispatch の回数を少なくする.
    • Data-Cache の利用効率が上がる
    • トレードオフ
      • かなり頻繁に使用されるコードでなければ,実行コードの局所性が失われることになり逆効果をもたらす.
      • あまり使われない処理を埋め込んでも,そこが使われる頻度が少なかったら,nop と同じ意味になり,局所性がなくなる.
    • Operand Fusion
    • Super Instruction と同じトレードオフがある.組み合わせ.
    • 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言語の糖衣構文ですべて解決
  • ケーゾク小説
    • Scheme と P言語で小説
  • 動的Cコンパイラモジュール dyncomp
    • Tiny C Compiler を組み込んで C の記法を S 式で(cise)
    • 評価,即コンパイル
  • CL/Scheme
  • Gauche でロボット制御
    • NetTanser++
    • 5万か・・・・
  • Reading Gauche
    • Gauche のコードいいよ
 
comments powered by Disqus