まつもと ゆきひろです

In message "[ruby-dev:23997] Re: String#each -> String#each_char"
    on 04/07/30, "U.Nakamura" <usa / garbagecollect.jp> writes:

|むしろ、今のM17Nにある、各コードポイントをブロックに渡してく
|るString#each_charではなくて、文字列中の各「1文字」をRubyの文
|字列として渡してくるメソッドを作成してそれをeach_charと呼ぶと
|いうのはどうでしょうか?

あ、言うのを忘れましたが、1.9で取り込まれるM17Nはruby_m17nと
いくつか違いが出る予定です。

  * _charというメソッドはなくなる。既に述べた理由で「char」
    という単語を避けたいから。別の単語募集中。決まらなくて結
    局charになったりして。

  * 文字はコードポイントを示す整数からコードポイントをエンコー
    ドしたバイト列を含む文字列を返す。

  * 先頭1バイトでマルチバイト文字列の長さが分かると言う仮定
    の除去

というわけで、1.9では"あいうえお"[1]は"い"を返します。

|あんまりM17Nについてわかってないので勝手なことを言っています
|が、それじゃいろいろ問題があるから今のString#each_charのよう
|になってるのでしょうか。
|# そうだろうなあ...

いえいえ、問題があったわけではなく、今までの延長線上という発
想からの単なる設計上の判断でした。が、長年考えるうちに文字列
のほうがいいと思うようになったので変更します。

                           -----

ところで、1.9にM17Nを入れると今までの1.9とは非互換になります。
この時点での1.9に未練がある人もいるかもしれませんので、もし
かしたら、今までのを1.9.0、M17N入りのを1.9.1としてブランチを
切ることが望ましいと思う人もいるかもしれません。

以前、x.0が開発版でx.1以降が安定版というバージョン付けのやり
方を提案しましたが、1.9は元々2.0へのテストということで、この
バージョンだけ特別に「大きな非互換性を導入するたびにバージョ
ンをあげる」というやり方の方が望ましいかもしれません。2.0以
降のバージョン付けについては変更なしです(ただし、いつになる
やら)。

とはいえ、1.8系に加えて1.9.0と1.9.1の両方をメンテするのは避
けたいのですが....。

意見を聴かせてください。

                                まつもと ゆきひろ /:|)