Common Lisp 위에 일종의 DSL을 작성했습니다. 도메인은 매우 이상하며 내 언어는 Common Lisp과는 완전히 다르게 보입니다. 나는 패키지 foo
에 모든 인터페이스를 넣었습니다 : 패키지 사이내용이 지정된 패키지에있는 것처럼 파일을 컴파일합니다.
(defpackage :foo
(:use :common-lisp
:internal-machinery)
(:shadow :in-package
:*packages*))
전환이 언어의 개념을 넘어, 그래서 문자를 in-package
및 *package*
를 미행하여이 기능을 비활성화했습니다. 이제 내 언어의 사용자 (프로그래머)가 패키지를 전환 할 수 없습니다. 벌금.
명백히,이 언어로 작성된 프로그램을 컴파일하기 위해 Common Lisp 컴파일러를 사용하고 싶습니다. 기능 compile-file
는 나를 위해 괜찮아 보입니다. 그러나 어려움이 있습니다.
마치 내 내용이 내 foo
패키지 안에있는 것처럼 파일을 컴파일하려고합니다. 프로토 타입 언어로 된 모든 프로그램 상단에 (in-package :foo)
을 두는 것은 바람직하지 않은 옵션입니다. 가능 여부의 경우
(in-package :internal-machinery)
(defun compile-stuff (filename)
(in-package :foo) ; it will have no effect, because
; this macro must be top level form
(compile-file filename) ; other options are omitted
(in-package :internal-machinery)) ; no way, even if it were top level
; form, in-package is shadowed
나는 아무 생각이 없다, 그래서 어떤 도움을 주시면 감사하겠습니다 :
는 상황이 더 악화하기 위해, 나는 함수의 내부 파일을 컴파일해야합니다.
사용자는 언제나'(cl : in-package "FOO")'를 호출 할 수 있습니다. –