Preludeのprecompile

  • 1,144 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,144
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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