動かないというか依存している kgio と raindrops がビルドエラーでインストールできない。
https://bugs.ruby-lang.org/issues/19057#change-103779
上記の issue にある通り、rb_io_t
を変えたことによる影響で対応するパッチ自体はあるものの、unicorn 含めて kgio も raindrops も開発は活発ではない、という状況なので、パッチを取り込んだものがリリースされるかは怪しい。というか無いんじゃないかなあ。
なので、unicorn を使ってる人は
の組み合わせにするか kgio の依存がない fork バージョンの pitchfork を使いつつ
のいずれかにすることになるだろうけど、個人的には unicorn が動かないというのは致命的なので Ruby 本体の方の変更を諦める、が良い気はする。どうかなあ。
毎朝、起きてすぐに ruby をビルドして rbenv global
に設定しているんだけど、unicorn の話を調べようと思ったら何をやっても [BUG] Illegal instruction
で落ちてしまって、スタックトレースをみたら optparse で落ちていて、ただの ruby スクリプトで落ちるわけがないでしょ、とよくよく見たら YJIT ではなくて RJIT になっていたのが原因だった。RJIT は x86 のみの対応なので、macOS で動かないのはそれはそう。
で、なんでビルドオプションを変えたわけでもないのに YJIT が無効になってんの?と調べたら、nobu が入れた llvm-objcopy
を使った処理が通らなくて YJIT が無効となっていたのが原因だった。llvm-objcopy は MacPorts なら PATH に通るけど、homebrew だと llvm を入れた上で PATH は自分で通さないと行けないというやつなのでとりあえず revert しておいた。
https://github.com/ruby/ruby/commit/a642a94b68a31c0e7c092087114c269132cdb159
Xcode Command Line Tools は llvm 関連の toolchains は微妙に含まれているものと含まれていないものがバラバラなので難しい。
ついでに rbenv を使ってる時にいい感じに JIT オプションを追加する rbenv-jit の方も macOS の時は --yjit
にするように直しておいた。
https://github.com/hsbt/rbenv-jit/commit/10e63e6a3f3ba1c66aa38bbabdb0a06d4c567b74
なお、このコードはコメントを書いたあとに全部 copilot が書いた。便利。