言語設計者が意味論を書くときに考えていたこと
TRANSCRIPT
![Page 1: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/1.jpg)
@miyakawa_taku
JJUG幹事
SI屋で賃労働
オレオレJVM言語Kinkを作っています
https://bitbucket.org/kink/kink
尾上部屋の里山関のファンです
自己紹介1
![Page 2: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/2.jpg)
2Kinkとは!
こんなの↓
プロトタイプベースのオブジェクト指向
言語
JVM上で動く言語処理系だ!
仕様策定者: 宮川 拓
実装者: 宮川 拓
ユーザ: 宮川 拓
![Page 3: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/3.jpg)
言語設計者が意味論を書く時に
考えていた事
2015-04-18 渋谷JVM LT
宮川 拓
![Page 4: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/4.jpg)
4はいけい
去年の7月から12月ごろに掛けて、
Kinkの意味論を一通り書き直しました
例示によるゆるふわ意味論では無理が出
てきた
何が正しいか分からない……
![Page 5: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/5.jpg)
5Kinkの意味論
http://doc.kink-lang.org/kink/manual-
ja/language/semantics.html
![Page 6: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/6.jpg)
言語の意味論の分類
表示的意味論
プログラムの項の集合を他のなにかの
集合にマッピングする意味論
操作的意味論
あるプログラムがどんな風に動くか、を
記述する意味論
公理的意味論
なんか難しくてよく分からん
6
![Page 7: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/7.jpg)
7Kinkのプログラム意味論(にゅー)
二段階に分けてます
1.表示的意味論
2.操作的意味論
![Page 8: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/8.jpg)
表示的意味論の部分8
:Var = 42
¥env::Var.op_set(42)
env; varref Var; dup;emptylist; num 42;
add; flip; deref op_set; call
正規化
仮想的なスタックマシン (KSM)
の命令列に変換
![Page 9: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/9.jpg)
env 環境をpush
varref Varpopした値の変数参照を作って
push
dup popした値をpush, push
emptylist 新しい空のリストをpush
num 42 数値をpush
add値をpop, リストをpopして末尾
に値を追加したリストをpush
操作的意味論の部分9
![Page 10: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/10.jpg)
10意味論書いてみて分かったこと
Kinkのことがよく理解できた!
「ブロックから関数を生成」は、よりプ
リミティブなふたつの命令に分解できる
処理系のバグが見つけられた!
最適化前と最適化後で、関数呼び出しの
処理順序が変わってしまっていた
![Page 11: 言語設計者が意味論を書くときに考えていたこと](https://reader036.vdocuments.site/reader036/viewer/2022071815/55a81bfa1a28ab0c2e8b47ab/html5/thumbnails/11.jpg)
11教訓
みんなもプログラム意味論を書こう!