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

Mais conteúdo relacionado

Mais procurados

Goで学ぶDApp(aizu.go#2)
Goで学ぶDApp(aizu.go#2)Goで学ぶDApp(aizu.go#2)
Goで学ぶDApp(aizu.go#2)Koki Natsume
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門Ryousei Takano
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernelNaoya Ito
 
YARV INTRODUCTION
YARV INTRODUCTIONYARV INTRODUCTION
YARV INTRODUCTION5t111111
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocketkoichik
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきことmao999
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzzyy yank
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方y torazuka
 
パケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmapパケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmapfurandon_pig
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.jsishiki-takai
 
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compilerAdaptive optimization of JIT compiler
Adaptive optimization of JIT compilernothingcosmos
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するshigeki_ohtsu
 

Mais procurados (20)

C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
Goで学ぶDApp(aizu.go#2)
Goで学ぶDApp(aizu.go#2)Goで学ぶDApp(aizu.go#2)
Goで学ぶDApp(aizu.go#2)
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
xv6から始めるSPIN入門
xv6から始めるSPIN入門xv6から始めるSPIN入門
xv6から始めるSPIN入門
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
How to read linux kernel
How to read linux kernelHow to read linux kernel
How to read linux kernel
 
YARV INTRODUCTION
YARV INTRODUCTIONYARV INTRODUCTION
YARV INTRODUCTION
 
node-handlersocket
node-handlersocketnode-handlersocket
node-handlersocket
 
Lockfree Queue
Lockfree QueueLockfree Queue
Lockfree Queue
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
Javaクラスファイルの読み方
Javaクラスファイルの読み方Javaクラスファイルの読み方
Javaクラスファイルの読み方
 
Aio
AioAio
Aio
 
パケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmapパケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmap
 
たのしいNode.js
たのしいNode.jsたのしいNode.js
たのしいNode.js
 
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70
 
Adaptive optimization of JIT compiler
Adaptive optimization of JIT compilerAdaptive optimization of JIT compiler
Adaptive optimization of JIT compiler
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 

Semelhante a Preludeのprecompile

組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構Ryosuke MATSUMOTO
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析morphine57
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングJun Saito
 
Mruby jitプレゼン
Mruby jitプレゼンMruby jitプレゼン
Mruby jitプレゼンmiura1729
 
Talend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJar
Talend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJarTalend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJar
Talend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJarQlikPresalesJapan
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Nobuto Murata
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用kazuyas
 
Service Fabric での高密度配置
 Service Fabric での高密度配置 Service Fabric での高密度配置
Service Fabric での高密度配置Takekazu Omi
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半Tetsuya Morimoto
 
18166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi200918166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi2009Muhammad Ali
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Masahito Zembutsu
 

Semelhante a Preludeのprecompile (20)

組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析
 
Summary of Ruby
Summary of RubySummary of Ruby
Summary of Ruby
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
 
Mruby jitプレゼン
Mruby jitプレゼンMruby jitプレゼン
Mruby jitプレゼン
 
Talend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJar
Talend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJarTalend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJar
Talend Studioで独自関数を実装して呼び出す - グローバルルーチンとカスタムルーチンJar
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
 
Mod mrubyについて
Mod mrubyについてMod mrubyについて
Mod mrubyについて
 
d-kami x86-2
d-kami x86-2d-kami x86-2
d-kami x86-2
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
 
Service Fabric での高密度配置
 Service Fabric での高密度配置 Service Fabric での高密度配置
Service Fabric での高密度配置
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
JRuby on Rails
JRuby on RailsJRuby on Rails
JRuby on Rails
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
18166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi200918166746-NeverBlock-RubyKaigi2009
18166746-NeverBlock-RubyKaigi2009
 
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
Docker 1.12 & Swarm Mode Introduction ~ Docker の新しい技術と swarm モードの紹介
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
ロボット用Open Source Software
ロボット用Open Source Softwareロボット用Open Source Software
ロボット用Open Source Software
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 

Último

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Último (10)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

Preludeのprecompile