lunaでの変数定義の仕方
守岡 知彦 / MORIOKA Tomohiko
tomo @ kanji.zinbun.kyoto-u.ac.jp
2002年 5月 14日 (火) 18:11:34 JST
>>>>> [emacs-mime-ja : No.01023] にて
>>>>> “中島さん”= NAKAJIMA Mikio <minakaji @ osaka.email.ne.jp> さま曰く:
中島さん> > 余談ですが私的 luna の覚え書きを書いてみました。
中島さん> > 興味ある方は見てみてやって下さい。
中島さん> 拝見いたしました。簡潔で良いですね。実はぼくも似たようなも
中島さん> のを Palmでごにょごにょ書いていたのですが、先を越されてしま
中島さん> いましたね。qualityも負けているようなので潔く消すことにしま
中島さん> す...f(^^;。
私も見せて頂きました。幾つか気になる点を発見しましたが、それを除けば、
分かりやすくて良いと思います。FLIM に収録したらどうでしょうか?
中島さん> ところで、これこそ余談なのですが、luna を利用しているコー
中島さん> ドwanderlust や shimbun を見ていてもあまり slot をガシガシに
中島さん> 利用しているコードは見受けられません (ような気がします...)。
中島さん> 自分で書いているコードでは、インスタンス変数のつもりで利用す
中島さん> ることが多いので、ついついスロットを多用してしまいます。
えっと、現状の luna の slot はインスタンス変数のことです。CLOS 的には
slot には、インスタンス変数に相当する「局所 slot」とクラス変数に相当す
る「共有 slot」がありますが、luna では、今の所、共有 slot が実装されて
ないので、結果的に luna の slot = インスタンス変数 となっています。
前述の気になる点の一つは「インスタンス変数もどき」という記述で、これは
もどきじゃなくて「インスタンス変数」のつもりなんです。
そして、もうひとつの気になる記述は accessor に関するものです。luna 的
には正規の accessor は luna-slot-value と luna-set-slot-value です。た
だ、これは毎回名前解決を行って効率が悪いので、効率が問題になる場合の特
例として internal-accessors というものを導入しています。
;; internal-accessors は名前解決を aref/aset に展開します。よって、多
;; 重継承を行ったり、継承した class で制限をかけるような場合には正常な
;; 動作が保証されていません。
そういう訳で、最初は internal-accessors を定義せずに luna-slot-value
とluna-set-slot-value を使って説明し、後に高速化に関する節を設けて
internal-accessors の説明をすると良いんじゃないかと思います。
中島さん> 結果的にスロットの変数を参照して、その値を一時変数に取って、
中島さん> それを計算してまたスロットに格納する...というコードが非常に
中島さん> 多くなってしまうのですが、こういうコードを書く度に、何か非常
中島さん> に効率の悪いことをやっているような罪悪感に呵まれます。
luna の slot 参照に関する名前解決は obarray, 即ち hash で実現されてい
るので、slot の数に対しては定数時間で処理されると思います。また、
internal-accessors を用いれば、名前解決の部分が定数に展開されるので、
let とも張り合えるのではないでしょうか?(調べてないけど)
--
===『幾千億の分子に分かれても ========================================
決して忘れない。
この宇宙が終るまで』 守岡 知彦 (MORIOKA Tomohiko)
====================== Email: <tomo @ kanji.zinbun.kyoto-u.ac.jp> ======
More information about the Emacs-mime-ja
mailing list