[Canna-dev 118] Re: wchar_t

Back to archive index

AIDA Shinra aida-****@jcom*****
2002年 12月 28日 (土) 15:22:19 JST


相田です。

kinput2,canuum,emacsの他に、Q's Nicolatterしか出て来ないようなので、いっ
たん調査は打ち切ります。実質wc系は16ビット版しか使われていないとなれば、
対応は割と気楽にできそうです。

まず、wchar_tの問題点を整理すると、

1. wchar_tは本来ASCII互換部分以外は実装依存であり、サイズも16ビットの
場合と32ビットの場合がある。最近のシステムでは32ビットが主流だが、
cygwinでは16ビットである。

2. にも関わらず、libcanna16ではOS側の定義を無理矢理奪って、16ビットの
wchar_tを定義している。このためコンパイルエラーが生じたり、定義の変更
に失敗したりする。

3. また、libcannaではwchar_tの大きさが分からない。

4. WCHAR16でない場合に、widedef.hにある
replace this with #include or typedef appropriate for your system
の部分はどう定義されるか分からない。従って、誰がコンパイルしたかによっ
てABIの違うlibcannaが出来ることになる。

5. cannaのwchar_tはOSのワイドキャラクタのAPIで扱うことは出来ず、自前で
変換ルーチンを用意しなければならないが、これは紛らわしい。

という状況です。現在既にlibcannaのABIが不確定になっているため、バイナ
リ互換を完全に確保することは出来ない状況に陥っています。

これを踏まえた上で、私の出した結論は、2.が起こっているOSではどうせ
cannaをコンパイル出来ないので、新しいワイドキャラクタのみをサポートし、
cannaのコンパイルが出来ているシステムでは、古いワイドキャラクタを同時
にサポートする、というものです。ワイドキャラクタを変えれば、バイナリレ
ベルだけでなくソースレベルでも互換性が無くなるので、マクロで明示的に
切替える形がいいと思います。そうなると新しいAPIが気付かれず、古いAPIが
使われ続ける可能性があるので、GNU ldのwarningの機能を使って乗り換えを
促します。

これが私の考えですが、変にマクロでAPIを切替えたりすると複雑なincludeで
困らないかとか、jrKanji*に統一すればいいだろうとか、色々異論もあると思
います。別の方向を推すなら、今のうちに反対してください。



Canna-dev メーリングリストの案内
Back to archive index