2015-06-28 9 views
2

Это функция, которую я пытаюсь скомпилировать. Это единственное, что есть в файле lisp.Тип Ошибка при компиляции SBCL defun в Aquamacs с SLIME

(defun hello-world() (format t "hello world.")) 

Я пытаюсь скомпилировать функцию с помощью «^ C^C». Вот трассировка стека.

The value NIL is not of type SB-C:POLICY. 
     [Condition of type TYPE-ERROR] 

    Restarts: 
    0: [ABORT] Abort compilation. 
    1: [*ABORT] Return to SLIME's top level. 
    2: [ABORT] abort thread (#<THREAD "worker" RUNNING {1004247983}>) 

    Backtrace: 
     0: (SB-C::POLICY-TO-DECL-SPEC NIL T NIL) 
      Locals: 
      FORCE-ALL = NIL 
      POLICY = NIL 
      RAW = T 
     1: (RESTRICT-COMPILER-POLICY NIL 0) 
     2: (SWANK/SBCL::COMPILER-POLICY NIL) 
     3: ((LABELS SWANK/SBCL::CF :IN SWANK/BACKEND:SWANK-COMPILE-STRING)) 
     4: ((FLET SWANK/BACKEND:CALL-WITH-COMPILATION-HOOKS :IN "/Users/colinmcd94/quicklisp/dists/quicklisp/software/slime-2.13/swank/sbcl.lisp") #<CLOSURE (LAMBDA NIL :IN SWANK/BACKEND:SWANK-COMPILE-STRING) {1.. 
     5: ((FLET SWANK/BACKEND:SWANK-COMPILE-STRING :IN "/Users/colinmcd94/quicklisp/dists/quicklisp/software/slime-2.13/swank/sbcl.lisp") "(defun hello-world() (format t \"hello world.\")) ..) 
     6: ((LAMBDA NIL :IN SWANK:COMPILE-STRING-FOR-EMACS)) 
     7: ((LAMBDA NIL :IN SWANK::COLLECT-NOTES)) 
     8: (SWANK::MEASURE-TIME-INTERVAL #<CLOSURE (LAMBDA NIL :IN SWANK::COLLECT-NOTES) {1004258B2B}>) 
     9: (SWANK::COLLECT-NOTES #<CLOSURE (LAMBDA NIL :IN SWANK:COMPILE-STRING-FOR-EMACS) {1004258AEB}>) 
    10: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA NIL :IN SWANK:COMPILE-STRING-FOR-EMACS) {1004258AAB}>) 
    11: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:COMPILE-STRING-FOR-EMACS "(defun hello-world() (format t \"hello world.\")) ..) 
    12: (EVAL (SWANK:COMPILE-STRING-FOR-EMACS "(defun hello-world() (format t \"hello world.\")) ..) 
    13: (SWANK:EVAL-FOR-EMACS (SWANK:COMPILE-STRING-FOR-EMACS "(defun hello-world() (format t \"hello world.\")) ..) 
    14: ((LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD)) 
    15: (SWANK/SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD) {1006B33B7B}>) 
    16: ((FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/Users/colinmcd94/quicklisp/dists/quicklisp/software/slime-2.13/swank/sbcl.lisp") #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL :IN SWA.. 
    17: (SWANK::CALL-WITH-BINDINGS ((*STANDARD-OUTPUT* . #1=#<SWANK/GRAY::SLIME-OUTPUT-STREAM {1003B03FA3}>) (*STANDARD-INPUT* . #2=#<SWANK/GRAY::SLIME-INPUT-STREAM {1003A2C693}>) (*TRACE-OUTPUT* . #1#) (*ERR.. 
    18: ((LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD)) 
    19: ((FLET #:WITHOUT-INTERRUPTS-BODY-1182 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE)) 
    20: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE)) 
    21: ((FLET #:WITHOUT-INTERRUPTS-BODY-600 :IN SB-THREAD::CALL-WITH-MUTEX)) 
    22: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {820BCFB}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD ".. 
    23: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "worker" RUNNING {1004247983}> NIL #<CLOSURE (LAMBDA NIL :IN SWANK::SPAWN-WORKER-THREAD) {100424792B}> (#<SB-THREAD:THREAD "worker" RU.. 
    24: ("foreign function: call_into_lisp") 
    25: ("foreign function: new_thread_trampoline") 
    26: ("foreign function: _pthread_body") 
    27: ("foreign function: _pthread_body") 
    28: ("foreign function: thread_start") 

Снова, это работает в Aquamacs со слизью, используя SBCL.

ответ

3

Выполнение (sb-ext:restrict-compiler-policy 'debug) является обходным решением.

Я честно не знаю достаточно, чтобы понять, почему это работает, но это так.

+4

Это правильное решение на данный момент. Я положил его в свой .sbclrc. Это из-за случайного изменения API в SBCL. SLIME был обновлен, чтобы обойти его, но Quicklisp еще не обладает последним слизом. Quicklisp будет обновляться с новой слизью на следующей неделе. – Xach

+0

Работал как шарм! Спасибо!!!! На следующей неделе я обязательно обновлю Quicklisp. –

0

Теперь, когда quicklisp был обновлен, вы можете обновить :quicklisp-slime-helper с помощью (ql:quickload :quicklisp-slime-helper), перезапустить SLIME и быть хорошим.

Возможно, вам понадобится сначала запустить (ql:update-client) и (ql:update-all-dists), в зависимости от того, сколько времени прошло с момента последнего обновления.