ruby-trunk-changes r67438 - r67446

今日は Unicode 12.1.0 の beta を取り込む(新年号の文字分割対応)や、メソッド定義を行う VM 命令の復活などがありました。

nobu: r67438 2019-04-04 21:11:53 +0900

common.mk の lib/unicode_normalize/tables.rb の生成ルールを変更して timestamp ファイルに依存せず更新するようにしている? コードもコメントもちょっとよく読み解けませんでした。

duerst: r67439 2019-04-05 08:40:48 +0900

template/unicode_norm_gen.tmpl で生成する lib/unicode_normalize/tables.rb の文字列毎に改行するようにして、差分がわかりやすくなるようにしています。で実際に lib/unicode_normalize/tables.rb を生成しなおしています。

svn: r67440 2019-04-05 08:40:51 +0900

version.h の日付更新。

duerst: r67441 2019-04-05 09:58:51 +0900

Unicode 12.1.0 の beta を取り込んで enc/unicode/12.1.0/ 配下のヘッダファイルを作成、lib/unicode_normalize/tables.rb を更新しています。いわゆる日本の新年号対応ですね。Unicode の予約済みの新年号の文字("\u32FF")を split した時に "\u4EE4\u548C" の2文字(令和)になるようにしています。 12.1.0 はまだ beta なのですが、正式リリースが 5月7日を予定されていて、それを待ってると年号変わっちゃうし変更点は限定的なので先に取り込んでしまおう、という感じです。 [ruby-core:89260] [Feature #15195]

ko1: r67442 2019-04-05 17:15:11 +0900

かつて YARV と呼ばれていた 1.9 からの Ruby VM の命令にはメソッド定義のための definemethod と definesmethod(三単現のs じゃなくて singleton method の略で define + smethod ですね)という命令があったのですが、今は内部的な FrozenCore というオブジェクトの特異メソッドとして実装されていて、メソッド定義はメソッド呼び出しで行なわれるという感じになっています。これは stack caching などの VM 最適化の手法を使うために VM 命令の数を小さく保とうという動機があったためとのことなのですが、今はもうそういう手法は採用しなさそうで、逆にメソッド定義が VM 命令になっていないために最適化が難しいというのもあってこれらの VM 命令を復活させています。逆にメソッド定義のためのメソッドに ISeq を渡すための命令 putiseq は消しています。
個人的に stack caching は Ruby の実装を読む勉強会で YARV の最適化を読む時の題材にしたので懐しいですね。

svn: r67443 2019-04-05 17:15:21 +0900

r67442 のインデントのタブを空白に展開。

ko1: r67444 2019-04-05 17:41:04 +0900

rb_add_method() という関数は rb_method_entry_t * を返してましたが、どこでも戻り値を使ってないので void に変更しています。

duerst: r67445 2019-04-05 19:39:01 +0900

AppVeyor でのビルドで Unicode のデータファイルダウンロードがうまく働いていないようなので tool/donwloader.rb でデバッグ用のメッセージ出力をいくつか追加しています。

svn: r67446 2019-04-05 19:39:02 +0900

r67445 の行末の空白除去。