[PHP-dev 360] Re: About Zend Multibyte patch

Masaki Fujimoto php-dev@php.gr.jp
Thu, 09 May 2002 01:17:55 +0900


ふじもとです。

On Thu, 09 May 2002 00:08:19 +0900
Yasuo Ohgaki <yohgaki@yahoo.co.jp> wrote:

> 大垣です。
> 
> 日本のユーザーでマルチバイト化の実装検証/テストしてから本家CVS
> コミットと言う手順と勝手に思っていたのですが、勘違いだったようです。
> 
> # と思っていたので藤本さんのパッチも読んでいないので、ネボケた
> # 事を書いている場合は、遠慮なく突っ込みをお願いします。

えーと、廣川さんがコミットなさったようですね。先ほどzend-cvs-listを見て
僕もかなりびっくりしているのですが...

ただあのパッチ(とかそれをapplyしたアーカイブ)はそれなりの数の方にダウン
ロードして頂いているようなので(使って頂いているかどうかは未知数ですが)、
仕様の是非はともかくそこそこは動作するかと思います。ただ、「ローカルパッ
チだし」などと考えていて結構恥ずかしいコードも入っているのでちょっと焦っ
ています:)

> パッチを流し読みしたところ、encodingがzend_language_scanner.l
> にT_ENCODINGが定義され、
> 
> encoding('UTF-8');
> 
> と言う構文でスクリプトエンコーディングが定義できるようになってい
> るようですが、これは確実に動作するのでしょうか?

encodingディレクティブは現在の所問題ないようです(Shift_JISのscanに関して
も現在のところうまくいっているようです)。

> パッチを良く読んでいないのでコンパチビリティーの問題があるのか
> どうか分りませんが、(例えば、ZendOptimizerやキャッシュ製品)
> パッチ付きで動作するか?SJISが利用された場合に動作するか?
> などは検証済みなのでしょうか?

僕もZend Optimizerその他のZend製品に関しては僕も検証していないので、なん
とも言えません(ちょっと自信ないです)。なんにせよここが一番微妙なところだ
と思います。

まぁもしだめならZendの方々が何か言ってくるでしょうから、その様子をみてか
ら対応すればいいか、と思ってはいるのですが。というかZend製品はコードが無
いのでダメだったらあきらめてrevertするしかないのでしょうね...

> # 早ければ、PHP 4.4.0とPHP 5.0.0Betaは同時にリリース
> # されるのでは、と思っていたので互換性考慮の必要性が低い、
> # ZE2から対応と思っていました。

実は僕もPHP4に関してはあのパッチのままでよしとして(個人的にはその方が気
楽ですしね:)、PHP5で頑張ろうかなとも思っていました。どちらせよ、PHP5では
4に比べて思い切ったアプローチができそうなので、根本的に違うものになるか
と思います。先々週からちょこちょこ作り始めてみているのですが、塚田さんの
mBufferクラス(と、それに関連したご指摘の数々)を考慮にいれて、ちょっと考
え直しているところです。来週くらいにはphp-i18nのCVSにプロト(のプロト程度
かな)をコミットできればなー、と思っています(遅いですか?)。

> Zend.m4を見ると--enable-zend-multibyteでマルチバイト
> サポートを有効にできるようになっているようですが、このオプション
> が設定された場合に強制的にmbstringサポートは有効になるように
> なっていないように思えます。
> # もしかして、mbstringは必要なし、と言うことでしょうか?

ここはパッチを作ったときに結構悩んだ箇所なのですが、結局

--enable-mbstringが指定されている場合:
php.iniのmbstring.script_encodingが有効

--enable-mbstring, --enable-mbstr-enc-transが指定されている場合:
上記に加えてscript_encodingからinternal_encodingへの変換処理が有効

両方指定されていない場合:
encodingディレクティブのみ有効(Shift_JISはパースできます)

というようにしています。


廣川さんのご意見を待たずにあれこれ言うのもアレですが、とりあえず
--enable-zend-multibyteオプション無しでconfigureすれば他に(ほぼ)100%影響
を与えないはずなので、4.3.0ではexperimentalなオプション、ということにし
て勇気ある人はどうぞ、というアプローチもありかなと思います。

で、当然僕もあのパッチが最善のものとは全く考えていません。

# PHP 4ではそれほど思い切ったことは出来ないですから結局あの程度かなとい
# う気もしますが

が、とりあえず本家CVSにマージされて多くの人に使ってもらえるということで、
バグを直しつつ、コードを洗練させつつその結果をPHP5のi18n作業にも反映して
いければいいのかな、などと気楽に考えています。

# というか既に0バイトのスクリプトを実行するとsegfaultするバグが見つかっ
# ています:( 直さなきゃ...

何はともあれ、あちらの方々の反応が気になるところですね。

--
藤本 真樹

アストラザスタジオ
fujimoto@studio.co.jp
fujimoto@php.net