SlideShare a Scribd company logo
1 of 23
Download to read offline
最速で最速の
Ruby擴張を作る
.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)
Ruby
Ruby
最速で開發出來る⾔語
Crystal
Crystal
LLVMでcompile出來るRuby-likeな⾔語
Crystal
LLVMでcompile出來るRuby-likeな⾔語
Ruby-likeなsyntax
型推論
macroによるDSL
Cのlibをそのまま使へる
→ 最速の開發
Crystal
LLVMでcompile出來るRuby-likeな⾔語
型による最適化
LLVMによる最適化
macroによるcompile時計算
Cのlibをover head無く使へる
→ 最速の實⾏
Rubyの實⾏速度が遅い
Rubyの實⾏速度が遅い
↓
Cで擴張を作る
Rubyの實⾏速度が遅い
↓
Cで擴張を作る
↓
實⾏速度は速く成ったが
開發速度が遅く成った
Rubyのeco systemに頼りながら
開發速度を落とさず
遲い部分をCrystalで速く出來ないだらうか
既存の試み
manastech/crystal_ruby
頑張る前に放棄されてゐる
全然使へない
動かない
phoffer/crystalized_ruby
頑張った跡
rb_define_module_function等を⼿動で呼ばなければならない
もう動かない
♥ Ruby meets Crystal ♥
ne-sachirou/sample_ruby_extension_in_crystal
ne-sachirou/sample_ruby_extension_in_crystal
ruby hello_cr,
def hello_cr : Nil
puts "Hello, World!”
end
hello_cr
ne-sachirou/sample_ruby_extension_in_crystal
ruby Fib,
module Fib
def self.fib_cr(n : Int32) : Int32
(1..n-1).reduce([1,1]){|ns|[ns[1],ns[0]+ns[1]]}[1]
end
end
p Fib.fib_cr
ne-sachirou/sample_ruby_extension_in_crystal
Benchmark
同じalgorithmで、fibonacci數列の31番⽬を100万回計算する
def self.fib_rb(n)
ns = [1, 1]
i = 1
while i < n
ns0 = ns[0]
ns[0] = ns[1]
ns[1] = ns0 + ns[1]
i += 1
end
ns[1]
end
ne-sachirou/sample_ruby_extension_in_crystal
Benchmark
同じalgorithmで、fibonacci數列の31番⽬を100万回計算する
C 0.1秒
ne-sachirou/sample_ruby_extension_in_crystal
Benchmark
同じalgorithmで、fibonacci數列の31番⽬を100万回計算する
C 0.1秒
Ruby 3.0秒
ne-sachirou/sample_ruby_extension_in_crystal
Benchmark
同じalgorithmで、fibonacci數列の31番⽬を100万回計算する
C 0.1秒
Ruby 3.0秒
Crystal 0.2秒
ne-sachirou/sample_ruby_extension_in_crystal
macro ruby(name, code)
{{ code }}
{% if code.class_name == "Def" %}
Ruby.ruby_def {{ name }}, {{ code }}
{% elsif code.class_name == "ModuleDef" %}
Ruby.ruby_module_def {{ name }}, {{ code }}
{% end %}
end
LLVMで速いbinaryを作る
⾃動でRubyにmodule/methodを登録する
`rake compile`
ne-sachirou/sample_ruby_extension_in_crystal
gem化をマテ!

More Related Content

What's hot

最近流行りのビルドツールとは
最近流行りのビルドツールとは最近流行りのビルドツールとは
最近流行りのビルドツールとはTakahiro Maki
 
aws chaliceで作るslack翻訳bot
aws chaliceで作るslack翻訳botaws chaliceで作るslack翻訳bot
aws chaliceで作るslack翻訳botuchimanajet7
 
JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発Yoichi Toyota
 
何でRuby
何でRuby何でRuby
何でRubyNgoc Dao
 
scheme処理系の実装
scheme処理系の実装scheme処理系の実装
scheme処理系の実装bobuhiro11
 
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~目黒 のぞみ
 
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbSpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbYoutarou TAKAHASHI
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャ大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャYugo Shimizu
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについてShinobu Okano
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西Shinichi Kozake
 
Simplest API Server "miq"
Simplest API Server "miq"Simplest API Server "miq"
Simplest API Server "miq"Yuki Ito
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてHirata Tomoko
 
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたblackenedgold
 
JAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LTJAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LT三七男 山本
 
MVCフレームワークと戦った話
MVCフレームワークと戦った話MVCフレームワークと戦った話
MVCフレームワークと戦った話SotaRyotaro
 

What's hot (18)

About Reauire.js
About Reauire.jsAbout Reauire.js
About Reauire.js
 
最近流行りのビルドツールとは
最近流行りのビルドツールとは最近流行りのビルドツールとは
最近流行りのビルドツールとは
 
aws chaliceで作るslack翻訳bot
aws chaliceで作るslack翻訳botaws chaliceで作るslack翻訳bot
aws chaliceで作るslack翻訳bot
 
JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発
 
何でRuby
何でRuby何でRuby
何でRuby
 
scheme処理系の実装
scheme処理系の実装scheme処理系の実装
scheme処理系の実装
 
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
【社内勉強会#9】(今更ながら)java8触ってみた~ラムダ式篇~
 
Ruby24
Ruby24Ruby24
Ruby24
 
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbSpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorb
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャ大規模ログ集約実現のためのアーキテクチャ
大規模ログ集約実現のためのアーキテクチャ
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
Simplest API Server "miq"
Simplest API Server "miq"Simplest API Server "miq"
Simplest API Server "miq"
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えて
 
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
 
JAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LTJAWS-UG和歌山第0回キックオフミーティング LT
JAWS-UG和歌山第0回キックオフミーティング LT
 
MVCフレームワークと戦った話
MVCフレームワークと戦った話MVCフレームワークと戦った話
MVCフレームワークと戦った話
 

Viewers also liked

Iphone unity blog app
Iphone unity blog appIphone unity blog app
Iphone unity blog appappsme
 
Finished products
Finished productsFinished products
Finished productsEllie Marsh
 
Energía eléctrica en España
Energía eléctrica en EspañaEnergía eléctrica en España
Energía eléctrica en EspañaPatriMello
 
а. фролов.-посох ред4
а. фролов.-посох ред4а. фролов.-посох ред4
а. фролов.-посох ред4eid1
 
IBM Interconnect: Think you can Out Innovate Open Source
IBM Interconnect: Think you can Out Innovate Open SourceIBM Interconnect: Think you can Out Innovate Open Source
IBM Interconnect: Think you can Out Innovate Open Sourcerhirschfeld
 
өсімдіктер тіршілік әрекетін ғылыми қорытындылау
өсімдіктер тіршілік әрекетін ғылыми қорытындылауөсімдіктер тіршілік әрекетін ғылыми қорытындылау
өсімдіктер тіршілік әрекетін ғылыми қорытындылауoquzaman
 
Software for Consulting Physicians from HospitalSoftwareShop.com
Software for Consulting Physicians from HospitalSoftwareShop.comSoftware for Consulting Physicians from HospitalSoftwareShop.com
Software for Consulting Physicians from HospitalSoftwareShop.comhospitalsoftwareshop
 
Presentación ceip san juan de la cruz
Presentación ceip san juan de la cruzPresentación ceip san juan de la cruz
Presentación ceip san juan de la cruzJuan Galan
 
презентация
презентацияпрезентация
презентацияdou188
 

Viewers also liked (12)

Iphone unity blog app
Iphone unity blog appIphone unity blog app
Iphone unity blog app
 
Finished products
Finished productsFinished products
Finished products
 
Energía eléctrica en España
Energía eléctrica en EspañaEnergía eléctrica en España
Energía eléctrica en España
 
а. фролов.-посох ред4
а. фролов.-посох ред4а. фролов.-посох ред4
а. фролов.-посох ред4
 
Aplicación de un retardo
Aplicación de un retardoAplicación de un retardo
Aplicación de un retardo
 
Environment Energy
Environment EnergyEnvironment Energy
Environment Energy
 
IBM Interconnect: Think you can Out Innovate Open Source
IBM Interconnect: Think you can Out Innovate Open SourceIBM Interconnect: Think you can Out Innovate Open Source
IBM Interconnect: Think you can Out Innovate Open Source
 
өсімдіктер тіршілік әрекетін ғылыми қорытындылау
өсімдіктер тіршілік әрекетін ғылыми қорытындылауөсімдіктер тіршілік әрекетін ғылыми қорытындылау
өсімдіктер тіршілік әрекетін ғылыми қорытындылау
 
Software for Consulting Physicians from HospitalSoftwareShop.com
Software for Consulting Physicians from HospitalSoftwareShop.comSoftware for Consulting Physicians from HospitalSoftwareShop.com
Software for Consulting Physicians from HospitalSoftwareShop.com
 
Presentación ceip san juan de la cruz
Presentación ceip san juan de la cruzPresentación ceip san juan de la cruz
Presentación ceip san juan de la cruz
 
Revolución rusa
Revolución rusaRevolución rusa
Revolución rusa
 
презентация
презентацияпрезентация
презентация
 

Similar to 最速で最速のRuby擴張を作る

Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ107steps
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたいMasato Noguchi
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Koji SHIMADA
 
CloudCore VPS 開発者支援制度
CloudCore VPS 開発者支援制度CloudCore VPS 開発者支援制度
CloudCore VPS 開発者支援制度Koichi Shimozono
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化maruyama097
 
OpenStack Object Storage; Usage
OpenStack Object Storage; UsageOpenStack Object Storage; Usage
OpenStack Object Storage; Usageirix_jp
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Takuya Mukohira
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみたngi group.
 
nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab
 
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料慎平 仁藤
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1Takuya Mukohira
 
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmRedux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmchuck h
 
