ruby-trunk-changes 2021-05-06

今日は主に mmap() 利用につての判定の変更の続きや標準添付ライブラリ net/imapリファクタリング、標準添付ライブラリ timeout のちょっとした不具合の修正などがありました。

[3d5b6ddff8] Nobuyoshi Nakada 2021-05-05 14:54:36 UTC

M1 チップの macOS で PAGE_SIZE が定数マクロとしてでなく const 変数? として定義されている場合があるみたいで、メモリ確保に mmap() を使うかどうかの判定に PAGE_SIZE を preprocessor の分岐で利用していたのがうまく判定できなくなっていたそうなので configure 時に判定用のプログラムをコンパイルして判定して USE_MMAP_ALIGNED_ALLOC マクロを定義しておくようにしています。

[d2afb03287] git 2021-05-05 15:03:00 UTC

version.h の日付更新

[1921500511] Nobuyoshi Nakada 2021-05-05 15:29:20 UTC

3d5b6ddff8def49e59fb9a9ddd28a653498ae861 の続き。HAVE_MMAP マクロのチェックの条件が削られてしまってたので復活させています。

[23a98237df] Peter Zhu 2021-05-05 16:20:40 UTC

3d5b6ddff8def49e59fb9a9ddd28a653498ae861 の再修正。 PAGE_SIZE が使えるかどうかの判定で使うソースコードにヘッダファイルが足りてなくて判定に失敗する環境があったみたいなので修正しています。ついでに gc.c の preprocessor 分岐も変更してますが、defined(PAGE_SIZE) が復活されてるところがあって、これって -Werror=undef でひっかからないのかな。 defined だからいいのか。

[b655a3fa5b] Peter Zhu 2021-05-05 21:06:56 UTC

23a98237df28ad01d17b163eb650dfbd321b13ba の再修正。やっぱり PAGE_SIZE がマクロで定義されていない場合に sysconf(_SC_PAGE_SIZE) でメモリページサイズを取得して判定に使うようにしています。

[921d8ac99d] Nobuyoshi Nakada 2021-05-06 00:39:47 UTC

23a98237df28ad01d17b163eb650dfbd321b13ba の再修正。 configure で mmap() 利用の判定のためのビルド時に sys/user.h を追加したのが今度は sys/queue.h というヘッダで定義される LIST_HEAD というマクロの再定義の警告が発生してしまってたので macOS では使わないようにしています。

[a1fdc5f71c] Nobuyoshi Nakada 2021-05-06 02:15:24 UTC

3d5b6ddff8def49e59fb9a9ddd28a653498ae86123a98237df28ad01d17b163eb650dfbd321b13ba などの再修正。 configure で PAGE_SIZE が参照できるかの判定のためのプログラムで変数として実際に参照することまではせず、型宣言に使ってみてコンパイル時に参照できる定数かどうかだけ判定するようにしています。なにか違いがあるのかな。

[0dd9ac7721] Nobuyoshi Nakada 2021-05-06 02:38:14 UTC

3d5b6ddff8def49e59fb9a9ddd28a653498ae861 で追加した gc.c での PAGE_MAX_SIZE 定数マクロを使った判定が 23a98237df28ad01d17b163eb650dfbd321b13ba で削除されてたのを復活させています。いろんな環境で動くようにするのまじ大変ですね。

[f941dd5a9f] Nobuyoshi Nakada 2021-05-06 03:09:57 UTC

b655a3fa5b8d1a30565e19425c28a1cfd8631165macOS で PAGE_SIZE が使えない場合に sysconf(_SC_PAGE_SIZE) でメモリページサイズを取得するようにしていましたが、これは元々同じことをしてる箇所があったので Init_heap() の前のほうに移動して結果を変数へ格納しておいて使いまわすようにリファクタリングしています。

[a7f7479872] Takashi Kokubun 2021-05-06 06:13:26 UTC

標準添付ライブラリ erb の rdoc 用コメントの <%# の説明のところに、空白を入れて <% # のようにするとコメントとして扱かわれないという注意書きを追記しています。 [ruby-core:103690] [Bug #17846]

[331005812f] "nicholas a. evans" 2021-04-27 20:33:27 UTC

標準添付ライブラリ net/imap の lib/net/imap.rb から認証関連の実装を lib/net/imap/authenticators/ の配下に分割するリファクタリング

[912f39b2c3] "nicholas a. evans" 2021-04-27 21:49:22 UTC

標準添付ライブラリ net/imap の PLAIN タイプの認証の username, password などに NUL 文字が含まれてたらエラーにするなど規格(RFC4616)に沿ったチェック強化をしています。

[2fc91da86c] "nicholas a. evans" 2021-04-28 21:43:34 UTC

標準添付ライブラリ net/imap の rdoc 用コメントに認証タイプごとに参考 URL を追記しています。

[395a287736] "nicholas a. evans" 2021-05-03 21:07:36 UTC

標準添付ライブラリ net/imap から Net::IMAP::ResponseParser クラスの実装を lib/net/imap/response_parser.rb というファイルに切り出すリファクタリング

