Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

Slide 3

Slide 3 text

Ruby

Slide 4

Slide 4 text

Ruby 最速で開發出來る⾔語

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Crystal

Slide 7

Slide 7 text

Crystal LLVMでcompile出來るRuby-likeな⾔語

Slide 8

Slide 8 text

Crystal LLVMでcompile出來るRuby-likeな⾔語 Ruby-likeなsyntax 型推論 macroによるDSL Cのlibをそのまま使へる → 最速の開發

Slide 9

Slide 9 text

Crystal LLVMでcompile出來るRuby-likeな⾔語 型による最適化 LLVMによる最適化 macroによるcompile時計算 Cのlibをover head無く使へる → 最速の實⾏

Slide 10

Slide 10 text

Rubyの實⾏速度が遅い

Slide 11

Slide 11 text

Rubyの實⾏速度が遅い ↓ Cで擴張を作る

Slide 12

Slide 12 text

Rubyの實⾏速度が遅い ↓ Cで擴張を作る ↓ 實⾏速度は速く成ったが 開發速度が遅く成った

Slide 13

Slide 13 text

Rubyのeco systemに頼りながら 開發速度を落とさず 遲い部分をCrystalで速く出來ないだらうか

Slide 14

Slide 14 text

既存の試み manastech/crystal_ruby 頑張る前に放棄されてゐる 全然使へない 動かない phoffer/crystalized_ruby 頑張った跡 rb_define_module_function等を⼿動で呼ばなければならない もう動かない

Slide 15

Slide 15 text

♥ Ruby meets Crystal ♥ ne-sachirou/sample_ruby_extension_in_crystal

Slide 16

Slide 16 text

ne-sachirou/sample_ruby_extension_in_crystal ruby hello_cr, def hello_cr : Nil puts "Hello, World!” end hello_cr

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

ne-sachirou/sample_ruby_extension_in_crystal Benchmark 同じalgorithmで、fibonacci數列の31番⽬を100万回計算する C 0.1秒

Slide 20

Slide 20 text

ne-sachirou/sample_ruby_extension_in_crystal Benchmark 同じalgorithmで、fibonacci數列の31番⽬を100万回計算する C 0.1秒 Ruby 3.0秒

Slide 21

Slide 21 text

ne-sachirou/sample_ruby_extension_in_crystal Benchmark 同じalgorithmで、fibonacci數列の31番⽬を100万回計算する C 0.1秒 Ruby 3.0秒 Crystal 0.2秒

Slide 22

Slide 22 text

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`

Slide 23

Slide 23 text

ne-sachirou/sample_ruby_extension_in_crystal gem化をマテ!