Enviar búsqueda
Cargar
Scheme to x86コンパイラ
•
4 recomendaciones
•
3,612 vistas
Nobutaka Takushima
Seguir
Schemeコードをx86アセンブリにコンパイルする、トイコンパイラの紹介 https://github.com/nobutaka/nanopass
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 24
Descargar ahora
Descargar para leer sin conexión
Recomendados
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3
Masahiro Sakai
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
Kazuki Ohta
あまぁいRcpp生活
あまぁいRcpp生活
Masaki Tsuda
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
Kohta Ishikawa
Rx入門
Rx入門
Takaaki Suzuki
Rcppのすすめ
Rcppのすすめ
Masaki Tsuda
My code
My code
俊 中村
Recomendados
PythonistaがOCamlを実用する方法
PythonistaがOCamlを実用する方法
Yosuke Onoue
Whole Program Paths 等の紹介@PLDIr#3
Whole Program Paths 等の紹介@PLDIr#3
Masahiro Sakai
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
Kazuki Ohta
あまぁいRcpp生活
あまぁいRcpp生活
Masaki Tsuda
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
Kohta Ishikawa
Rx入門
Rx入門
Takaaki Suzuki
Rcppのすすめ
Rcppのすすめ
Masaki Tsuda
My code
My code
俊 中村
Rx Showcase
Rx Showcase
Takaaki Suzuki
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Nagi Teramo
Run-time Code Generation and Modal-ML の紹介@PLDIr#2
Run-time Code Generation and Modal-ML の紹介@PLDIr#2
Masahiro Sakai
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Yasuo Tabei
#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon Result
Kazuhiro Hishinuma
How do you like jhc?
How do you like jhc?
Kiwamu Okabe
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
Coqでsprintf
Coqでsprintf
Masaki Hara
Coqでsprintf
Coqでsprintf
Masaki Hara
FPGAスタートアップ資料
FPGAスタートアップ資料
marsee101
Lispのべんきょう
Lispのべんきょう
Hatori Kouiti
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
nkt77
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
nkt77
Klab expert camp 成果発表
Klab expert camp 成果発表
teruyaono1
M1 gp
M1 gp
亮介 小林
バイナリ解析入門
バイナリ解析入門
aksechack0001
レイトレ合宿7 発表スライド
レイトレ合宿7 発表スライド
Sho Ikeda
数値計算のための Python + FPGA
数値計算のための Python + FPGA
ryos36
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Satoshi imai
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86
Priyanka Aash
ABI란 무엇인가요?
ABI란 무엇인가요?
진상 문
Más contenido relacionado
La actualidad más candente
Rx Showcase
Rx Showcase
Takaaki Suzuki
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Nagi Teramo
Run-time Code Generation and Modal-ML の紹介@PLDIr#2
Run-time Code Generation and Modal-ML の紹介@PLDIr#2
Masahiro Sakai
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Yasuo Tabei
#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon Result
Kazuhiro Hishinuma
How do you like jhc?
How do you like jhc?
Kiwamu Okabe
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
wilfrem
Coqでsprintf
Coqでsprintf
Masaki Hara
Coqでsprintf
Coqでsprintf
Masaki Hara
FPGAスタートアップ資料
FPGAスタートアップ資料
marsee101
Lispのべんきょう
Lispのべんきょう
Hatori Kouiti
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
nkt77
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
nkt77
Klab expert camp 成果発表
Klab expert camp 成果発表
teruyaono1
M1 gp
M1 gp
亮介 小林
バイナリ解析入門
バイナリ解析入門
aksechack0001
レイトレ合宿7 発表スライド
レイトレ合宿7 発表スライド
Sho Ikeda
数値計算のための Python + FPGA
数値計算のための Python + FPGA
ryos36
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Satoshi imai
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
洋史 東平
La actualidad más candente
(20)
Rx Showcase
Rx Showcase
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Run-time Code Generation and Modal-ML の紹介@PLDIr#2
Run-time Code Generation and Modal-ML の紹介@PLDIr#2
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
#upcamp '12 Hack-a-thon Result
#upcamp '12 Hack-a-thon Result
How do you like jhc?
How do you like jhc?
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
Coqでsprintf
Coqでsprintf
Coqでsprintf
Coqでsprintf
FPGAスタートアップ資料
FPGAスタートアップ資料
Lispのべんきょう
Lispのべんきょう
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
Klab expert camp 成果発表
Klab expert camp 成果発表
M1 gp
M1 gp
バイナリ解析入門
バイナリ解析入門
レイトレ合宿7 発表スライド
レイトレ合宿7 発表スライド
数値計算のための Python + FPGA
数値計算のための Python + FPGA
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Rubyの御先祖CLUのお話(OSC 2011 Shimane LT 資料)
Destacado
Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86
Priyanka Aash
ABI란 무엇인가요?
ABI란 무엇인가요?
진상 문
家に帰るまでが遠足です
家に帰るまでが遠足です
Cryolite
C++が仲間になりたそうにこちらを見ている
C++が仲間になりたそうにこちらを見ている
fjnl
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기
진상 문
SMP Implementation for OpenBSD/sgi [Japanese Edition]
SMP Implementation for OpenBSD/sgi [Japanese Edition]
Takuya ASADA
OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350
Takuya ASADA
Destacado
(9)
Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86
ABI란 무엇인가요?
ABI란 무엇인가요?
家に帰るまでが遠足です
家に帰るまでが遠足です
C++が仲間になりたそうにこちらを見ている
C++が仲間になりたそうにこちらを見ている
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기
SMP Implementation for OpenBSD/sgi [Japanese Edition]
SMP Implementation for OpenBSD/sgi [Japanese Edition]
OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350
Similar a Scheme to x86コンパイラ
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
m2ym
OpenStack + Common Lisp
OpenStack + Common Lisp
irix_jp
研究生のためのC++ no.7
研究生のためのC++ no.7
Tomohiro Namba
第1回勉強会スライド
第1回勉強会スライド
koturn 0;
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
sandai
async/await不要論
async/await不要論
bleis tift
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
Rの高速化
Rの高速化
弘毅 露崎
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
リテラル文字列型までの道
リテラル文字列型までの道
Satoshi Sato
Python physicalcomputing
Python physicalcomputing
Noboru Irieda
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)
ryos36
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
MITSUNARI Shigeo
Similar a Scheme to x86コンパイラ
(20)
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
OpenStack + Common Lisp
OpenStack + Common Lisp
研究生のためのC++ no.7
研究生のためのC++ no.7
第1回勉強会スライド
第1回勉強会スライド
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
async/await不要論
async/await不要論
MoteMote Compiler Plugin
MoteMote Compiler Plugin
Rの高速化
Rの高速化
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
リテラル文字列型までの道
リテラル文字列型までの道
Python physicalcomputing
Python physicalcomputing
Introduction to NumPy & SciPy
Introduction to NumPy & SciPy
90分 Scheme to C(勝手に抄訳版)
90分 Scheme to C(勝手に抄訳版)
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
BLS署名の実装とその応用
BLS署名の実装とその応用
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
Scheme to x86コンパイラ
1.
Scheme to x86
コンパイラ 多久島 信隆
2.
経緯 tracing GCを作ったことがない ⇒
せっかくな ので処理系のGCを作りたい ⇒ Lisp interpreter OR compiler ⇒ 黒魔術感のある compiler ⇒ ターゲットは資料の多いx86
3.
経緯 SICP, PAIP, 3imp.pdf,
Tiger book, EoPL, MinCaml, etc. を参考にはじめる。実装も沢山 ある ⇒ An Incremental Approach to Compiler Constructionに出会う ⇒ さくさく作れて楽し い この論文および関連資料を基礎にして進めてき た
4.
Schemeの紹介 極めてシンプル (ストイック) な言語仕様 予約語はありません すべては式です 必要な構文は5つ
(define quote if set! lambda)
5.
S式 z1 → ((a
. (b . ())) . ()) S式は最小限の労力で、グラフをテキストにシ リアライズする手段 LispのプログラムコードはS式 a = 1 + 1 は (set! a (+ 1 1)) となる
6.
Program as Data
他の言語ならコンパイラが構文解析して内部に作られる構文木を、Lispでは 直接プログラムとして書き下すわけだ。しかも、この構文木はプログラムか らアクセスできるから、構文木自身を操作するプログラムを書くことができ る。Lispではそのようなプログラムをマクロと呼ぶ。いわば、プログラムを 生成するプログラムだ。 ポール・グレアム ⇒ 処理系が必要になれば、S式からS式のトランスレー タを書けばよく、それは簡単、ということです。
7.
特徴的な言語要素 レキシカルスコープ 無限のエクステント 1st class lambda,
1st class continuation マクロ GC
8.
nanopassコンパイラ R5RSサブセット
伝統的マクロ x86=32bit register Exact copying GC machine FFI callout, callback 3bit tagged value Schemeで実装 CPS変換による parser, 最適化はなし continuation https://github.com/nobutaka/nanopass
9.
fixnum if
10.
flonum string vector
11.
let map list
12.
vararg FFI call/cc
13.
方針 コンパイルフェーズを細かく分け、小さな変換 を繰り返す ⇒ nanopass micro
schemeを実装してその上にfull scheme を実装する 数値をコンパイルできるところからはじめ、ボ トムアップに拡張する
14.
コンパイルフェーズ 約10フェーズ (parserはGaucheのreadで代用) ライブラリ追加 ⇒
マクロ展開 ⇒ 内部define除 去 ⇒ begin構文単純化 ⇒ CPS変換 ⇒ 代入, free 変数, ヒープリテラル解析 ⇒ 代入boxing/un- boxing ⇒ ヒープリテラルlifting ⇒ lambda lifting ⇒ プロローグ追加, コード生成
15.
マクロ展開 詳しくはLisp in Small
Pieces コンパイル時に評価器が必要 マクロもコンパイルして実行 OR interpreterを 実装しておく OR 外部プログラムを呼び出す Gaucheのevalを呼んで実装
16.
継続の実装 スタックコピー OR CPS変換 スタックコピーの実装についてはfault
on continuation (Gauche-devel-jp)でぐぐる コード変換だけで実装できることから、CPS変 換を選択
17.
CPS変換 詳しくはThe 90 minute
Scheme to C compiler なんらかの簡約を行うか、素朴な変換を止め ないとコードがとても大きくなります 継続がない場合はSSAと等価だそう CPS変換するとすべて末尾呼び出しになります
18.
クロージャの実装 プログラミング言語の進化を追え: 第4回 大人 のためのブラックボックス読解講座 interpreterならstatic
linkをたどる実装が簡単 クロージャの自由変数を引数に追加して除去す る、lambda liftingで実装
19.
Code Generation
Architecture http://www.cs.indiana.edu/eip/compile/ back.html frame, closure, allocation, accumulator, temporary*3 registers + 独自のスタック Destination-driven Code Generation: 単純かつ トップダウンのアプローチ
20.
GC Cheney’s two-finger collectorをCで実装 current
frame pointer, current closure pointer, accumulator, temporary registersをrootとする 当初の目的だったGCの実装はわずか300行……
21.
FFI callout データ変換とメモリ管理が要点 C friendlyな型
(null終端文字列や32bit word) を保持できるようにして、Scheme側で自動変 換。stable pointerではありません (dlsym asciiz) (foreign-call fptr args size) libffiなどは使えないのでOSXのABIに従いcall
22.
FFI callback Scheme↔Cの相互呼び出しがあり得る tall callのみでなくなる
(フレームが伸びる) コンテキストスイッチのため実行時に trampolineコードを生成 いつGCが動いてもよいような配慮
23.
デモ
24.
振り返ると 1 word 64bitにすべき
モデルと実装のギャッ だった プが埋まった interpreterなら簡単な 竹内先生の最終講義を ことが難しい 聞きに行ったり 脳がとけるかと思った ちょっと草植えときま GCのバグ すね型言語 Grassが分 かるようになったり ま、とにかく楽しかったです
Descargar ahora