言語設計者が意味論を書くときに考えていたこと

11
@miyakawa_taku JJUG幹事 SI屋で賃労働 オレオレJVM言語Kinkを作っています https ://bitbucket.org/kink/kink 尾上部屋の里山関のファンです 自己紹介 1

Upload: taku-miyakawa

Post on 17-Jul-2015

976 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 言語設計者が意味論を書くときに考えていたこと

@miyakawa_taku

JJUG幹事

SI屋で賃労働

オレオレJVM言語Kinkを作っています

https://bitbucket.org/kink/kink

尾上部屋の里山関のファンです

自己紹介1

Page 2: 言語設計者が意味論を書くときに考えていたこと

2Kinkとは!

こんなの↓

プロトタイプベースのオブジェクト指向

言語

JVM上で動く言語処理系だ!

仕様策定者: 宮川 拓

実装者: 宮川 拓

ユーザ: 宮川 拓

Page 3: 言語設計者が意味論を書くときに考えていたこと

言語設計者が意味論を書く時に

考えていた事

2015-04-18 渋谷JVM LT

宮川 拓

Page 4: 言語設計者が意味論を書くときに考えていたこと

4はいけい

去年の7月から12月ごろに掛けて、

Kinkの意味論を一通り書き直しました

例示によるゆるふわ意味論では無理が出

てきた

何が正しいか分からない……

Page 5: 言語設計者が意味論を書くときに考えていたこと

5Kinkの意味論

http://doc.kink-lang.org/kink/manual-

ja/language/semantics.html

Page 6: 言語設計者が意味論を書くときに考えていたこと

言語の意味論の分類

表示的意味論

プログラムの項の集合を他のなにかの

集合にマッピングする意味論

操作的意味論

あるプログラムがどんな風に動くか、を

記述する意味論

公理的意味論

なんか難しくてよく分からん

6

Page 7: 言語設計者が意味論を書くときに考えていたこと

7Kinkのプログラム意味論(にゅー)

二段階に分けてます

1.表示的意味論

2.操作的意味論

Page 8: 言語設計者が意味論を書くときに考えていたこと

表示的意味論の部分8

:Var = 42

¥env::Var.op_set(42)

env; varref Var; dup;emptylist; num 42;

add; flip; deref op_set; call

正規化

仮想的なスタックマシン (KSM)

の命令列に変換

Page 9: 言語設計者が意味論を書くときに考えていたこと

env 環境をpush

varref Varpopした値の変数参照を作って

push

dup popした値をpush, push

emptylist 新しい空のリストをpush

num 42 数値をpush

add値をpop, リストをpopして末尾

に値を追加したリストをpush

操作的意味論の部分9

Page 10: 言語設計者が意味論を書くときに考えていたこと

10意味論書いてみて分かったこと

Kinkのことがよく理解できた!

「ブロックから関数を生成」は、よりプ

リミティブなふたつの命令に分解できる

処理系のバグが見つけられた!

最適化前と最適化後で、関数呼び出しの

処理順序が変わってしまっていた

Page 11: 言語設計者が意味論を書くときに考えていたこと

11教訓

みんなもプログラム意味論を書こう!