ruby-trunk-changes r55784 - r55789

今日は Object#clone の keyword 引数 freeze の追加や struct RStruct を非公開にする変更などがありました。

hsbt: r55784 2016-08-01 12:16:30 +0900

拡張ライブラリ json のバージョンを 2.0.1 から 2.0.2 に更新しています。 ASCII-8BIT のエンコーディングの freeze された文字列から parse する時の不具合修正が含まれています。

svn: r55785 2016-08-01 12:16:31 +0900

version.h の日付更新。

shyouhei: r55786 2016-08-01 14:55:35 +0900

Object#clone に keyword 引数 freeze を追加して、これに false を指定すると元のオブジェクトが freeze されていても freeze されていないコピーを返すようにしています(省略時は true なので、元の挙動と同じくコピー元が freeze されていたら freeze されたコピーを返す)。 オブジェクトは freeze すると「解凍」することができませんが、clone(freeze: false) を呼ぶことでコピーではありますが(clone なので singleton class もコピーされるというのがミソらしい)解凍したものを作れるようにするのが目的のようです。 [ruby-core:75017] [Feature #12300]

svn: r55787 2016-08-01 14:55:36 +0900

r55786 の行末の空白除去。

shyouhei: r55788 2016-08-01 16:23:56 +0900

struct RStruct という構造体および関連するマクロ類の定義を include/ruby/ruby.h から internal.h に移動して外部の拡張ライブラリから直接中身が見えない opaque な構造体にして RSTRUCT_LEN(), RSTRUCT_GET(), RSTRUCT_SET() といったマクロから関数呼び出しを使って中身にアクセスさせるようにしています。 [ruby-core:62982] [Feature #9916]

nobu: r55789 2016-08-01 21:39:54 +0900

ext/extmk.rb で .ext/gems というディレクトリの下に bundled gem を展開して拡張ライブラリをビルドできるようにルールを追加させているみたいです。実際 make してみると .ext/gems というディレクトリはできるものの、まだ bundled gems に拡張ライブラリを含むものはなくて空っぽみたいです。 openssl.gem を bundle する布石かな。