find-coding-system() in pces-e20.el
守岡 知彦 / MORIOKA Tomohiko
tomo @ kanji.zinbun.kyoto-u.ac.jp
2000年 9月 29日 (金) 21:07:07 JST
>>>>> [apel-ja : No.00413] にて
>>>>> “修平”= Shuhei KOBAYASHI <shuhei @ aqua.ocn.ne.jp> さま曰く:
修平> 守岡さんの回答
修平> (<htxog1akxqb.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>)では全然理
修平> 解できなかったので調べてみました. find-coding-system は XEmacs
修平> が本家らしいので, XEmacs 版の doc string を確認してみると...
;; すみません。(^_^;
修平> | Retrieve the coding system of the given name.
修平> |
修平> | If CODING-SYSTEM-OR-NAME is a coding-system object, it is simply
修平> | returned. Otherwise, CODING-SYSTEM-OR-NAME should be a symbol.
修平> | If there is no such coding system, nil is returned. Otherwise the
修平> | associated coding system object is returned.
修平> ;; ちなみに checkout してある XEmacs の version は今だに
修平> ;; "Millenium" です.
;;; [業務連絡] 未踏通っちゃったようです。そういう訳で、machine なり
;;; HDD なり買ってください。:-)
修平> 1. 引数が coding-system object ならば, その coding-system object
修平> を返す.
修平> 2. 引数が coding-system object でない場合には symbol でなければ
修平> いけない. (ちなみに, 引数が symbol 以外の場合には
修平> wrong-type-argument になる)
修平> 2.1. symbol に対応する coding-system object があれば, その
修平> coding-system object を返す.
修平> 2.2. symbol に対応する coding-system object がない場合には nil
修平> を返す.
また、文書化されているかどうかは知らないんですが、
(a) nil は coding-system object ではない
(b) nil は coding-system object の名前ではない
ということで、
(c) nil は coding-system ではないし、nil に対応する coding-system もな
い
ということが言えます。
nil は coding-system を要求する場所で型 error を起こさない
coding-system ではないものだと言えると思います。
修平> ;; XEmacs での (find-coding-system nil) => #<coding_system
修平> ;; binary> という動作は undocumented なのですね.
;; Ben も tomo も文書化意欲が少ないようですね。(^_^;;; (で、Martin は
;; いまいち mule のことを理解してなかったと思う)
;;; Martin が maintainer になって ChangeLog を設ける以前は変更履歴がな
;;; いので、うろ覚えですが、tomo はこのあたりの semantics を結構変えて
;;; たようで、忙しくなって、中途で終ったまま固定化されてしまったという
;;; 傾向もあるので全く遺憾です。(^_^;;;
(find-coding-system nil) => #<coding_system binary> となりますが、nil
は #<coding_system binary> の名前ではなく、また、alias でもありません。
例えば、coding-system-for-read に nil を束縛した時、binary を束縛した
のと異なる効果が得られます。
機能的には、nil は coding-system が指定されていないことを表す特別な
coding-system で、その観点からすれば、nil に対応する #<coding_system
binary> ではない coding-system object があった方が良かったかも知れませ
ん。で、それは nil であるのが綺麗だったと思います。つまり、
(coding-system-p nil) => t
(find-coding-system nil) => nil
が綺麗だったかも知れません。
で、なんで (find-coding-system nil) => #<coding_system binary> となる
かなんですが、おそらく、内部的に Ffind_coding_system を使ってて、nil
特別扱い code をこの中に閉じ込めているという実装的な理由だと思います。
ただ、coding-system-for-{read|write} などの Mule 3 API 導入前は、これ
で整合してた可能性はあります。だとすると、原因は tomo の理解不足です。
(^_^;;;
修平> >>>>> In <htxog1akxqb.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>,
修平> >>>>> tomo @ kanji.zinbun.kyoto-u.ac.jp (守岡 知彦 / MORIOKA
Tomohiko) wrote:
修平> > APEL において、多分、nil の場合の挙動は未定義動作だったんだと
修平> > 思います。そういう意味では『仕様』だったのかもしれません。
修平> [...]
修平> > これを期に (find-coding-system nil) が binary を返すように変更
修平> > する(明確化する)ことには賛成します。つまり、これを『バグ』と
修平> > 見倣す訳です。
修平> APEL 版の doc string ("Return OBJ if it is a coding-system.") を
修平> 『仕様』とみなせば, APEL 版の動作は『仕様』に忠実ですが, この
修平> 『仕様』自体が本家の不完全な emulation なので, これは『バグ』と
修平> 呼ぶべきものだと思います.
歴史的には、APEL は emulate するものではなく、APEL が想定する仕様の範
囲内での共通基盤を提供するものだったのです。もちろん、今は XEmacs-Mule
も Emacs 20 もこの部分でだいぶ固まっていますし、完全な emulate をする
に越したことはないんですが。
ただ、歴史的には必ずしも APEL が XEmacs を emulate するものではなかっ
たと言えます。なぜなら XEmacs-Mule がある程度まともに動き出す以前に tm
が XEmacs 19/20 に附属したという経緯があるからです。tm には APEL の前
身の emu および tl が含まれており、package 化以前は XEmacs の一部でし
た。この当時、tomo は XEmacs Mule の lisp 部分の code を書くのに emu
や tl を使っていて、その一部は Martin が確か emu や tl から切り離して
mule の core に入れたりしてました。
Emacs 19.34.9x から断続的に XEmacs-Mule の仕様を Emacs 20 と共通化する
作業を行っていたため、emu を睨みながら XEmacs-Mule をいじっていたとい
う部分もありました。
修平> > ;; coding-system を指定する場所の多くは nil を取りますが、
修平> > ;; 通常の coding-system を指定した場合と挙動が異なることがあり
修平> > ;; ます。
修平> nil と binary は coding-system として等価なのですか?
修平> ;; (find-coding-system nil) が binary を返すように変更することに
修平> ;; は賛成したいのですが, nil が特別扱いされているのだとすると不安...
前述のように、それは違います。
--
┯━…‥・懐かしい未来の記憶をふと思い出しかけた・‥…━━┯━━━┯━
││ ─ │ ─ / ─ ┼─ ┬ ─ ─┼ ┬┴─
┼┼─┼|〓━─┼ 守岡 知彦 (MORIOKA Tomohiko) <tomo @ m17n.org> ─ ─┬
┻┻━┻━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
More information about the APEL-ja
mailing list