ruby-trunk-changes r42761 - r42781

今日も新機能や仕様変更がいろいろありました。まず Bignum に GMP を使う実装の修正と文字列メソッドにも GMP を使うようになりました。また文字列リテラルに "str"f のように f を後置することで freeze された状態の文字列を得ることができるようになる文法の拡張がありました。それから Numeric#step の引数の仕様変更がありました。

akr:r42761 2013-09-01 22:38:49 +0900

Bignum の乗算に GMP を使う時に mpz_inits() や mpz_clears() のかわりに個別に mpz_init() や mpz_clear() を使うようにしています。古いバージョンの GMP で複数引数を受け取るバージョンの関数がなかったため。

akr:r42762 2013-09-01 23:34:53 +0900

bignum.c で Bignum の文字列化にも GMP を使うようにする変更です。 big2str_gmp() という関数を追加して、ワード数が大きい数はこれを使うようにしています。

akr:r42763 2013-09-02 00:09:06 +0900

Mac OS Xmach_timebaseinfo() を呼び出す処理を関数に切り出しています。また Process.clock_getres の clock_id に :MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC をサポートするように追加しています。

svn:r42764 2013-09-02 00:09:12 +0900

version.h の日付更新。

akr:r42765 2013-09-02 01:06:20 +0900

r42762 で GMP が利用できない時に NotImplementedError を発生させるようにするマクロの定義の名前を間違えていたのを修正。

akr:r42766 2013-09-02 01:47:20 +0900

big2str_generic() および big2str_gmp() で BDIGIT の配列は引数で渡す必要がなく、x から取り出せるので引数から削除しています。

akr:r42767 2013-09-02 07:04:35 +0900

GMP が利用可能な時に Bignum::GMP_VERSION という定数でリンクしている GMP のバージョンを取得できるようにしています。

akr:r42768 2013-09-02 12:29:16 +0900

Bignum#to_s の処理中の割り込みについてのテストで GMP 版の時はまだ割り込みに対応していないのでそのテストを skip するようにしています。

charliesome:r42769 2013-09-02 14:08:20 +0900

rake と rss のテストで文字列リテラルの直後に end や if などの予約語を空白をあけずに書いていたところに空白文字を入れるように修正しています。これは文字列リテラルに "string"f のように正規表現のオプションのように suffix でオプションを指定できるようにする仕様の追加のために使えなくなる文法を回避するようにしているのだと思います。

mrkn:r42770 2013-09-02 14:16:39 +0900

NEWS の有理数リテラル(1.0r)や複素数リテラル(1i)についての記述に r や i を 整数リテラル浮動小数点数リテラルの suffix であるという表現にしています。

knu:r42771 2013-09-02 14:42:02 +0900

Process.setproctitle と Process.argv0 の rdoc に追加されたバージョンや、この機能がサポートされないプラットフォームでも NotImplementedError が発生するのではなく単に何もしないことを追加しています。 このコミットはドキュメントの変更のみなので [DOC] タグつきですね。

knu:r42772 2013-09-02 14:48:36 +0900

r42771 の ChangeLog エントリに [DOC] タグを追加しています。

charliesome:r42773 2013-09-02 16:11:41 +0900

"string"f のように文字列リテラルの後に "f" オプションをつけることで freeze された状態の文字列を返す文字列リテラルを書けるようにしています。 [ruby-core:55699] [Feature #8579]

nobu:r42775 2013-09-02 17:53:40 +0900

r42773 で内部的に String#b メソッドを呼び出しているところがありましたが、String#b は dup + force_encoding 相当で文字列オブジェクトのコピーを生成するので、直接 force_encoding を呼ぶように変更しています。

akr:r42776 2013-09-02 22:52:05 +0900

bignum.c の rb_cstr_to_inum() からいくつかの処理を str2big_poweroftwo()、str2big_normal()、str2big_karatsuba() などの関数として切り出すリファクタリング

akr:r42777 2013-09-02 22:56:23 +0900

bignum.c の未使用となっていた ISDIGIT() マクロを削除しています。

nobu:r42778 2013-09-02 23:33:56 +0900

r42773 で追加した frozen 文字列リテラルのテストで同じ assertion が重複していたのでひとつ削除しています。

nobu:r42779 2013-09-02 23:46:25 +0900

同じく r42773 の文字列リテラルの変更で文字列リテラルに空白をあけずに予約語が続いた時に SyntaxError にならないように、有効なオプションの文字以外が suffix として現れたら suffix 扱いをやめるようにしています。現状は f から始まる予約語は for と false くらいで、後置の for というのはないので "foo"f については問題になることはなさそうですね。今後オプションになる文字が増えると衝突しそうですけど。

nobu:r42780 2013-09-02 23:56:03 +0900

r42773 の文字列リテラルの suffix 対応のテストで文字列リテラル同士の連結のテストで前の文字列が f つきのテストだけあったので、後ろの文字列リテラルに f が付いているケースも追加しています。

knu:r42781 2013-09-02 23:56:06 +0900

Numeric#step メソッドの必須だった引数 limit を省略可能にしてデフォルトは無限大にしています。また :by と :to という名前つき引数を追加して、上限と増加量の必要なほうだけ指定できるようになっています。これで無限に増加している無限数列を簡単に書けるようになりました。 [ruby-dev:47662] [Feature #8838] [ruby-dev:42194]
これも先日の開発者会議で採用されたようですね。