[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:07813] xyzzy 起動時の defstruct と byte-compile の関係について



みなさまこんにちは。大久保博之です。

最近自分で lisp を書いてみるようになり、色目をだして defstruct なんて
ものを使ってみたところ壁にぶつかってしまいました。

少し説明をさせてください。

■状況1: 以下のような "hoge-struct.l", ".xyzzy" がある場合。
========================================
-- hoge-struct.l -----------------------
========================================
(defstruct hoge-struct
  :hoge1
  :hoge2
  :hoge3)
(defvar *hoge-struct-list*
  '(#S(hoge-struct hoge1 "1" hoge2 "2" hoge3 "3")
    #S(hoge-struct hoge1 "a" hoge2 "b" hoge3 "c")))
========================================
-- .xyzzy ------------------------------
========================================
(load-library "hoge-struct")
========================================

・1: hoge-struct.l を byte-compile していない場合。
  → 無事 xyzzy 起動

・2: hoge-struct.l を byte-compile した場合。
 → 起動時に "未定義の構造体です: hoge-struct" というエラーが生じる。


■状況2: 以下のような "hoge-struct.l", ".xyzzy" がある場合。
========================================
-- hoge-struct.l -----------------------
========================================
(defstruct hoge-struct
  :hoge1
  :hoge2
  :hoge3)
(defvar *hoge-struct-list*
  (list
   (make-hoge-struct :hoge1 "1" :hoge2 "2" :hoge3 "3")
   (make-hoge-struct :hoge1 "a" :hoge2 "b" :hoge3 "c")))
========================================
-- .xyzzy ------------------------------
========================================
(load-library "hoge-struct")
========================================

・3: hoge-struct.l の byte-compile に関わらず正常に起動。

以上から、どうも構造体の定義が byte-compile されている場合、
xyzzy の起動が終了するまで、#S(hoge-struct ...) のような記述は存在して
はならないのだと考えました。

しかし現在私が行いたいことは、hoge-struct.l を byte-compile してある
状態で上記 *hoge-struct-list* の内容を次回 xyzzy 起動時にも覚えていて
くれないかな、ということなんです。

========================================
-- .xyzzy ------------------------------
========================================
(load-library "hoge-struct")
(define-history-variable *hoge-struct-list*)
========================================

上記のように .xyzzy に記述すると、hoge-struct.l を byte-compile してい
ない場合は *hoge-struct-list* の値が復元され xyzzy も正常に起動すると
いったように期待通りに動作するのですが、byte-compile した場合には、
xyzzy の起動時にエラーはでないのですが *hoge-struct-list* の内容は
nil のままで、また、いつも表示させているバッファタブが消えてしまってい
ます。
メニューの「表示」→「ツールバー」の所も灰色く disenable の状態になっ
ています。


# 要は何がしたいかというと、車輪の再開発で無駄な感じもする pickup-pattern.l
# という文字列の強調用 lisp で使っているパターンリストを次回起動時にも
# 引き継ぎたいということなんです。

長々と書かせていただいてしまいましたが、普通はこうするんだよ的なアド
バイス、解決策等がありましたらご教授宜しくお願い致します。
---
OHKUBO Hiroshi
konata_o@xxxxxxxxxxx
http://members.tripod.co.jp/ohkubo/xyzzy/index.html

Index Home