0
Preludeのprecompile<br />2011年 8月 13日<br />プログラミング言語クラス  松下 正樹<br />
rubyの処理の流れ<br />YARVという仮想マシンが存在<br />コードを解析した後YARVが理解できる命令列にコンパイルし、実行する<br />(例)<br />puts “Hello, world!”<br />          ...
Preludeとは(1)<br />インタプリタの起動時に毎回実行されるRuby<br />スクリプト<br />コードの内容<br />MUTEX_FOR_THREAD_EXCLUSIVEの定義<br />	(排他制御などに利用する為のVMグ...
課題<br />実行ファイルにPreludeのRubyコードが埋め込まれていて、rubyは起動時にこのコードを解析、コンパイル、実行する<br />起動時にコードの解析と、VARV命令列へのコンパイルが毎回必要<br />Preludeの内容は...
Preludeのprecompile<br />rubyのビルド時に、PreludeのRubyコードの内容をVARY命令列にコンパイルしておく<br />rubyの起動時には、コンパイルしておいた命令列を読みだしてそのまま実行する<br />
結果<br />ビルド時にPreludeをprecompileしてファイルに書き出し、rubyの実行時にはコンパイル済みの命令列を直接実行できるようになった<br />prelude.cに埋め込まれていたCの文字列<br />
PreludeのRubyコードから生成したYARV命令列<br />
precompileなしを1とした時のpreludeの実行にかかる時間<br />
考察<br />precompileしたのに遅い<br />->解析とコンパイルにかかる時間よりも、文字列からのYARV命令列の復元にかかる時間の方が長い<br />Marshal.loadがボトルネック?<br />->YARV命令列専用の形...
Upcoming SlideShare
Loading in...5
×

Preludeのprecompile

1,192

Published on

セキュリティ&プログラミング2011のプログラミング言語クラスで取り組んだ課題の発表資料

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,192
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Preludeのprecompile"

  1. 1. Preludeのprecompile<br />2011年 8月 13日<br />プログラミング言語クラス 松下 正樹<br />
  2. 2. rubyの処理の流れ<br />YARVという仮想マシンが存在<br />コードを解析した後YARVが理解できる命令列にコンパイルし、実行する<br />(例)<br />puts “Hello, world!”<br /> ↓ RubyVM::InstructionSequence.compile<br />0003 putstring "Hello, world!"<br />0005 send :puts, 1, nil, 8, <ic:0><br />
  3. 3. Preludeとは(1)<br />インタプリタの起動時に毎回実行されるRuby<br />スクリプト<br />コードの内容<br />MUTEX_FOR_THREAD_EXCLUSIVEの定義<br /> (排他制御などに利用する為のVMグローバルなMutex)<br />rubygem.rbをrequire<br />(Rubyの標準パッケージ管理システム)<br />エンコーディングの定義とそのエイリアス、トランスコーダ<br />
  4. 4. 課題<br />実行ファイルにPreludeのRubyコードが埋め込まれていて、rubyは起動時にこのコードを解析、コンパイル、実行する<br />起動時にコードの解析と、VARV命令列へのコンパイルが毎回必要<br />Preludeの内容は変化しないので、前もってYARV命令列にコンパイルしておけば高速化が期待できる<br />
  5. 5. Preludeのprecompile<br />rubyのビルド時に、PreludeのRubyコードの内容をVARY命令列にコンパイルしておく<br />rubyの起動時には、コンパイルしておいた命令列を読みだしてそのまま実行する<br />
  6. 6. 結果<br />ビルド時にPreludeをprecompileしてファイルに書き出し、rubyの実行時にはコンパイル済みの命令列を直接実行できるようになった<br />prelude.cに埋め込まれていたCの文字列<br />
  7. 7. PreludeのRubyコードから生成したYARV命令列<br />
  8. 8. precompileなしを1とした時のpreludeの実行にかかる時間<br />
  9. 9. 考察<br />precompileしたのに遅い<br />->解析とコンパイルにかかる時間よりも、文字列からのYARV命令列の復元にかかる時間の方が長い<br />Marshal.loadがボトルネック?<br />->YARV命令列専用の形式で高速化の可能性<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×