Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
最速で最速のRuby擴張を作る
さっちゃん
March 23, 2017
Programming
1
1.6k
最速で最速のRuby擴張を作る
CrystalでRubyの擴張を書く
https://github.com/ne-sachirou/sample_ruby_extension_in_crystal
さっちゃん
March 23, 2017
Tweet
Share
More Decks by さっちゃん
See All by さっちゃん
名實一致
ne_sachirou
0
470
まかれるあなとみあ ―Mackerel のしくみを理解する 30 分― @ Hatena Engineer Seminar #16
ne_sachirou
0
2.3k
tacit programming : Point-free, Concatenatives & J
ne_sachirou
0
330
Monitoring Containerized Elixir
ne_sachirou
1
520
Let's create stateful systems, by Elixir
ne_sachirou
1
520
Phoenix LiveReact
ne_sachirou
1
280
Phoenix LiveView チュートリアル
ne_sachirou
1
110
DDD: Data Driven Development
ne_sachirou
6
4.4k
Elixir on Containers
ne_sachirou
1
620
Other Decks in Programming
See All in Programming
リアルタイムボイスチェンジャーMMVCとVITSの紹介
stealthinu
0
100
Java初心者が知っておくべきプログラミングのこと - JJUG CCC 2022 Spring
kishida
5
550
BASE BANKチームの技術選定と歴史 / how to decide technology selection for startup
budougumi0617
0
1.1k
Beyond Micro Frontends: Frontend Moduliths for the Enterprise @wad2022
manfredsteyer
PRO
0
130
From Java through Scala to Clojure
lagenorhynque
0
230
CakePHPの内部実装 から理解するPSR-7
boro1234
0
240
#JJUG_CCC 「サポート」は製品開発? - JDBCライブラリ屋さんが実践する攻めのテクニカルサポートとJavaエンジニアのキャリアについて -
cdataj
0
420
Java アプリとAWS の良い関係 - AWS でJava アプリを実行する一番簡単な方法教えます / AWS for Javarista
kanamasa
2
1.3k
I/O Extended 2022 in Android ~ Whats new in Android development tools
pluu
0
560
実践エクストリームプログラミング / Extreme Programming in Practice
enk
1
540
UI Testing of Jetpack Compose Apps, AppDevCon
alexzhukovich
0
170
GoogleI/O2022 LT報告会資料
shinsukefujita1126
0
350
Featured
See All Featured
Building Your Own Lightsaber
phodgson
94
4.6k
Git: the NoSQL Database
bkeepers
PRO
415
59k
Side Projects
sachag
450
37k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
Web development in the modern age
philhawksworth
197
9.3k
Designing the Hi-DPI Web
ddemaree
272
32k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
10
3.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1M
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
11
4.7k
Building an army of robots
kneath
299
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
Transcript
最速で最速の Ruby擴張を作る
.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)
Ruby
Ruby 最速で開發出來る⾔語
None
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化をマテ!