Rubyspeed - RubyをC言語に変換して高速実行
Ruby3がついにこの冬(12月25日)にリリースされます。3倍速くなる、なんて噂もありますがどうなるでしょうか。Rubyに速度を求めすぎるのは間違っている気がしなくもないですが、個人的に好きな言語だけに期待してしまいます。 そんな中、速度も求める方に試して欲しいのがRubyspeedです。RubyのコードをC言語に変換して実行します。
Rubyspeedの使い方
rubyspeedのテストコード例です。
$ cat test/rubyspeed/c_test.rb
# frozen_string_literal: true
require 'minitest/autorun'
require_relative '../../lib/rubyspeed'
class RubyspeedTestC < Minitest::Test
TESTS = []
def example_add(x)
x + 1
end
TESTS.push(name: :example_add, args: [1], arg_types: [Rubyspeed::T.int], return_type: Rubyspeed::T.int)
def example_branch(flag, x)
if flag > 10
x
elsif flag > 5
x + 1
else
0
end
end
TESTS.push({name: :example_branch, args: [10, 10], arg_types: [Rubyspeed::T.int, Rubyspeed::T.int], return_type: Rubyspeed::T.int})
:
end
実行したところです。Rubyspeedのコードは約4倍高速になっています。
$ rake bench
user system total real
compiled 0.000016 0.000001 0.000017 ( 0.000014)
ruby 0.000064 0.000002 0.000066 ( 0.000063)
RubyspeedはRubyに型も持たせるSorbetのランタイムにインスパイアされており、RubyのコードをS式に展開した上でC言語にしてコンパイルしています。Rubyの柔軟さをC言語で再現するのは困難な部分もあるはずで、すべてに適用される訳ではないでしょう。しかしついつい期待してしまうソフトウェアです。
RubyspeedはRuby製のソフトウェア(ソースコードは公開されていますがライセンスは明記されていません)です。