[affb51045c] "nicholas a. evans" 2021-05-03 21:13:03 UTC

同じく標準添付ライブラリ net/imap でレスポンスの解析に使う Struct を格納する定数群の定義を lib/net/imap/response_data.rb というファイルに分離するリファクタリング

[4dc7b82427] "nicholas a. evans" 2021-05-03 21:18:43 UTC

標準添付ライブラリ net/imap の Net::IMAP::RawData や Net::IMAP::Atom などのプロトコル上のコンポーネント? に対応するクラスの定義を lib/net/imap/command_data.rb というファイルに分離するリファクタリング

[337c0e312b] "nicholas a. evans" 2021-05-04 18:52:38 UTC

標準添付ライブラリ net/imap の Net::IMAP.encode_utf7 と Net::IMAP.decode_utf7 の実装を lib/net/imap/data_encoding.rb というファイルに分離するリファクタリング

[deae61e939] "nicholas a. evans" 2021-05-04 19:33:21 UTC

標準添付ライブラリ net/imapプロトコルのフラグに対応する定数の定義を lib/net/imap/flags.rb というファイルに分離するリファクタリング

[b0de2e7fe9] "nicholas a. evans" 2021-05-05 17:15:52 UTC

標準添付ライブラリ net/imap の Net::IMAP#validata_data と Net::IMAP#send_xxx_data といった名称のメソッド群の定義を lib/net/imap/command_data.rb に移動しています。

[5a02281fab] "nicholas a. evans" 2021-05-05 19:01:35 UTC

標準添付ライブラリ net/imap の rdoc 用コメントの追加や参照リンクの追記など。

[5de6f1ab47] Hiroshi SHIBATA 2021-05-06 05:16:41 UTC

標準添付ライブラリ net/imap の gemspec ファイルを lib/net/ の下から lib/net/imap/ の下に配置するように変更して、tool/sync_default_gems.rb の同期処理もこれに追随するようにしています。

[965719f5eb] Hiroshi SHIBATA 2021-05-06 06:24:49 UTC

標準添付ライブラリ net/imap の gemspec ファイルでバージョンを取得するためのファイルを探索する時に遡るディレクトリ数を1つ増やしています。 ruby リポジトリ上でのファイル配置に対応するためですね。

[364044e090] Kazuki Yamaguchi 2021-04-29 12:35:57 UTC

標準添付ライブラリ net/http で拡張ライブラリ stringio を require していたのがもう不要になっているということで削っています。

[822eb94563] Hiroshi SHIBATA 2021-04-14 03:15:25 UTC

標準添付ライブラリ strscan の gemspec ファイルで add_development_dependency を使ってたのを削っています。 Gemfile に書くのがいまどきということですね。またテストで skip を使ってたところを pend に変更しています。

[564ccd095a] Kenichi Kamiya 2021-03-31 05:56:28 UTC

標準添付ライブラリ strscan の StringScanner#charpos で byteslice メソッドを呼び出した後に戻り値をチェックせずに rb_str_length() に渡してて SEGV する可能性があった不具合を修正しています。 [ruby-core:103064] [Bug #17756]

[a42b7de436] Gannon McGibbon 2021-01-21 01:39:21 UTC

拡張ライブラリ strscan の rdoc 用コメントの iff を "if and only if" に変更しています。

[33b5e179a8] Jeremy Evans 2021-04-20 17:34:11 UTC

標準添付ライブラリ timeout が定義する例外クラス Timeout::Error の exception メソッドが super を呼び出してなかったので、raise に例外クラスのオブジェクトを渡しつつ第2引数でメッセージを上書きするように渡す(第1引数がクラスじゃなくても第2引数でメッセージが渡せたんだ、知らなかった)という使いかたをした時に他の例外と挙動が変わるのを修正しています。 [ruby-core:103502] [Bug #17812]

[44e8575ca6] Jeremy Evans 2021-05-03 15:31:59 UTC

標準添付ライブラリ timeout でデフォルトで例外クラスを指定せず対象の Thread 内で throw-catch を使った大域脱出(タイムアウト時の大域脱出を rescue で捕捉させないようにするため)のタグに使うオブエクトの生成を抑制して、例外オブジェクト自身をタグとして使うようにしています。まあ Object.new も ObjectSpace で無理矢理取り出せば catch できてしまうし、対象 Thread 内で普通にその例外オブジェクトは見えないと思うので変わりないか。

[120b835fae] Jeremy Evans 2021-05-03 15:38:54 UTC

標準添付ライブラリ timeout の blocking fiber 対応のために Fiber.current_scheduler を呼び出してるところで、古い ruby 対応のため respond_to? でチェックしてから呼び出すようにしています。

[f2d6fa16e1] Hiroshi SHIBATA 2021-05-06 08:19:41 UTC

標準添付ライブラリ prime のテストでコメントアウトされていた Ractor を使うテストを assert_ractor を利用して子プロセスで実行するようにしてコメントアウトをはずしています。