[#11357] [PATCH] an analogue of `long long' — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
えぐち@エスアンドイー です。
まつもと ゆきひろです
>From: matz@zetabits.com (Yukihiro Matsumoto)
まつもと ゆきひろです
[#11440] class Character (was: Ruby I18N) — Yasushi Shoji <yashi@...>
[ruby-dev:11428] からの続きですが、threadは切りました。
高橋征義です。用語について。
At Wed, 8 Nov 2000 20:44:55 +0900,
高橋征義です。
At Thu, 9 Nov 2000 13:30:34 +0900,
まつもと ゆきひろです
[#11447] gets は secure? — Kazuhiro NISHIYAMA <zn@...>
出力がInsecureなのに入力はsecureなのでしょうか?
[#11467] debug write in regex.c? — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#11500] rb_to_integer/rb_to_int — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
[#11520] A problem of Socket methods on Windows — OKA Toshiyuki <oka@...>
岡と申します。
なかだです。
まつもと ゆきひろです
なかだです。
岡です。
なかだです。
なかだです。
岡です。
なかだです。
[#11569] blocking on socket? — Shugo Maeda <shugo@...>
前田です。
[#11591] object.c パッチ — Kazuhiro NISHIYAMA <zn@...>
使われてなかったnil_plusの削除とOBJ_INFECTへの変更です。
[#11611] return value of waitpid2 — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
荒井です。いや、新井です。(よくあることさ)
まつもと ゆきひろです
新井です。
新井です。
[#11618] Re: class variable — "Koji Arai" <jca02266@...>
新井です
なかだです。
まつもと ゆきひろです
> まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
[#11641] eval too slow — Wakou Aoyama <wakou@...>
青山です。
[#11650] conflict of NODE_DREGX_ONCE — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
まつもと ゆきひろです
[#11662] IO (Re: fork problem?) — Tanaka Akira <akr@...17n.org>
In article <E140cR3-0002ls-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E140fxW-0002u9-00@ev.netlab.zetabits.co.jp>,
In article <hvor93w5wb8.fsf@coulee.m17n.org>,
In article <hvoofz05uwz.fsf@coulee.m17n.org>,
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
In article <E141eaC-0003w0-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E142ZqF-0004rX-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E143Zem-000271-00@ev.netlab.zetabits.co.jp>,
まつもと ゆきひろです
In article <E143amj-00028V-00@ev.netlab.zetabits.co.jp>,
[ruby-dev:11476] Re: Proposal of "Array of CharCode"
たけ(tk)です。 Yukihiro Matsumoto さん曰く。 》| 16ビットを越える大きな文字コード系の内部データは、4バイトプレーンな 》|文字コードそのままにするのがいいのではないか、という提案です。 》 》この「内部データ」ってなんでしょう? 》Regexpの内部データ? 文字列の内部データ? この「内部データ」というのは Regex が、与えられた文字列(バイト列)を re_compile_pattern でコンパイルして作った内部データの意味でした。「文字 列」ではありません。 Regex.c の内部データでの文字コードの形式はというのは、「MBC2WC(c, p)」 マクロの定義部分を見れば分かります。そこで、与えられたバイト列を4バイト のデータに変換しています。その逆方向、その内部データからバイト列へのエン コードの様子は print_mcb を見ると分かります。それらを見ると、内部データ は、 (1)EUC と SJIS の場合には、2個のバイト列を単純に hi*256+lo で合成 した数値。(JIS の文字コードに戻しているわけではない)。 (2)UTF8 の場合には、不定長のバイト列を UTF8 のエンコーディング方式 に従ってデコードして戻した文字コード。 になっています。 従って、UTF8 の文字列(バイト列)は、Regex.c の内部で用意されたデコー ダによって、32ビットの文字コードそのものに復元して保存されています。 》|に変えるだけで、「とりあえずの文字コード取り出し」は終了してしまう。 》 》やはり文字列の内部データのつもりみたいですねえ。 こちらの方は直接的には「Ruby から Regex に渡すデータの形式に関する提案」 です。 上で見たのは Regex.c での UTF8 でエンコードされたバイト列の扱いなので すが、そこでは、Regex.c でバイト列←→文字コードのエンコード/デコードの ルーティンを持っている。しかしエンコード/デコードは本来、文字コード系に 属する事柄なので、その文字コード系を管理するクラスで行うべきこと。 Regex.c などの汎用ルーティンで行うべきことではない。 なぜ、Regex.c で自前の UTF8 デコード/エンコードルーティンを持っている かというと、エンコーディング/デコーディングというのは、アルゴリズムに属 することであって、データではないから、です。従って、Regex に渡すデータが 「エンコードされたデータ」であることを維持するなら、新たなエンコーディン グ方式のバイト列を扱おうとすれば、Recex.c の中でそのアルゴリズムに対応し たルーティンを追加するか、外部のルーティンを呼び出すほかないわけです。 「本来のあり方」を実現する方法としては次の2通りが考えられる。 (1)エンコードしたデータを Regex に渡して、Regex がデータの送り主の CharCodeType クラスのルーティンを呼び出してデコードする。 (2)初めからデコードしたデータを Regex に渡す。 最初「(1)エンコードしたデータを渡す」方法を工夫しようかと思ったので すが、CharCodeType クラスを Ruby スクリプトでも扱えるようなクラスにする、 という(たけ(tk)の)方針からいくと、呼び出しのための手続きが複雑になりそ うであり、オーバーヘッドも問題になりそう。 後者の方法が可能であれば、Regex での処理は簡単になり、どんな文字コード 系でも統一された方法で扱えるようになる。 そこで、「(2)初めからデコードしたデータを Regex に渡す」方法が可能 かどうか/妥当かどうかを検討するためには、何故エンコードするのか、という 問題に突き当たる。 何故エンコードするのか。エンコーディングの目的は下記の通り。 (1)システムのIOがバイト単位のデータの配列(バイトストリーム)を前提 としている。 (2)バイトデータの中にIOの制御のためのデータも入れられるようになって いる。 (3)16ビット、32ビットのデータをそのままの状態でストリームとしてシ ステムに渡すと、制御コードが予期しない部分に入ってしまい、誤動作を起こす。 (4)それを防止するために、制御コードとバッティングするバイトデータを含 まないように注意して複数のバイト列に変換する。 ということ。 そうであれば、アプリケーションの内部データや、アプリケーションの内部の 各モジュールの間でのデータ交換のためのデータは、エンコードしたバイト列で ある必要はない。Regex と Ruby との間のデータのやりとりはアプリケーション の部分どうしの関係でのデータのやりとりに属する。 実際問題として Ruby から Regex にデータを渡す場合を考えると、Regex に 対して、「生の32ビットの文字コードである」旨の通知をしておけば、Regex では上記のような簡単な「文字コード取得ルーティン」で受け取ることが出来る ようになる。(もちろん、EUC でエンコードされたデータであることを通知して から(mcbtype==MBCTYPE_EUC)、今まで通りのデータを渡しても良い)。 −− もうちょっと別の視点から見てみると、ストリーム型のデータを渡すときの基 本単位を byte(INT8) にするか、INT32 にするか、という違いにすぎない、とも 言えます。 現在のOSやネットワークは INT8 のストリームを基本にしているので、それ らとのやりとりではエンコードしなければならない。しかし、アプリケーション の内部でのストリームはエンコード/デコード不要のストリーム(Array of INT32)でも良いのではないか。ということです。 》ある文字コード系が4バイトプレーンなのは当然許すわけですが、 》統一して内部データとして持つというのは前提から採用できないよ 》うな。 具体的には次のような方法を想像しています。 (1)CharCodeType クラスのメソッドとして、エンコードされたバイト列から デコードされた INT32 の配列に変換するメソッドを用意しておく。 (2)String クラス/Regex クラスの内部のデータはエンコードされたバイト 列とする。 (3)String::EUC クラス/Regex::EUC クラスのデータはデコードされた文字 コードの配列とすることが許される。(強制はしない。クラスの作成者の判断に 任される)。 (4)Ruby から Regex にデータを渡す場合には、re_mcbinit(MBCTYPE_EUC)で 今まで通りにバイト列で渡すか、re_mcbinit(MBCTYPE_INT32)で文字コードの配 列(Array of INT32)として渡すかを選択することが出来るようにする。 (5)Regex では re_mcbinit(MBCTYPE_INT32)が指定された場合には、上記の文 字コード取得ルーティンで文字コードを直接取り出す。 たけ(tk) ggb03124@nifty.ne.jp http://member.nifty.ne.jp/take_tk