プログラミング言語を作る時には、途中で変えることが極めて難しいデザイン選択を最初に行わないといけないことがあります。今回は川合史朗さんがGaucheを設計した時に行ったデザイン選択の判断について話を伺いました。また、浮動小数点数のトリッキーさについても話をしています。
出演者: 川合史朗 (@anohana)、Rui Ueyama (@rui314)
https://turingcomplete.fm/17
ハッシュタグは#tcfmです。
TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。
- イントロ (0:00)
- セキュキャン参加者募集中 (0:41)
- 俳優のオーディションとその心構え (2:43)
- 川合史朗さんが出演している映画がサンフランシスコで上映されます (5:16)
- 前回の訂正 (7:40)
- Gaucheを作った経緯 (8:57)
- STkのオブジェクトシステム (12:22)
- CLOS(Common Lispのオブジェクトシステム)ではインスタンスのクラスを動的に変更できる (14:35)
- CLOSを使ってオブジェクトデータベースを作った話 (18:39)
- 三つ組を使ったグラフデータベースを作った話 (24:38)
- 構文木インタープリタではなくVMを選んだ理由は、継続 (29:24)
- プログラミングにおける概念としての「継続」 (30:39)
- 文字列の内部表現はどうするか (36:46)
- マルチスレッドの対応 (37:47)
- GCのAPIはどうするか(GaucheはBoehm GCを使って保守的GC) (39:36)
- 保守的GCとは何か (43:13)
- 自分ではGCを書かなかった理由 (45:03)
- Precise GCにしなかった理由はC言語との親和性 (46:45)
- マルチスレッドとGCとUnixのシグナル (47:50)
- GoやErlangの並行処理モデルを導入していない理由 (51:17)
- Gauche版のjava.util.concurrent (52:31)
- R5RSの範囲を実装するのは1ヶ月以内でできた (55:16)
- 浮動小数点数を10進で書き出して読み出した時、同じ数に戻ることを保証するには (57:37)
- Schemeは分数を正確な分数のままで扱うことができる (1:04:09)
- 16進浮動小数点表現 (1:07:17)
- 浮動小数点数の1.15を丸めた時、1.1になるべきか、1.2になるべきか (1:08:17)
- 正確数のsqrtは正確数にしたい (1:12:12)
- 浮動小数点数を安易に10倍すると精度が失われる (1:16:07)
- 浮動小数点数はそれ自体で整合は取れているが、実数とは異なる数の体系 (1:16:49)
- x87の80ビット浮動小数点数フォーマットの落とし穴が原因で、PHPが特定の数を読み込むと無限ループに陥るバグ (1:17:43)
- JavaやGaucheが読み込むとハングする特定の浮動小数点数があった (1:19:38)
- 浮動小数点数の精度は大は小を兼ねるわけではない (1:23:25)
- 言語処理系はコーナーケースをすべて面倒を見なければいけないのが面白い (1:25:42)