DiscoverTuring Complete FM19. Gauche Schemeのスタックとヒープのハンドリング (川合史朗)
19. Gauche Schemeのスタックとヒープのハンドリング (川合史朗)

19. Gauche Schemeのスタックとヒープのハンドリング (川合史朗)

Update: 2018-05-211
Share

Description

川合史朗さんが作っているScheme処理系Gaucheの実装について、特にメモリ管理やクロージャ、継続の実装などに焦点を当てて話をしました。最近のCPUでは単純にJITしても速くならない理由などについても話をしています。

出演者: 川合史朗 (@anohana)、Rui Ueyama (@rui314)


https://turingcomplete.fm/19


ハッシュタグは#tcfmです。


TCFMはサポーターの投げ銭によって収益を上げています。このコンテンツに課金してもいいよという方はぜひクリエイター支援サイトPatreonから登録してご協力ください。



  • イントロ (0:00 )

  • Schemeのストレージモデルではすべてが無限エクステント (1:06 )

  • 関数呼び出しのモデルとアクティベーションレコードのアロケーション (4:34 )

  • SPARCのレジスタウィンドウ (9:20 )

  • Alphaの速さの秘密 (12:41 )

  • 大コケしたIntel Itaniumプロセッサ (14:11 )

  • GoのGC停止時間の劇的な改善 (16:55 )

  • ページテーブルのダーティービットをユーザプログラムから使う話 (20:14 )

  • Goの分割スタック機能 (23:07 )

  • クロージャを作ったときに使ってない変数を不必要に掴んでしまう問題 (25:54 )

  • 32ビットハッシュ値を大量に作ると32ビットマシンで偽ポインタがたくさんできてしまう問題 (27:44 )

  • 決してreturnしないCプログラムにコンパイルするScheme処理系 (33:00 )

  • タグ付きポインタ (41:23 )

  • C言語の仕様を満たすためのBoehm GCの機能と、それを使いたくない理由 (46:10 )

  • 64ビット浮動小数点数をなるべくヒープにアロケートせずに扱いたい (50:30 )

  • 16ビット"Brain"浮動小数点フォーマット (55:27 )

  • Gaucheの正規表現エンジン (56:44 )

  • Scheme→C→Schemeという呼び出しをした先で継続を取得すると限定継続になる (1:00:19 )

  • Schemeスタックからヒープへのコピー (1:04:44 )

  • 末尾呼び出しはスタックを消費しないように手続きを呼び出す (1:05:50 )

  • Chez Schemeでは多値ありと多値なしの2つの継続を渡す (1:10:29 )

  • 最近のCPUの分岐予測の賢さとMeltdown & Spectre (1:13:16 )

  • Gaucheを単純にJIT化してもCPUの分岐予測が賢いのでそれだけでは速くならない (1:20:08 )

  • 社会的や経済的理由で速くなる言語 (1:25:05 )

  • リテラルで書けるオブジェクト (1:27:29 )

  • 正規表現リテラル (1:28:32 )

  • マップのリテラル (1:30:55 )

  • Gaucheのハッシュテーブルとハッシュ衝突攻撃 (1:36:41 )

  • TCFMの難易度 (1:39:24 )



追記


  • CPythonはリファレンスカウンタを使っていますが、Pythonの言語仕様自体では必須とはされていません。

Comments 
loading
In Channel
loading
00:00
00:00
1.0x

0.5x

0.8x

1.0x

1.25x

1.5x

2.0x

3.0x

Sleep Timer

Off

End of Episode

5 Minutes

10 Minutes

15 Minutes

30 Minutes

45 Minutes

60 Minutes

120 Minutes

19. Gauche Schemeのスタックとヒープのハンドリング (川合史朗)

19. Gauche Schemeのスタックとヒープのハンドリング (川合史朗)

Rui Ueyama