SlideShare a Scribd company logo
1 of 14
Download to read offline
scheme処理系の実装
のぶさん@bobuhiro11
だれ??
• のぶさん@bobuhiro11
• 大学3回
• security camp 2013
• Linux Security Module
• UNIX V6読書会
• 7回目で止まってる
• 参加者の方々ごめんなさい

2
話の内容
• schemeの処理系
• 昨年12月頃

• 第一弾を作った
• 純粋なインタプリタ
• マクロなし,GCなし,継続なし
• もうこれschemeちゃうやん
• 現在
• 第二弾を作った
• VM型インタプリタ
• 伝統的マクロあり,GCあり,継続あり
• それっぽい
3
構成
• コンパイラ

• schemeで実装
• 字句解析 → マクロ展開 → CPS変換・クロージャ変換
→ バイトコード生成
• VM

• C言語で実装
• スタックマシン

4
CPS変換
(if E1 E2 E3)
C

→

E1
(lambda (r1)
(if r1 E2 E3))
C C

5
VM
• 6つレジスタ

stack pointer →

arg pointer
closure pointer

• accumulator

return address

• program counter

TAG: end-of-frame

• frame pointer

arg pointer →

• arg pointer

:

• closure pointer
• stack pointer

arg1
argn

frame pointer →

frame pointer
arg pointer
closure pointer

成長

return address
TAG: end-of-frame
arg1'
arg2'
frame pointer'

6
データ表現
• プリミティブ
• 整数,文字,定数
• 1 wordで表現
• typedef intptr_t vm_data;
• 下位2bitにタグ情報を入れる

number

00

char

00001

true

00101

false

01001

nil

01101

eof

10001

undef

10101

object

11

• オブジェクト
• ペア,クロージャ,文字列,ボックス
• ヒープへ

7
バイトコード
>>(disasm ((lambda (x) (* x 2)) 10))
=== code ===
0 0x12000002 ;FRAME

14 0x01000002 ;REFER_LOCAL

1 0x00000060 ;24

15 0x00000000 ;0

2 0x25000002 ;CONSTNUM

16 0x13000002 ;ARGUMEMT

3 0x00000028 ;10

17 0x03000002 ;REFER_GLOBAL

4 0x13000002 ;ARGUMEMT

18 0x095b5313 ;*

5 0x06000002 ;CLOSE

19 0x14000002 ;SHIFT

6 0x00000000 ;0

20 0x00000008 ;2

7 0x0000002c ;11

21 0x00000004 ;1

8 0x0000005c ;23

22 0x15000002 ;APPLY

9 0x15000002 ;APPLY

23 0x00000008 ;2

10 0x00000004 ;1

24 0x27000002 ;DISASM

11 0x25000002 ;CONSTNUM

25 0x00000002 ;HALT

12 0x00000008 ;2
13 0x13000002 ;ARGUMEMT
8
GC...の前に
シンボルテーブル
x
y

スタック

100
200

:

*

20

+

10
end-of-frame

cons

:

コード

ヒープ
:

:
:
NUATE
:
:
:

レジスタ

nil

2

23

30
9
GC
• cheney's copy GCを採用
• cheney → copy GCの中で,幅優先のもの

allocate
FROM

TO

allocate
TO

FROM

GC
TO

FROM
10
cheney's copy GC
• 良いとこ
• デフラグがいらない
• 幅優先のため,うまくやるとマシンスタックを余計に使わない
• 悪いとこ
• 幅優先なので,キャッシュが効きにくい
• 近似的に深さ優先にする手法もあるみたい

• 保守的GCと相性が悪い
• 今回はオブジェクトかどうかexactに判定できるから問題無し

11
残りのトピック
• 末尾呼び出し最適化
• 不必要にフレームを作らない
• 代わりにSHIFT命令で,引数を調節する
• 末尾再帰は問題なし
• マクロ
• Gaucheの力を使って,コンパイル時に展開
• 伝統的マクロ(展開ルールを素直に記述したもの)のみ
• 多値
• やってない
• Gaucheからの自立
• コンパイラ自身をセルフコンパイルすればおk
• でも大変
12
デモ
参考
• Three Implementation Models for Scheme
• http://www.cs.indiana.edu/~dyb/papers/3imp.pdf
• The 90 Minute Scheme to C compiler
• http://www.iro.umontreal.ca/~boucherd/mslug/meetings/20041020/9
0-min-scc/90-min-scc.pdf
• Mona OS developers Wiki
• http://wiki.monaos.org/

14

More Related Content

What's hot

async/await不要論
async/await不要論async/await不要論
async/await不要論bleis tift
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Teppei Sato
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminalTakuya ASADA
 
