Transcript
Autor: 29.05.14Autor: 29.05.14
詳細 Sagittarius
Takashi KatoTwitter: @tk_ripleFor Shibuya.lisp
Autor: 29.05.14Autor: 29.05.14
構成
ReaderReader
CompilerCompiler
VMVM
Datum
VM instructions
Autor: 29.05.14Autor: 29.05.14
Reader
Macro DispatcherMacro Dispatcher
#\(#\( #\##\# OthersOthers
#\(#\( #\u#\u OthersOthers
ReaderReader CompilerCompiler(cons #(#f) #u(3 4))
Autor: 29.05.14Autor: 29.05.14
Reader
● 読込はリードマクロベース● マクロは単一マクロと複合マクロの 2種類● シンボルと数値のみ特殊扱い● ユーザはリードマクロの拡張可能
– 作用はポート単位● Schemeからのリードテーブルのコピーは不可
– 要望があればつけるかも
Autor: 29.05.14Autor: 29.05.14
Compiler
Expand&Convert
Optimise
EmitEmit
VMVM
Compiler
Autor: 29.05.14Autor: 29.05.14
Compiler
● マクロ展開と中間表現への変換は同時に行う● 最適化はそれなり
– インライン展開– 定数畳み込み– 未使用変数除去– 副作用のない式の除去 (ゆるい判別 )
– ラムダシフティング● VMインストラクションの融合
Autor: 29.05.14Autor: 29.05.14
VM
● いくつかのレジスタを持つスタックマシン– AC, CL, PC, FP, SP等– 32個の多値レジスタ– その他
● インストラクションを逐次実行するだけ● 可能なら Direct Threadedを使う (例 :GCC)
● 速度的にはそこそこ
Autor: 29.05.14Autor: 29.05.14
Misc features
● Builtin CLOS● FASL● Replacible reader● Compiler macro● Regular expression engine
Autor: 29.05.14Autor: 29.05.14
Builtin CLOS
● Tiny CLOSベース– CL, Gaucheからもいろいろ拝借
● 総称関数は CLに近い– :primary, :before, :after, :around等サポート– eql specializerも組み込みでサポート
● 性能は今一– 実行時に適用可能メソッドの計算をするため– factが 200倍遅い
Autor: 29.05.14Autor: 29.05.14
FASL
● マクロ展開はコストが高い– 結果をキャッシュ
● ライブラリ単位で生成● 通常のファイル読み込みよりはるかに高速● スクリプト自体には適用されない
– 起動時間短縮するならライブラリ必須
Autor: 29.05.14Autor: 29.05.14
Replacible reader
● ユーザが Readerを定義できる● SRFI-49及び SRFI-110の実装に使用● 最終的に S式に落とせばよいという発想● 正直お遊び機能
– 面白 SRFI等の実装くらいにしか使ってない
Autor: 29.05.14Autor: 29.05.14
Compiler macro
● (core inline)で定義 (未ドキュメント )
● 手続きに対して定義されるマクロ– CLのとほぼ同義
● 現状では単なる inliner– コンパイル時情報の見せ方等が不満– もうすこし賢いやり方がいる
Autor: 29.05.14Autor: 29.05.14
Regular expression engine
● 自前のハイブリッド正規表現エンジン– RE2を参考にした O(n)エンジン– Gaucheを参考にした最大 O(n^2)エンジン
● 一部の拡張正規表現を使わない限り O(n)
● あまり最適化されてない– 速度的に (今のところ )不満はない– 鬼車と比較されると・・・
Autor: 29.05.14Autor: 29.05.14
Philosophy
PerformancePerformanceUsabilityUsability
FunFun
※人物像はイメージです※カメラは持ってません
PortabilityPortability
Autor: 29.05.14Autor: 29.05.14
Usability
● 使い捨てスクリプトを書き易く– ライブラリの充実– リードマクロ
● 外の世界と繋がる– FFI,ソケット等の物理層– DBI, SOAP, MQ等のアプリ層
● 標準規格をサポート– RnRS, RFC等
Autor: 29.05.14Autor: 29.05.14
遅い=悪● 選ばれにくい● 業務で使う際にストレスがたまる
遅い=悪● 選ばれにくい● 業務で使う際にストレスがたまる
Performance
VS.VS.
チューニングはコストがかかる● 開発リソースは一人● どこかで妥協する必要がある
チューニングはコストがかかる● 開発リソースは一人● どこかで妥協する必要がある
Autor: 29.05.14Autor: 29.05.14
Fun
● 基本的には遊び機能– Replacible reader等– あれば使うかもしれない的な何か
● 後発の処理系なので多少奇をてらってはいる– こういうのは実装するのが楽しい– 使うときも割と楽しい
Autor: 29.05.14Autor: 29.05.14
Portability
● 本体は可能な限りポータブルに– 意欲的にいろいろな OSをサポート– OS依存コードはメンテしやすいように– そうはいっても Cのマクロは要る
● Schemeコードは特に気にしない– RnRS準拠である理由がない– Githubでたまに作る程度
Autor: 29.05.14Autor: 29.05.14
Any Question?
Autor: 29.05.14Autor: 29.05.14
Thank you!
top related