inside of sagittarius (ja)

20
Autor: 29.05.14 Autor: 29.05.14 詳細 Sagittarius Takashi Kato Twitter: @tk_riple For Shibuya.lisp

Upload: kato-takashi

Post on 29-Jan-2018

4.562 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

詳細 Sagittarius

Takashi KatoTwitter: @tk_ripleFor Shibuya.lisp

Page 2: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

構成

ReaderReader

CompilerCompiler

VMVM

Datum

VM instructions

Page 3: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Reader

Macro DispatcherMacro Dispatcher

#\(#\( #\##\# OthersOthers

#\(#\( #\u#\u OthersOthers

ReaderReader CompilerCompiler(cons #(#f) #u(3 4))

Page 4: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Reader

● 読込はリードマクロベース● マクロは単一マクロと複合マクロの 2種類● シンボルと数値のみ特殊扱い● ユーザはリードマクロの拡張可能

– 作用はポート単位● Schemeからのリードテーブルのコピーは不可

– 要望があればつけるかも

Page 5: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Compiler

Expand&Convert

Optimise

EmitEmit

VMVM

Compiler

Page 6: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Compiler

● マクロ展開と中間表現への変換は同時に行う● 最適化はそれなり

– インライン展開– 定数畳み込み– 未使用変数除去– 副作用のない式の除去 (ゆるい判別 )

– ラムダシフティング● VMインストラクションの融合

Page 7: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

VM

● いくつかのレジスタを持つスタックマシン– AC, CL, PC, FP, SP等– 32個の多値レジスタ– その他

● インストラクションを逐次実行するだけ● 可能なら Direct Threadedを使う (例 :GCC)

● 速度的にはそこそこ

Page 8: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Misc features

● Builtin CLOS● FASL● Replacible reader● Compiler macro● Regular expression engine

Page 9: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Builtin CLOS

● Tiny CLOSベース– CL, Gaucheからもいろいろ拝借

● 総称関数は CLに近い– :primary, :before, :after, :around等サポート– eql specializerも組み込みでサポート

● 性能は今一– 実行時に適用可能メソッドの計算をするため– factが 200倍遅い

Page 10: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

FASL

● マクロ展開はコストが高い– 結果をキャッシュ

● ライブラリ単位で生成● 通常のファイル読み込みよりはるかに高速● スクリプト自体には適用されない

– 起動時間短縮するならライブラリ必須

Page 11: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Replacible reader

● ユーザが Readerを定義できる● SRFI-49及び SRFI-110の実装に使用● 最終的に S式に落とせばよいという発想● 正直お遊び機能

– 面白 SRFI等の実装くらいにしか使ってない

Page 12: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Compiler macro

● (core inline)で定義 (未ドキュメント )

● 手続きに対して定義されるマクロ– CLのとほぼ同義

● 現状では単なる inliner– コンパイル時情報の見せ方等が不満– もうすこし賢いやり方がいる

Page 13: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Regular expression engine

● 自前のハイブリッド正規表現エンジン– RE2を参考にした O(n)エンジン– Gaucheを参考にした最大 O(n^2)エンジン

● 一部の拡張正規表現を使わない限り O(n)

● あまり最適化されてない– 速度的に (今のところ )不満はない– 鬼車と比較されると・・・

Page 14: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Philosophy

PerformancePerformanceUsabilityUsability

FunFun

※人物像はイメージです※カメラは持ってません

PortabilityPortability

Page 15: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Usability

● 使い捨てスクリプトを書き易く– ライブラリの充実– リードマクロ

● 外の世界と繋がる– FFI,ソケット等の物理層– DBI, SOAP, MQ等のアプリ層

● 標準規格をサポート– RnRS, RFC等

Page 16: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

遅い=悪● 選ばれにくい● 業務で使う際にストレスがたまる

遅い=悪● 選ばれにくい● 業務で使う際にストレスがたまる

Performance

VS.VS.

チューニングはコストがかかる● 開発リソースは一人● どこかで妥協する必要がある

チューニングはコストがかかる● 開発リソースは一人● どこかで妥協する必要がある

Page 17: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Fun

● 基本的には遊び機能– Replacible reader等– あれば使うかもしれない的な何か

● 後発の処理系なので多少奇をてらってはいる– こういうのは実装するのが楽しい– 使うときも割と楽しい

Page 18: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Portability

● 本体は可能な限りポータブルに– 意欲的にいろいろな OSをサポート– OS依存コードはメンテしやすいように– そうはいっても Cのマクロは要る

● Schemeコードは特に気にしない– RnRS準拠である理由がない– Githubでたまに作る程度

Page 19: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Any Question?

Page 20: Inside of Sagittarius (ja)

Autor: 29.05.14Autor: 29.05.14

Thank you!