More Related Content
Similar to つくっておぼえる!仮想マシン〜直前で実装編〜 (20)
More from Eric Sartre (8)
つくっておぼえる!仮想マシン〜直前で実装編〜
- 1. つくっておぼえる!仮想マシン
∼直前で実装編∼
筑波大学 情報科学類 2年
えりっく(@siritori)
筑波大学情報科学類 1年
いおりん(@iorivur)
- 2. つくっておぼえる!仮想マシン
∼直前で実装編∼
VM
in
Erlang
筑波大学 情報科学類 2年
えりっく(@siritori)Haskell
VM
in
筑波大学情報科学類 1年
いおりん(@iorivur)
- 3. じこしょうかい
• えりっく
– ちゃんと筑波大学に通っています
– あ、単位も全部来ました
– 趣味はマッサージとしりとり
– 最近はTwitterに流れるつぶやきのリアルタイ
ムな話題推定技術の研究とかしてる
– Erlangでサーバ書いて遊んでる(よばれた通知とか)
– 興味あるもの : Erlang, 自然言語処理, 機械学
習, (比較的)低レイヤなもの
- 4. じこしょうかい
• いおりん
– Verilogでカメラを制御して受験を生き抜いた
– Arch Linux / Debian GNU/Linux使い
– sgi O2やcobalt qubeなどにNetBSDを入れ
てpkgsrcしてあそんでる。
– 高校ではロボットをつくってました
- 7. 2012. 4/3ごろ
あ、作ってない。
作って発表するか・ω・
あとつくばの活きのいい学生誘って来ました
- 9. あーらん
Erlang
• (」・ω・)」あー!(/・ω・)/らんー!
• アクターモデルな並列指向言語
• 純粋でない関数型言語(な見た目)
• 隣の勉強会のHaskellerたちからしたら虫酸が走る
• 電話交換機とかのバックエンドで使われてた
• OTPというすごいフレームワークを触るためのlang
- 10. いーらんぐ
って言うな(´;ω;)
あーらん
Erlang
• (」・ω・)」あー!(/・ω・)/らんー!
• アクターモデルな並列指向言語
• 純粋でない関数型言語(な見た目)
• 隣の勉強会のHaskellerたちからしたら虫酸が走る
• 電話交換機とかのバックエンドで使われてた
• OTPというすごいフレームワークを触るためのlang
- 13. できてないところ
• やっぱりカーネル/VM探検隊だとELFローダも
書けてないのに発表するのは心苦しいです
• 例外飛んでから処理に飛んでいくところ(MIPS
の例外処理の理解が怪しいので教えて下さい)
• コプロセッサあたりの実装(́・ω:;.:...
• ErlangのくせにOTP使ってないとかErlangじゃ
ないですよねごめんなさい
- 14. ふええ><っち
• 前にも話した気がするけどErlangにはバ
イナリデータのパターンマッチング構文が
ある(通信系だから?)
• ABBCCCCCみたいなビット列があったら、
<<A:3, B:2, C:5>> = Data とかでマッチ
できる
• いやなんかこうこういう構文あったら命令
フェッチしたくなるじゃない?
- 15. ふええ><っち
exec(<<16#08:6, Rs:5, Rt:5, SignExtImm:16>>) ->
なんとかかんとか
↑addi命令の場合(OpCodeが0x08なI型命令)
こんな感じで以下の命令が実装してあります(`・ω・́)
add, addi, addiu, addu, and, andi, or,
ori, xor, xori, sll, srl, sllv, sra,
srav, sw, lw, slt, slti, lui, j, beq,
bne, break, jal, jalr
- 16. ふええ><っち
exec(<<16#08:6, Rs:5, Rt:5, SignExtImm:16>>) ->
なんとかかんとか
↑addi命令の場合(OpCodeが0x08なI型命令)
こんな感じで以下の命令が実装してあります(`・ω・́)
add, addi, addiu, addu, and, andi, or,
今日起きてから実装
ori, xor, xori, sll, srl, sllv, sra,
srav, sw, lw, slt, slti, lui, j, beq,
bne, break, jal, jalr
- 17. 記憶領域やレジスタの話
• レジスタとメモリ : ETS (Erlang Term Storage)
• メモリアクセスが4の倍数だけでよかった
• プログラムカウンタや原因レジスタ、EXPレジ
スタ、メモリテーブルへの参照をぜ∼んぶ
Contextとして持ち回るような設計に(並列実行
への布石)
- 19. 感想
• 数値の演算がC言語の10倍くらい遅いと言われ
るErlangだけど、バイナリの操作はすごく簡単
だった(○ ω ○)
• このMIPSのVMを複数立ち上げるのも朝飯前だ
し、MIPSがWeb上で遊べるサービスとか作れ
そう
• 競技プログラミングの採点システムとかになっ
たらいいね(*́・ω・)(・ω・`*) 速度面...
• MIPSアーキテクチャのいい勉強になった
- 20. はすける
Haskell
• (」・ω・)」はすー!(/・ω・)/けるー!
• 純粋な関数型言語
• やたら型にうるさいのでコンパイルに大体の問題が
片付く(らしい)
• 手続き的なものは「みんな、Monadになる。」
- 22. できてないところ
• 例外、コプロセッサ命令、ジャンプ命令
• 綺麗なレジスタダンプ
• わかりやすくて親切なUI
• 一般的なアセンブリシンタックス入力