ruby-trunk-changes 2022-09-05

今日は主に MJIT の実装を ruby 実装+libclang による C binding に移行する変更や cross compiling 向けビルドプロセスの修正の続きなどがありました。

[76664905a5] Nobuyoshi Nakada 2022-09-04 14:49:56 UTC

common.mk の fake.rb のルールで $(arch) が "noarch" だった時にルールを無視させるようにしています。 2767cb282531be10c6393d3d7c48fcdd2935ca4d で tool/make-snapthot で noarch-fake.rb というファイルを作成するようにしたことの対応のようです。

[e83183b498] git 2022-09-04 15:00:20 UTC

version.h の日付更新

[51291ade70] Nobuyoshi Nakada 2022-09-04 15:16:47 UTC

file.c の rb_utimensat() の定義の前後に RBIMPL_WARNING_PUSH()/RBIMPL_WARNING_POP() のマクロで局所的に警告を抑制するようにしているところでセミコロンが不要だったので削除しています。

[f6d569b7c0] Takashi Kokubun 2022-09-05 01:21:56 UTC

MJIT で mjit worker のために fork する時に rb_fork() を直接つかわずに rb_mjit_fork() という関数を定義してこれを使うようにして disable_child_handler_before_fork() や before_fork_ruby() などの fork 前後に必要な処理の呼び出しを追加しています。

[68a092a469] Nobuyoshi Nakada 2022-09-05 02:00:20 UTC

template/fake.rb.in で fake.rb 生成する時の処理の変更ですが、そもそもここで何しているかよくわかってないので難しいですね……。

[85a483169f] Nobuyoshi Nakada 2022-09-05 02:09:24 UTC

tool/make-snapshot で 2767cb282531be10c6393d3d7c48fcdd2935ca4d で作るようにした noarch-fake.rb を空ファイルでなく require_relative 'cross' というのを書いておくようにしています。 cross.rb なんて作られるっけ? cross compiling の時だけかな?

[1420333455] Nobuyoshi Nakada 2022-09-05 02:25:42 UTC

68a092a4691efc8aba9a8ae7b27c2ad51c840bf9 の template/fake.rb.in の変更の再修正。 RUBY_DESCRIPTION_WITH_{MJIT,YJIT} の設定のデフォルトを version.h の RUBY_DESCRIPTION の定義を使うようにしているみたいです。

[f7cf641469] David Rodríguez 2022-05-09 08:40:23 UTC

bundler の platform の musl 環境対応の修正。

[45fe7f7575] Mike Dalessio 2022-09-03 17:30:07 UTC

bundler の bundle add サブコマンドに --path オプションを追加して Gemfile に gem を直接ローカルのファイルパス指定で追加できるようにしています。

[4d469472e2] Nobuyoshi Nakada 2022-09-05 04:08:23 UTC

68a092a4691efc8aba9a8ae7b27c2ad51c840bf91420333455ba335f46887ee7a06c4ee95faa37ad の template/fake.rb.in の変更や 85a483169f8381bec08ff2c9a9fc66167fc8a84a の tool/make-snapshot の再々修正。というかデバッグのため tool/make-snapshot で cross.rb の内容を警告メッセージにダンプするようにしています。

[277498e2a2] Takashi Kokubun 2022-09-05 04:44:52 UTC

f7cf641469161c3770b58f79e08e312512212aa8 の bundler の musl 環境向け再修正でテストが失敗しはじめたとのことで nil チェックを追加して回避しています。

[3767c6a90d] Takashi Kokubun 2022-09-05 04:53:46 UTC

MJIT の worker の実装を組み込みメソッドの ruby 実装の機構を使って ruby スクリプトとして実装するようにしています。しかしそこから呼ぶ C の実装は組み込みメソッド定義用の ruby 側で用意した機構ではなくて libclang と ffi-clang というライブラリを利用して独自に呼んでいるみたいです。これにより自動生成する C の VM コードから MJIT 関連の実装が削除されています。まあなんか独自に頑張るより既存の仕組みにのっかったほうがメンテナンス性などでいいよねってことですかね。 https://github.com/ruby/ruby/pull/6028

[3eca1e438d] Hiroshi SHIBATA 2022-09-05 00:15:30 UTC

bundler に upstream から最新版? をマージしています。

[967fe334bb] Takashi Kokubun 2022-09-05 06:22:51 UTC

3767c6a90d8970f9b39e9ed116a7b9bbac3f9f26 の MJIT の実装の変更の ruby 実装から C の型の定義を取り込む時に s390x も 64bit 環境の定義を使うように修正しています。

[d77c037a16] Takashi Kokubun 2022-09-05 06:25:26 UTC

3767c6a90d8970f9b39e9ed116a7b9bbac3f9f26 および 967fe334bb7f503788816df475970b8b0c3ffb3e の再修正で MJIT の実装で 64bit 環境かどうかの判定を RUBY_PLATFORM でルールベースで判定するのではなくて fiddle を使って直接的に判定するようにしています。

[c2986f7d28] Takashi Kokubun 2022-09-05 07:26:24 UTC

3767c6a90d8970f9b39e9ed116a7b9bbac3f9f26 で MJIT の実装を ruby 実装に変更した時に追加された ruby スクリプトのテンプレート tool/ruby_vm/views/mjit_instruction.rb.erb でメソッドの第1引数に * がついてるのが警告になるので明示的な引数のかっこを追加しています。

[06eb9af8c0] Takashi Kokubun 2022-09-05 08:06:37 UTC

make mjit-bindgen という make ターゲットを追加して tool/mjit/bindgen.rb を実行して C の関数呼び出しのためのスクリプト生成するようにしています。また GitHub Actions の workflow を新たに追加して make mjit-bindgen を実行するようにしています。 https://github.com/ruby/ruby/pull/6327

[cb26917d1c] Takashi Kokubun 2022-09-05 08:17:12 UTC

configure で MJIT のサポート外とするプラットフォームに Solaris を追加しています。

[fb769aaa14] Takashi Kokubun 2022-09-05 06:12:37 UTC

doc/mjit/mjit.md を削除して doc/mjit.md に移動しビルド方法などを追記しています。

[915cbdb226] Takashi Kokubun 2022-09-05 09:02:13 UTC

Solaris に続き s390x でも MJIT をサポートしないようにしています。

[113581d288] Hiroshi SHIBATA 2022-09-05 10:05:23 UTC

標準添付ライブラリ set の gemspec ファイルの version を 1.0.3.dev に更新しています。

[4331d4bbf0] git 2022-09-05 10:06:58 UTC

NEWS の default gems のバージョンリストにも set を追加しています。

[a8a7c9d05d] Nobuyoshi Nakada 2022-09-05 09:21:29 UTC

doc/regexp.rdoc の \K についてのドキュメントに後読みを使った時との共通点だけでなく差異(マッチ位置の offset がどこになるか)についても追記しています。 [ruby-core:99580] [Bug #17120]