XEmacs 21.2.19 UTF-2000 Version 0.6 (東部市場前) を
ftp://ftp.m17n.org/pub/utf-2000/
に置きました。
UTF-2000 に関する議論は当面 xemacs-beta-ja(a)xemacs.org でお願いします。
;; もしかすると utf-2000(a)m17n.org ができているかも知れないので、一応
;; cc: しときます。もし、できているとしたら後で戸村さんから announce
;; があると思います。
[主な変更点]
・character.h, mule-charset.h, buffer.h 等に散在していた文字表現、文字
列表現に関する部分を
character.h 文字表現
char-1byte.h unibyte 表現 (非 MULE 用)
char-lb.h leading-byte 表現
char-ucs.h UCS-2000 表現
;; 従来の character.h の中身の大部分は char-ucs.h に移動し
;; た
multibyte.h 多byte文字列界面
mb-1byte.h unibyte 表現 (非 MULE 用)
mb-lb.h leading-byte 表現
mb-utf-8.h UTF-2000 表現
に整理した(けれど、mule-charset.h はあんまりいじっていない)。
・ucs-bmp も make-char できるようにしてみた(256 文字集合での問題を修
正したつもり)
・latin-iso8859-2, -3, -4, -9, latin-jisx0201,
vietnamese-viscii-upper, -lower 用の変換表を作って、BMP に写像するよ
うにした。これにより(FULLWIDTH 系を除く)Latin 文字に関する重複符号
化は解消された
・上記を実現するために、簡単な UCS 用の文字→byte 表管理機構を作った
(これにより、gmalloc の bug に遭遇したが、とりあえず見なかったこと
にする(^_^;)
・coding-system の encoder の内部表現依存部を小さくすべく、
coding-system encoder を再実装した (text-coding.c)
[既知の問題点]
Latin 文字の重複符号化を廃止したが、文脈・状況に応じて文字の属すべき符
号化文字集合を判別する機構はまだ実装していないために、例えば、Latin-2
と Latin-1 の双方に属する文字は常に Latin-1 の文字として扱われる。この
ため、iso-8859-2 の文字だけで書かれた file であっても、それを UTF-2000
0.6 で編集して iso-8859-2 として save すると一部が iso-8859-1 の文字と
見倣され、指示シーケンスが入ることとなる。
[今回のバッタモン]
大量の組込み変換表をでっちあげた。
;; 将来的には charset に入れて、Lisp level でも定義できるようにするつ
;; もり。
MAKE_CHAR, breakup_char_1 の条件分岐がまた増殖した。(^_^;;;
[お願い・その1]
今回、coding-system encoder を試験的に再実装しました。もしよろしければ
これの performance を従来方式と比較し、この実装の可否を評価してくださ
い。
[背景]
coding-system の定義をする時、できれば、対象である文字符号固有の性質
だけを記述して、内部表現には依存しないように書きたいのが人情です。従
来の実装では、decode に関しては文字を内部表現に変換する部分をうまく
macro に隠蔽できていたために、そんなに苦労せずにすみましたが、encode
に関してはほぼ同様な内部表現の parse 用の code を coding-system-type
× 内部表現 の組み合わせ分書く必要がありました。
この問題を解決するには、encoder を
(1) 内部表現を parse して1文字を取り出す部分
(2) 1文字を coding-system-type に応じて符号化する部分
に分離して書けば良いと言えます。つまり、(1) の generic な encode
scheme を書き、その中で1文字が溜る毎に (2) を呼び出す訳です。
しかしながら、この方法は関数呼び出しを伴うため、従来の方法よりも遅く
なると考えられます。そこで、実際にどの程度遅くなったかを調べたい訳で
す。もし、そんなに遅くなってないなら、記述が楽な新方式に移行するのが
良いといえるでしょう。
[方法]
まず、./configure に
--with-mule --with-utf-2000
を付けて作った XEmacs(a) と
--with-mule --with-utf-2000 --with-text-coding
を付けて作った XEmacs(b) を用意します(上記以外の option は同一にし
ます)。
この (a), (b) に於いて、coding-system-type が iso2022 か utf-8 であ
る各 coding-system で適当な長さの buffer を符号化し、その時間を計り
ます。
そして、各長さと含まれる MULE charset の種類毎に結果を集計します。
[お願い・その2]
当面、再配布は控えてください(これは仁義の問題なので、無視することは
可能です)。また、どうしても配布したい方は御連絡ください。
--
===『幾千億の分子に分かれても ========================================
決して忘れない。
この宇宙が終るまで』 守岡 知彦 (MORIOKA Tomohiko)
======================================== Email: <tomo(a)etl.go.jp> =====
;; PGP public key:
http://www.etl.go.jp/~tomo/hiko/pgp.key