トップ «前の日記(2023/07/06 (木) ) 最新 次の日記(2023/07/08 (土) )» 編集 RSS feed

HsbtDiary


2023/07/07 (金) [長年日記]

Ruby 3.3 では Unicorn が動かない

動かないというか依存している kgio と raindrops がビルドエラーでインストールできない。

https://bugs.ruby-lang.org/issues/19057#change-103779

上記の issue にある通り、rb_io_t を変えたことによる影響で対応するパッチ自体はあるものの、unicorn 含めて kgio も raindrops も開発は活発ではない、という状況なので、パッチを取り込んだものがリリースされるかは怪しい。というか無いんじゃないかなあ。

なので、unicorn を使ってる人は

の組み合わせにするか kgio の依存がない fork バージョンの pitchfork を使いつつ

のいずれかにすることになるだろうけど、個人的には unicorn が動かないというのは致命的なので Ruby 本体の方の変更を諦める、が良い気はする。どうかなあ。

master で YJIT を有効にできなかったので調べていた

毎朝、起きてすぐに 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 が書いた。便利。