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