Kotlin vs TypeScript
Kotlin vs TypeScriptKotlin vs TypeScript
Kotlin vs TypeScriptSaiki Iijima
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacGosuke Miyashita
 
Web socket and gRPC
Web socket and gRPCWeb socket and gRPC
Web socket and gRPCTIS Inc
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたShingo Inoue
 
Gitlab-CIを活かして自動化してみよう
Gitlab-CIを活かして自動化してみようGitlab-CIを活かして自動化してみよう
Gitlab-CIを活かして自動化してみようYoshiyuki Nakahara
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Kazuhide Maruyama
 
Rubyで.netを扱う
Rubyで.netを扱うRubyで.netを扱う
Rubyで.netを扱う107steps
 
TravisCI Nightに行ってきたので情報展開
TravisCI Nightに行ってきたので情報展開TravisCI Nightに行ってきたので情報展開
TravisCI Nightに行ってきたので情報展開Makoto Abe
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメTetsuyuki Kobayashi
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』H2O Space. Co., Ltd.
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
Nc3開発環境(vagrant)構築(Windows編)
Nc3開発環境(vagrant)構築(Windows編)Nc3開発環境(vagrant)構築(Windows編)
Nc3開発環境(vagrant)構築(Windows編)snakajima
 
20090121 J QueryからはじめるJava Script~初級編~
20090121 J QueryからはじめるJava Script~初級編~20090121 J QueryからはじめるJava Script~初級編~
20090121 J QueryからはじめるJava Script~初級編~Hiromu Shioya
 
最速で最速のRuby擴張を作る
最速で最速のRuby擴張を作る最速で最速のRuby擴張を作る
最速で最速のRuby擴張を作るSachirou Inoue
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Yusuke Ando
 

What's hot (20)

async/await不要論
async/await不要論async/await不要論
async/await不要論
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
Kotlin vs TypeScript
Kotlin vs TypeScriptKotlin vs TypeScript
Kotlin vs TypeScript
 
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayacMaglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
 
Web socket and gRPC
Web socket and gRPCWeb socket and gRPC
Web socket and gRPC
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
 
Gitlab-CIを活かして自動化してみよう
Gitlab-CIを活かして自動化してみようGitlab-CIを活かして自動化してみよう
Gitlab-CIを活かして自動化してみよう
 
Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)Typescriptの中のこと(浅め)
Typescriptの中のこと(浅め)
 
Rubyで.netを扱う
Rubyで.netを扱うRubyで.netを扱う
Rubyで.netを扱う
 
Introduction pp.js
Introduction pp.jsIntroduction pp.js
Introduction pp.js
 
TravisCI Nightに行ってきたので情報展開
TravisCI Nightに行ってきたので情報展開TravisCI Nightに行ってきたので情報展開
TravisCI Nightに行ってきたので情報展開
 
組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ組み込みLinuxでのGolangのススメ
組み込みLinuxでのGolangのススメ
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
Nc3開発環境(vagrant)構築(Windows編)
Nc3開発環境(vagrant)構築(Windows編)Nc3開発環境(vagrant)構築(Windows編)
Nc3開発環境(vagrant)構築(Windows編)
 
20090121 J QueryからはじめるJava Script~初級編~
20090121 J QueryからはじめるJava Script~初級編~20090121 J QueryからはじめるJava Script~初級編~
20090121 J QueryからはじめるJava Script~初級編~
 
最速で最速のRuby擴張を作る
最速で最速のRuby擴張を作る最速で最速のRuby擴張を作る
最速で最速のRuby擴張を作る
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
 

Similar to scheme処理系の実装

汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?Masahiro Sano
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3mganeko
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...mganeko
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)7shi
 
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)洋史 東平
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesTaiki
 
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!h2so5
 
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Kotaro Nakayama
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaokabeyond Co., Ltd.
 
JAZUG クラウドデザインパターンのコードを覗く
JAZUG クラウドデザインパターンのコードを覗くJAZUG クラウドデザインパターンのコードを覗く
JAZUG クラウドデザインパターンのコードを覗くTakekazu Omi
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23Masashi Shibata
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03ManaMurakami1
 

Similar to scheme処理系の実装 (20)

汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?うわ…私のEmacs力、低すぎ...?
うわ…私のEmacs力、低すぎ...?
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
Node.js x Headless Chrome for WeRTC MCU / Node.js x Chrome headless で、お手軽WebR...
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)V6 Interpreter (Nagoya Geek Bar 2011-05-02)
V6 Interpreter (Nagoya Geek Bar 2011-05-02)
 
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!DXライブラリでMMO作ったよ!
DXライブラリでMMO作ったよ!
 
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
Deep Learning Implementations: pylearn2 and torch7 (JNNS 2015)
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
 
