[#11131] Re: SIGINT on windows — Daisuke Aoki <dai@...>

青木です。

36 messages 2000/10/04
[#11217] Re: SIGINT on windows — Daisuke Aoki <dai@...> 2000/10/14

青木です。

[#11250] Re: SIGINT on windows — Daisuke Aoki <dai@...> 2000/10/16

青木です。

[#11258] Re: SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/10/17

なかだです。

[#11298] Re: SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/10/27

なかだです。

[#11183] EPOC32 and Ruby 1.7 — WATANABE Hirofumi <eban@...>

わたなべです.

44 messages 2000/10/12
[#11188] Re: EPOC32 and Ruby 1.7 — matz@... (Yukihiro Matsumoto) 2000/10/12

まつもと ゆきひろです

[#11191] ruby-bugs-ja PR#20 — Kazuhiro NISHIYAMA <zn@...> 2000/10/12

On Fri, 13 Oct 2000 00:17:14 +0900

[#11205] Re: ruby-bugs-ja PR#20 — Kazuhiro NISHIYAMA <zn@...> 2000/10/13

同じ問題を短いスクリプトで再現できました。

[#11210] Re: Thread.new with irb (PR#20) — matz@... (Yukihiro Matsumoto) 2000/10/13

まつもと ゆきひろです

[#11211] Re: Thread.new with irb (PR#20) — Kazuhiro NISHIYAMA <zn@...> 2000/10/13

On Sat, 14 Oct 2000 03:41:18 +0900

[#11221] Re: Thread.new with irb (PR#20) — Kazuhiro NISHIYAMA <zn@...> 2000/10/14

[ruby-dev:11205]と同じスクリプトで-dをつけていると

[#11306] Ruby I18N — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

130 messages 2000/10/28
[#11307] Re: Ruby I18N — " たけ (tk)" <ggb03124@...> 2000/10/28

たけ(tk)です。

[#11310] Re: Ruby I18N — kenn@... 2000/10/29

長沢です。

[#11314] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/10/29

まつもと ゆきひろです

[#11315] Re: Ruby I18N — Shugo Maeda <shugo@...> 2000/10/30

前田です。

[#11324] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/10/30

高橋征義です。

[#11337] Re: Ruby I18N — Yasushi Shoji <yashi@...> 2000/10/30

At Mon, 30 Oct 2000 13:15:23 +0900,

[#11346] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/10/31

某2ちゃんねるで自分の名前を見つけてびびった高橋征義です。

[#11347] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/10/31

まつもと ゆきひろです

[#11370] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/11/02

高橋征義です。

[#11372] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/02

まつもと ゆきひろです

[#11375] Re: Ruby I18N — TAKAHASHI Masayoshi <maki@...> 2000/11/04

高橋征義です。

[#11378] Re: Ruby I18N — " たけ (tk)" <ggb03124@...> 2000/11/05

たけ(tk)です。

[#11379] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/05

まつもと ゆきひろです

[#11380] Re: Ruby I18N — " たけ (tk)" <ggb03124@...> 2000/11/05

たけ(tk)です。

[#11382] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/05

まつもと ゆきひろです

[#11393] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/07

たけ(tk)です。 ・・ 長文ご注意。

[#11396] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/07

まつもと ゆきひろです

[#11397] Re: Ruby I18N — Yasushi Shoji <yashi@...> 2000/11/07

At Tue, 7 Nov 2000 15:46:29 +0900,

[#11398] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/07

まつもと ゆきひろです

[#11399] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/07

In article <E13t3dt-0002Fp-00@ev.netlab.zetabits.co.jp>,

[#11401] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/07

まつもと ゆきひろです

[#11404] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/07

たけ(tk)です。

[#11406] Re: Ruby I18N — Yasushi Shoji <yashi@...> 2000/11/07

At Tue, 7 Nov 2000 19:06:27 +0900,

[#11407] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/07

たけ(tk)です。

[#11409] Re: Ruby I18N — Minero Aoki <aamine@...> 2000/11/07

あおきです。

[#11423] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/08

In article <E13t4Hq-0002GS-00@ev.netlab.zetabits.co.jp>,

[#11426] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/08

まつもと ゆきひろです

[#11427] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/08

In article <E13tMYW-0002te-00@ev.netlab.zetabits.co.jp>,

[#11428] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/08

まつもと ゆきひろです

[#11430] Re: Ruby I18N — "たけ(tk)" <ggb03124@...> 2000/11/08

たけ(tk)です。

[#11433] Re: Ruby I18N — matz@... (Yukihiro Matsumoto) 2000/11/08

まつもと ゆきひろです

[#11446] 『文字列は文字の配列か』 — " たけ (tk)" <ggb03124@...> 2000/11/08

たけ(tk)です。

[#11470] Proposal of "Array of CharCode" — " たけ (tk)" <ggb03124@...> 2000/11/10

たけ(tk)です。

[#11471] Re: Proposal of "Array of CharCode" — matz@... (Yukihiro Matsumoto) 2000/11/10

まつもと ゆきひろです

[#11450] Re: Ruby I18N — Tanaka Akira <akr@...17n.org> 2000/11/09

In article <E13tNkT-00030l-00@ev.netlab.zetabits.co.jp>,

[ruby-dev:11306] Ruby I18N

From: matz@... (Yukihiro Matsumoto)
Date: 2000-10-28 15:07:09 UTC
List: ruby-dev #11306
まつもと ゆきひろです

I18Nについてこんなこと考えてみました。

---
= 前提条件

  * 現行のAPIを変更しない

    すべてのRubyプログラムが99%変更無しに動作する。ただし、
    「構造体の内容を直接変更しない」などの制約が付くのはあり
    える。(現状でも暗黙のうちに仮定しているので)

  * 移植性がある

    現状Rubyが動作しているすべてのプラットフォームで動作する
    必要がある。外部コマンドやライブラリによる対応は仮定でき
    ない(よってlocaleもiconvも使えない)。

  * 実行効率が悪くない

    I18N対応による実行速度の低下はわずかしか許容できない。具
    体的には、GCやVM化など他の改善なども勘案した後、最悪でも
    数%程度に収まる必要がある。特にバイトを文字の単位として
    扱うモード(無変換モード)での低下は最小にすること。

= 問題

(a) 現状のRubyの文字列は実質的にバイト列であるが、世の中の多
    くの国では1文字が複数バイトで表現されるマルチバイトエン
    コーディングが用いられている。この場合、文字列を「文字単
    位」で扱うことができない。

(b) Rubyは国産であるため、正規表現については、日本で広く用い
    られているEUC, SJIS, UTF-8の各エンコーディングについては
    対応しているが、それらの対応はハードコードされており、新
    しいエンコーディングへの対応は容易でないうえに、ユーザ定
    義は不可能である。

上記(a)の問題についてはjcodeライブラリで、ある程度対応できる
が依然

  * 処理単位が文字かバイトかの切替えがグローバルにしか行えない

  * EUC, SJIS, UTF-8にしか対応できない

という欠点が残る。

他のスクリプト言語(Perl, Python)では、この問題に関して、以下
のような対応を行っている。

  * 文字列をUnicode(UTF-8)で保持し、文字単位で処理する。

  * バイト列と文字列を切替えられる(Perl: スコープ単位で宣言、
    Python: 別クラス)。

Unicodeは多くの文字集合を同時に表現できるため、内部エンコー
ディングとしては都合の良い性質を持っている。しかし、この対応
には以下の問題がある。

(c) Unicodeの性質と文字集合間の変換テーブルの乱立などにより、
    ラウンドトリップ(2度変換をして同じ文字列に戻ること)が成
    立しない場合がある(yen sign problem)。

(d) Unicode以外で表現されたテキスト処理には必ず変換が必要と
    されるため、実行効率のペナルティが予想される。

(e) Unicodeとそれ以外のエンコーディングとの間の変換はテーブ
    ルを用いて行うより他なく、Unicode以外で表現されたテキス
    ト処理には必ず相当なサイズのテーブルをロードする必要があ
    り、インタプリタサイズの増大を招く。

(f) 文字列の内部表現がUTF-8である場合でも、C APIが要求するエ
    ンコーディングは既存のものであることが予想され、拡張ライ
    ブラリで明示的な変換を要求することになる(前提との矛盾)。

このうち、(c)はほとんどの場合グリフの相違程度と考えることが
できるので致命的ではないことが多い。しかし、重大なことはこの
問題に対する回避策が提供されないのはことである。(d), (e)は時
間、空間の効率の問題であるため、ある程度妥協点を見出すことが
できる。しかし、すでに既存のエンコーディングのデータを大量の
保持している場合には特に(d)を無視することは難しい。(f)は互換
性をどこまで保証するかという問題である。しかし、既存のエンコー
ディングをベースにした蓄積がある場合には大きな問題となりえる。

結論としては、PerlやPyhonのような内部コードをUTF-8に揃えると
いうアプローチは「今までASCIIデータ(+α)しか扱ってこなかっ
たが、今後はUnicodeも使いたい」というニーズには十分であるが、
「今までマルチバイトテキストデータを大量に処理してきて、それ
は早急にはUnicodeに置き換わらない」という日本(や他のアジア諸
国)のニーズには適合しないと考えられる。

= 要求

  * 文字単位での処理が行いたい

    より直感的な処理

  * 多くのエンコーディング(および文字集合)を扱いたい

    既存のエンコーディングは数多くあり、Unicodeで話は終らな
    い。Unicodeは将来広く使われるだろうが、あくまでも対応す
    る文字集合のひとつという位置づけであるべき。

  * 文字集合はユーザ定義可能にしたい

    文字集合は多く、すべてにあらかじめ対応することは不可能で
    ある。また、Unicodeが完全でない以上、今後も文字集合が登
    場する可能性はある。

  * 文字は変化してはいけない

    仮に内部的な文字集合の変換を行うことがあっても、その変換
    による文字の変化は許容できない。よって、実質的には文字集
    合の変換を行えない。

= 選択肢

以下の二つの選択肢が考えられる。

(1) 文字集合はそのまま、エンコーディングは揃える

    文字の変化(c)、変換テーブルによる空間コストの増大(e)は結
    局はエンコーディングの変換ではなく、文字集合の変換によっ
    て発生する。逆に言えば、文字集合を操作しなければこれらの
    問題は回避できると言うことである。

    そこでUTF-8が用いているエンコーディングが31bit幅の任意の
    整数をエンコードできることに着目し、文字集合はオリジナル
    のまま、文字列のエンコーディングだけUTF-8エンコーディン
    グに揃えることを考える。

    この場合、バイト列から個別の文字を順に取り出す手続きを定
    義するだけで、文字単位の処理が可能になる。ほとんどの文字
    処理に必要なのはエンコーディングに関する知識のみであるこ
    とは実証されているので、このことにより、実装をUTF-8(エン
    コーディング)対応だけに限定することができ、実装が簡潔に
    なることと、UTF-8の持つ良い性質(リーディングバイトとそれ
    以外のバイトを区別できる、逆方向へのスキャンが可能)を利
    用できるようになる。

    しかし、この対応では(f)の問題には対処できないので、文字
    列のポインタ部分の直接取り出しの禁止、およびポインタ部取
    り出し関数におけるエンコーディング変換が必要になると思わ
    れる。

(2) 文字列は一切変換しない

    その上で、文字操作を抽象化した構造体(各操作毎に関数ポイ
    ンタを持つ)を経由して操作する。元の文字列に対する変換を
    一切行わないため、(c)、(d)、(e)、(f)の各問題は発生しない。

    この選択肢における課題は、文字列に対する直接操作を行うこ
    とができず、すべて構造体経由の操作とする必要があることで
    ある。そのための実行効率のペナルティと、実装が複雑になる
    ことが予想されるので、これらがどのくらい妥協できるかを見
    積もる必要がある。

なんとなく後者の方がすぐれているような....

= 課題

入力ストリーム、プログラムのエンコーディングを指定する方法

  * デフォルト(-Kで指定)
  * 明示的な指定(ストリーム: line discipline、プログラム: ??)
  * guessを許すか

In This Thread

Prev Next