@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Ractorを試す 改訂版

macOShttps://github.com/ko1/ruby/tree/ractorソースコードをビルドする方法を改善しました。

インストール先

コンパイルしたRubyをmake installしたら「PCの環境が壊れるかも」とビビっていたところ、 id:hanachin さんに ./configure --prefix="$HOME/.rbenv/versions/ractor" するとrbenvの1実行環境として扱えると教えてもらいました。

OpenSSL

makeのログを見てたら、次のようなエラーも出ていました。

*** Following extensions are not compiled:
openssl:
    Could not be configured. It will not be installed.
    /Users/shigerunakajima/ractor/ext/openssl/extconf.rb:99: OpenSSL library could not be found. You might want to use --with-openssl-dir=<dir> option to specify the prefix where OpenSSL is installed.
    Check ext/openssl/mkmf.log for more details.
*** Fix the problems, then remove these directories and try again if you want.

--with-openssl-dir=/usr/local/opt/openssl@1.1/オプションをつけて、HomebrewでインストールしたOpenSSLのディレクトリを指定します。

完成形

CFLAGS=-Wno-error=shorten-64-to-32 ./configure --prefix="$HOME/.rbenv/versions/ractor" --with-openssl-dir=/usr/local/opt/openssl@1.1/
make
make install

まだ、次のようなエラーが表示されます。

installing bundled gems:            /Users/shigerunakajima/.rbenv/versions/ractor/lib/ruby/gems/2.8.0
Traceback (most recent call last):
    6: from ./tool/rbinstall.rb:957:in `<main>'
    5: from ./tool/rbinstall.rb:957:in `each'
    4: from ./tool/rbinstall.rb:960:in `block in <main>'
    3: from ./tool/rbinstall.rb:889:in `block in <main>'
    2: from ./tool/rbinstall.rb:889:in `foreach'
    1: from ./tool/rbinstall.rb:894:in `block (2 levels) in <main>'
./tool/rbinstall.rb:818:in `load_gemspec': [/Users/shigerunakajima/ractor/.bundle/gems/minitest-5.14.0/minitest.gemspec] isn't a Gem::Specification (NilClass instead). (TypeError)
make: *** [do-install-all] Error 1

Rubyコマンドのインストールはできているみたいです。

~ ls ~/.rbenv/versions/ractor/bin/ruby
/Users/shigerunakajima/.rbenv/versions/ractor/bin/ruby*

プログラムの実行だけなら、minitestはなくてもよさそうなので、先に進みます。

動作確認

システムのRubyではRactorを使ったRubyスクリプトの実行に失敗します。

~ ruby --version
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18]
~ ruby sum_1_to_10.rb
Traceback (most recent call last):
sum_1_to_10.rb:2:in `<main>': uninitialized constant Ractor (NameError)

ractor版を使うと実行できました。

~ rbenv shell ractor
~ ruby --version
ruby 2.8.0dev (2020-04-08T16:31:17Z ractor 2658fc668d) [x86_64-darwin18]
~ ruby sum_1_to_10.rb
55