JAZUG クラウドデザインパターンのコードを覗く
JAZUG クラウドデザインパターンのコードを覗くJAZUG クラウドデザインパターンのコードを覗く
JAZUG クラウドデザインパターンのコードを覗く
 
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
20160728 hyperscale #03
20160728 hyperscale #0320160728 hyperscale #03
20160728 hyperscale #03
 

Recently uploaded

IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 

Recently uploaded (11)

IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 

scheme処理系の実装

  • 2. だれ?? • のぶさん@bobuhiro11 • 大学3回 • security camp 2013 • Linux Security Module • UNIX V6読書会 • 7回目で止まってる • 参加者の方々ごめんなさい 2
  • 3. 話の内容 • schemeの処理系 • 昨年12月頃 • 第一弾を作った • 純粋なインタプリタ • マクロなし,GCなし,継続なし • もうこれschemeちゃうやん • 現在 • 第二弾を作った • VM型インタプリタ • 伝統的マクロあり,GCあり,継続あり • それっぽい 3
  • 4. 構成 • コンパイラ • schemeで実装 • 字句解析 → マクロ展開 → CPS変換・クロージャ変換 → バイトコード生成 • VM • C言語で実装 • スタックマシン 4
  • 5. CPS変換 (if E1 E2 E3) C → E1 (lambda (r1) (if r1 E2 E3)) C C 5
  • 6. VM • 6つレジスタ stack pointer → arg pointer closure pointer • accumulator return address • program counter TAG: end-of-frame • frame pointer arg pointer → • arg pointer : • closure pointer • stack pointer arg1 argn frame pointer → frame pointer arg pointer closure pointer 成長 return address TAG: end-of-frame arg1' arg2' frame pointer' 6
  • 7. データ表現 • プリミティブ • 整数,文字,定数 • 1 wordで表現 • typedef intptr_t vm_data; • 下位2bitにタグ情報を入れる number 00 char 00001 true 00101 false 01001 nil 01101 eof 10001 undef 10101 object 11 • オブジェクト • ペア,クロージャ,文字列,ボックス • ヒープへ 7
  • 8. バイトコード >>(disasm ((lambda (x) (* x 2)) 10)) === code === 0 0x12000002 ;FRAME 14 0x01000002 ;REFER_LOCAL 1 0x00000060 ;24 15 0x00000000 ;0 2 0x25000002 ;CONSTNUM 16 0x13000002 ;ARGUMEMT 3 0x00000028 ;10 17 0x03000002 ;REFER_GLOBAL 4 0x13000002 ;ARGUMEMT 18 0x095b5313 ;* 5 0x06000002 ;CLOSE 19 0x14000002 ;SHIFT 6 0x00000000 ;0 20 0x00000008 ;2 7 0x0000002c ;11 21 0x00000004 ;1 8 0x0000005c ;23 22 0x15000002 ;APPLY 9 0x15000002 ;APPLY 23 0x00000008 ;2 10 0x00000004 ;1 24 0x27000002 ;DISASM 11 0x25000002 ;CONSTNUM 25 0x00000002 ;HALT 12 0x00000008 ;2 13 0x13000002 ;ARGUMEMT 8
  • 10. GC • cheney's copy GCを採用 • cheney → copy GCの中で,幅優先のもの allocate FROM TO allocate TO FROM GC TO FROM 10
  • 11. cheney's copy GC • 良いとこ • デフラグがいらない • 幅優先のため,うまくやるとマシンスタックを余計に使わない • 悪いとこ • 幅優先なので,キャッシュが効きにくい • 近似的に深さ優先にする手法もあるみたい • 保守的GCと相性が悪い • 今回はオブジェクトかどうかexactに判定できるから問題無し 11
  • 12. 残りのトピック • 末尾呼び出し最適化 • 不必要にフレームを作らない • 代わりにSHIFT命令で,引数を調節する • 末尾再帰は問題なし • マクロ • Gaucheの力を使って,コンパイル時に展開 • 伝統的マクロ(展開ルールを素直に記述したもの)のみ • 多値 • やってない • Gaucheからの自立 • コンパイラ自身をセルフコンパイルすればおk • でも大変 12
  • 14. 参考 • Three Implementation Models for Scheme • http://www.cs.indiana.edu/~dyb/papers/3imp.pdf • The 90 Minute Scheme to C compiler • http://www.iro.umontreal.ca/~boucherd/mslug/meetings/20041020/9 0-min-scc/90-min-scc.pdf • Mona OS developers Wiki • http://wiki.monaos.org/ 14