JavaとRubyのすてきな関係
JavaとRubyのすてきな関係JavaとRubyのすてきな関係
JavaとRubyのすてきな関係garden_tree
 
JavascriptでRubyの作り方
JavascriptでRubyの作り方JavascriptでRubyの作り方
JavascriptでRubyの作り方Shuyo Nakatani
 

Similar to 最速で最速のRuby擴張を作る (20)

Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
 
CloudCore VPS 開発者支援制度
CloudCore VPS 開発者支援制度CloudCore VPS 開発者支援制度
CloudCore VPS 開発者支援制度
 
CSV
CSVCSV
CSV
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化
 
OpenStack Object Storage; Usage
OpenStack Object Storage; UsageOpenStack Object Storage; Usage
OpenStack Object Storage; Usage
 
Leiningen超速入門
Leiningen超速入門Leiningen超速入門
Leiningen超速入門
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slide
 
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
 
リアルビジネスRuby
リアルビジネスRubyリアルビジネスRuby
リアルビジネスRuby
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
Redux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElmRedux, Relay, HorizonあるいはElm
Redux, Relay, HorizonあるいはElm
 
JavaとRubyのすてきな関係
JavaとRubyのすてきな関係JavaとRubyのすてきな関係
JavaとRubyのすてきな関係
 
JavascriptでRubyの作り方
JavascriptでRubyの作り方JavascriptでRubyの作り方
JavascriptでRubyの作り方
 

More from Sachirou Inoue

發言の超越論的な根拠
發言の超越論的な根拠發言の超越論的な根拠
發言の超越論的な根拠Sachirou Inoue
 
人工言語作成を樂しむ者の爲の言語學
人工言語作成を樂しむ者の爲の言語學人工言語作成を樂しむ者の爲の言語學
人工言語作成を樂しむ者の爲の言語學Sachirou Inoue
 
人工言語を作るゆるやかな道
人工言語を作るゆるやかな道人工言語を作るゆるやかな道
人工言語を作るゆるやかな道Sachirou Inoue
 
How to make a spaghetti
How to make a spaghettiHow to make a spaghetti
How to make a spaghettiSachirou Inoue
 
Why we update our oss dependencies.
Why we update our oss dependencies.Why we update our oss dependencies.
Why we update our oss dependencies.Sachirou Inoue
 
勝手に作ったものたち
勝手に作ったものたち勝手に作ったものたち
勝手に作ったものたちSachirou Inoue
 
ElixirでNode.jsを倒す
ElixirでNode.jsを倒すElixirでNode.jsを倒す
ElixirでNode.jsを倒すSachirou Inoue
 
大勢でピンポンできるのは、だれ?
大勢でピンポンできるのは、だれ?大勢でピンポンできるのは、だれ?
大勢でピンポンできるのは、だれ?Sachirou Inoue
 

More from Sachirou Inoue (20)

Elixir on Containers
Elixir on ContainersElixir on Containers
Elixir on Containers
 
發言の超越論的な根拠
發言の超越論的な根拠發言の超越論的な根拠
發言の超越論的な根拠
 
faastCrystal
faastCrystalfaastCrystal
faastCrystal
 
人工言語作成を樂しむ者の爲の言語學
人工言語作成を樂しむ者の爲の言語學人工言語作成を樂しむ者の爲の言語學
人工言語作成を樂しむ者の爲の言語學
 
人工言語を作るゆるやかな道
人工言語を作るゆるやかな道人工言語を作るゆるやかな道
人工言語を作るゆるやかな道
 
FaaStRuby
FaaStRubyFaaStRuby
FaaStRuby
 
DI is for us?
DI is for us?DI is for us?
DI is for us?
 
How to make a spaghetti
How to make a spaghettiHow to make a spaghetti
How to make a spaghetti
 
Why we update our oss dependencies.
Why we update our oss dependencies.Why we update our oss dependencies.
Why we update our oss dependencies.
 
Test like a team.
Test like a team.Test like a team.
Test like a team.
 
Phoenix at scale
Phoenix at scalePhoenix at scale
Phoenix at scale
 
Vivaldi #cd3437
Vivaldi #cd3437Vivaldi #cd3437
Vivaldi #cd3437
 
外傷的Elixir
外傷的Elixir外傷的Elixir
外傷的Elixir
 
勝手に作ったものたち
勝手に作ったものたち勝手に作ったものたち
勝手に作ったものたち
 
竝行
竝行竝行
竝行
 
ActiveHash
ActiveHashActiveHash
ActiveHash
 
boilerplate react
boilerplate reactboilerplate react
boilerplate react
 
ElixirでNode.jsを倒す
ElixirでNode.jsを倒すElixirでNode.jsを倒す
ElixirでNode.jsを倒す
 
大勢でピンポンできるのは、だれ?
大勢でピンポンできるのは、だれ?大勢でピンポンできるのは、だれ?
大勢でピンポンできるのは、だれ?
 
J言語を讃えた
J言語を讃えたJ言語を讃えた
J言語を讃えた
 

最速で最速のRuby擴張を作る