I am on the bleeding edge of everything here: SLIME and CMUCL built out of CVS repositories, GNU Emacs 23.1.1.
A few months ago, SLIME and CMUCL stopped functioning for me in any acceptable way. I vaguely correlate this to my switching from GNU Emacs 22 to 23, but can't be sure that the Emacs upgrade was indeed the deciding factor.
I kept hoping that some upgrade of something would fix the situation but this hasn't happened.
I see these three issues now:
* SLIME' responsiveness is poor. It used to do the evaluation and print results instantly, now with a noticeable delay.
Which may be explained by the next item.
* On every evaluation I see a message like this:
Unexpected reply: ### (:ok "/xxx/")
* The above two issues are an annoyance, even if not a small one.
The real issue is that a failure to evaluate some Lisp expression results in a connection abort.
Below is a small demo -- the trimmed contents of various buffers.
Can anybody help me find the way out of my misery?
Thanks in advance.
============================================================ ---------------------------------------- try.lisp -------------------- (print (+ 1 0)) (print (/ 1 0))
---------------------------------------- *slime-repl cmucl* -------------------- ; SLIME 2010-04-12 1 CL-USER>
---------------------------------------- *Messages* -------------------- Connecting to Swank on port 31964.. [2 times] Wrote /xxx/try.lisp error in process filter: slime-dispatch-event: Unexpected reply: 24 (:ok "/xxx/") error in process filter: Unexpected reply: 24 (:ok "/xxx/") Evaluation aborted. Error during redisplay: (error Connection closed.) [2 times] Lisp connection closed unexpectedly: connection broken by remote peer
---------------------------------------- *inferior-lisp* -------------------- (progn (load "/app/lisp/slime/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.22110" :coding-system "utf-8-unix"))
CMU Common Lisp 2010-04-06 (20A Unicode), running on myhost With core: /app/lisp/cmucl/2010-04-06/lib/cmucl/lib/lisp-sse2.core Dumped on: Tue, 2010-04-06 18:18:50-04:00 on otherhost See http://www.cons.org/cmucl/ for support information. Loaded subsystems: Unicode 1.7 with Unicode version 5.1.0 Python 1.1, target Intel x86/sse2 CLOS based on Gerd's PCL 2010-03-19 15:19:03 * Warning: These Swank interfaces are unimplemented: (FRAME-CALL RESTART-FRAME SLDB-STEP-INTO SLDB-STEP-NEXT SLDB-STEP-OUT) ;; Swank started at port: 31964. 31964 * ; Comment: $Header: /project/cmucl/cvsroot/src/pcl/simple-streams/external-formats/utf-8.lisp,v 1.5 2009-09-28 18:12:59 rtoy Exp $
; Compiling DEFINE-EXTERNAL-FORMAT UTF-8: ; Compiling DEFINE-EXTERNAL-FORMAT UTF-8: ; Byte Compiling Top-Level Form:
;; swank:close-connection: Arithmetic error DIVISION-BY-ZERO signalled. Operation was KERNEL::DIVISION, operands (1 0). ;; Event history start: invoke-or-queue-interrupt: #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {48442239}> wait-for-event: (COMMON-LISP:OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T READ: "(:emacs-rex (swank:autodoc (quote ("print" ("/" "1" "0") swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 23) " dispatch-event: (:EMACS-REX (SWANK:AUTODOC (QUOTE ("print" ("/" "1" "0") SWANK::%CURSOR-MARKER%)) :PRINT-RIGHT-MARGIN 80) "COMMON-LISP-USER" T 23) send-event: #<Process Initial {48B7F79D}> (:EMACS-REX (SWANK:AUTODOC (QUOTE ("print" ("/" "1" "0") SWANK::%CURSOR-MARKER%)) :PRINT-RIGHT-MARGIN 80) "COMMON-LISP-USER" 23) dispatch-event: (:RETURN #<Process Initial {48B7F79D}> (:OK "(print ===> object <=== &optional stream)") 23) WRITE: (:return (:ok "(print ===> object <=== &optional stream)") 23) wait-for-event: (COMMON-LISP:OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T process-io-interrupt 0 ... done process-io-interrupt 0 ... invoke-or-queue-interrupt: #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {4844D969}> wait-for-event: (COMMON-LISP:OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T process-io-interrupt 0 ... done process-io-interrupt 0 ... invoke-or-queue-interrupt: #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {48454FD9}> wait-for-event: (COMMON-LISP:OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T READ: "(:emacs-rex (swank:set-default-directory "/xxx/") "COMMON-LISP-USER" t 24) " dispatch-event: (:EMACS-REX (SWANK-BACKEND:SET-DEFAULT-DIRECTORY "/xxx/") "COMMON-LISP-USER" T 24) send-event: #<Process Initial {48B7F79D}> (:EMACS-REX (SWANK-BACKEND:SET-DEFAULT-DIRECTORY "/xxx/") "COMMON-LISP-USER" 24) dispatch-event: (:RETURN #<Process Initial {48B7F79D}> (:OK "/xxx/") 24) WRITE: (:return (:ok "/xxx/") 24) process-io-interrupt 1 ... invoke-or-queue-interrupt: #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {48460341}> queue-interrupt: #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {48460341}>process-io-interrupt 1 ... done process-io-interrupt 1 ... invoke-or-queue-interrupt: #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {4846DE99}> too many queued interrupts wait-for-event: (COMMON-LISP:OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T wait-for-event: (COMMON-LISP:OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T READ: "(:emacs-rex (swank:interactive-eval-region "(print (+ 1 0)) (print (/ 1 0)) ") "COMMON-LISP-USER" t 25) " dispatch-event: (:EMACS-REX (SWANK:INTERACTIVE-EVAL-REGION "(print (+ 1 0)) (print (/ 1 0)) ") "COMMON-LISP-USER" T 25) send-event: #<Process Initial {48B7F79D}> (:EMACS-REX (SWANK:INTERACTIVE-EVAL-REGION "(print (+ 1 0)) (print (/ 1 0)) ") "COMMON-LISP-USER" 25) dispatch-event: (:WRITE-STRING " 1 ") WRITE: (:write-string " 1 ") dispatch-event: (:RETURN #<Process Initial {48B7F79D}> (:ABORT) 25) WRITE: (:return (:abort) 25) close-connection: Arithmetic error COMMON-LISP:DIVISION-BY-ZERO signalled. Operation was KERNEL::DIVISION, operands (1 0). ... deinstall-sigio-handler... deinstall-sigio-handler...done ;; Event history end. ;; Backtrace: (0 ((FLET SWANK-BACKEND:CALL-WITH-DEBUGGING-ENVIRONMENT) #<Function "DEFUN SAFE-BACKTRACE" {48E55D19}>)) (1 (SWANK::SAFE-BACKTRACE)) (2 ("DEFUN CALL-WITH-CONNECTION" #<SWANK-RPC:SWANK-PROTOCOL-ERROR {48478675}>)) (3 (SIGNAL #<SWANK-RPC:SWANK-PROTOCOL-ERROR {48478675}>)) (4 (ERROR #<SWANK-RPC:SWANK-PROTOCOL-ERROR {48478675}>)) (5 ("DEFUN ENCODE-MESSAGE" #<DIVISION-BY-ZERO {4847824D}>)) (6 (SIGNAL #<DIVISION-BY-ZERO {4847824D}>)) (7 (ERROR DIVISION-BY-ZERO :FUNCTION-NAME KERNEL::INTEGER-/-INTEGER :OPERATION ...)) (8 (KERNEL::DIVISION-BY-ZERO-ERROR-HANDLER KERNEL::INTEGER-/-INTEGER #.(SYSTEM:INT-SAP #x47FD6878) #<Alien (* SYSTEM:SYSTEM-AREA-POINTER) at #x47FD6550> (19 83))) (9 (KERNEL::INTERNAL-ERROR #.(SYSTEM:INT-SAP #x47FD6550) #<unused-arg>)) (10 ("Foreign function call land")) (11 ("Foreign function call land")) (12 ("Foreign function call land")) (13 ("Foreign function call land")) (14 (KERNEL::INTEGER-/-INTEGER 1 0)) (15 (/ 1 0)) (16 (EVAL (PRINT (/ 1 0)))) (17 (SWANK::EVAL-REGION "(print (+ 1 0))\n(print (/ 1 0))\n")) (18 ("DEFSLIMEFUN INTERACTIVE-EVAL-REGION")) (19 (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME interactive evaluation request." #<Closure Over Function "DEFSLIMEFUN INTERACTIVE-EVAL-REGION" {48476CB9}>)) (20 (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<Closure Over Function "DEFSLIMEFUN INTERACTIVE-EVAL-REGION" {48476CA9}>)) (21 (SWANK::EVAL-FOR-EMACS (SWANK:INTERACTIVE-EVAL-REGION "(print (+ 1 0))\n(print (/ 1 0))\n") "COMMON-LISP-USER" 25)) (22 (SWANK::PROCESS-REQUESTS T)) (23 (SWANK-BACKEND:CHECK-SLIME-INTERRUPTS)) (24 (SWANK::WAIT-FOR-EVENT (OR (:EMACS-REX . SWANK::_) (:EMACS-CHANNEL-SEND . SWANK::_)) T)) (25 (SWANK::PROCESS-REQUESTS T)) (26 (SWANK-BACKEND:CHECK-SLIME-INTERRUPTS)) (27 (SWANK::PROCESS-IO-INTERRUPT #<SWANK::CONNECTION {4862D7D5}>)) (28 (SWANK-BACKEND::SIGIO-HANDLER #<unused-arg> #<unused-arg> #<unused-arg>)) (29 ("Foreign function call land")) (30 ("Foreign function call land")) (31 ("Foreign function call land")) (32 ("Foreign function call land")) (33 (LISP::DO-OUTPUT #<Stream for descriptor 5> #.(SYSTEM:INT-SAP #x281E1000) 0 57 ...)) (34 (LISP::FLUSH-OUTPUT-BUFFER #<Stream for descriptor 5>)) (35 (LISP::FD-STREAM-MISC-ROUTINE #<Stream for descriptor 5> :FINISH-OUTPUT NIL #<unused-arg>)) (36 (FINISH-OUTPUT #<Stream for descriptor 5>)) (37 (SWANK-RPC:ENCODE-MESSAGE (:RETURN (:OK "/xxx/") 24) #<Stream for descriptor 5>)) (38 ((FLET #:G0 SWANK::EVAL-FOR-EMACS))[:CLEANUP]) (39 (SWANK::EVAL-FOR-EMACS (SWANK-BACKEND:SET-DEFAULT-DIRECTORY "/xxx/") "COMMON-LISP-USER" 24)) (40 (SWANK::PROCESS-REQUESTS T)) (41 ("DEFUN HANDLE-REQUESTS")) (42 ("DEFINTERFACE CALL-WITH-DEBUGGER-HOOK" #<Function SWANK:SWANK-DEBUGGER-HOOK {48BE7AA9}> #<Closure Over Function "DEFUN HANDLE-REQUESTS" {4845BB99}>)) (43 (SWANK::CALL-WITH-BINDINGS ((*STANDARD-OUTPUT* . #) (*STANDARD-INPUT* . #) (*TRACE-OUTPUT* . #) (*ERROR-OUTPUT* . #) (*DEBUG-IO* . #<Two-Way Stream, Input = #, Output = #>) ...) ..)) (44 (SWANK::CALL-WITH-CONNECTION #<SWANK::CONNECTION {4862D7D5}> #<Closure Over Function "DEFUN HANDLE-REQUESTS" {4845BB99}>)) (45 (SWANK::HANDLE-REQUESTS #<SWANK::CONNECTION {4862D7D5}> T)) (46 (SWANK::INVOKE-OR-QUEUE-INTERRUPT #<Closure Over Function "DEFUN PROCESS-IO-INTERRUPT" {48454FD9}>)) (47 (SWANK::PROCESS-IO-INTERRUPT #<SWANK::CONNECTION {4862D7D5}>)) (48 (SWANK-BACKEND::SIGIO-HANDLER #<unused-arg> #<unused-arg> #<unused-arg>)) (49 ("Foreign function call land")) (50 ("Foreign function call land")) (51 ("Foreign function call land")) (52 ("Foreign function call land")) (53 (SYSTEM:WAIT-UNTIL-FD-USABLE 0 :INPUT NIL)) (54 (LISP::DO-INPUT #<Stream for Standard Input>)) (55 ("PRECOMPILE-EF-SLOT ISO8859-1" #<Stream for Standard Input> NIL (LISP::*EOF*))) (56 (LISP::SYNONYM-IN #<Synonym Stream to SYSTEM:*STDIN*> NIL (LISP::*EOF*))) (57 (LISP::TWO-WAY-IN #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (LISP::*EOF*))) (58 (READ-CHAR #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (LISP::*EOF*) NIL)) (59 (LISP::READ-PRESERVING-WHITESPACE-INTERNAL #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (:EOF) T)) (60 (LISP::READ-PRESERVING-WHITESPACE-INTERNAL #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (:EOF) NIL)) (61 (LISP::READ-PRESERVING-WHITESPACE-INTERNAL 4 #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (:EOF) ...)[:EXTERNAL]) (62 (LISP::READ-INTERNAL #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (:EOF) NIL)) (63 (READ #<Two-Way Stream, Input = #<Synonym Stream to SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL (:EOF) NIL)) (64 (LISP::%TOP-LEVEL)) (65 ((LABELS LISP::RESTART-LISP SAVE-LISP))) ;; Connection to Emacs lost. [ ;; condition: Arithmetic error DIVISION-BY-ZERO signalled. Operation was KERNEL::DIVISION, operands (1 0). ;; type: DIVISION-BY-ZERO ;; encoding: utf-8-unix vs. UTF-8 ;; style: :SIGIO dedicated: NIL]
---------------------------------------- *slime-events* --------------------
(:emacs-rex (swank:connection-info) "COMMON-LISP-USER" t 1) (:indentation-update (("with-host" . 1) ("with-read-buffer" . 1) ("enumerate-matches" . 1) ("defloader" . 2) ("prepare-for-fast-read-char" . 1) ("input-wrapper" . 1) ("output-wrapper" . 1) ("with-symbol" . 1) ("def-output-routines" . 1) ("maybe-sap-maybe-string" . 1) ("with-pathname" . 1) ("with-fop-stack" . 1) ("prepare-for-fast-read-byte" . 1) ("define-function-name-syntax" . 2) ("with-float-traps-masked" . 1) ("without-package-locks" . 0) ("def-source-context" . 2) ("enumerate-search-list" . 1) ("do-info" . 1) ("with-c-strvec" . 1) ...)) (:return (:ok (:pid 22130 :style :sigio :encoding (:coding-system "utf-8-unix" :external-format "UTF-8") :lisp-implementation (:type "CMU Common Lisp" :name "cmucl" :version "2010-04-06 (20A Unicode)" :program "/app/lisp/cmucl/2010-04-06/bin/lisp") :machine (:instance "myhost" :type "X86" :version "X86") :features (:cl-ppcre :split-sequence :asdf :gerds-pcl :pcl-structures :portable-commonloops :pcl :cmu20 :cmu20a :python :conservative-float-type :modular-arith :mp :x86 :sse2 :linkage-table :relative-package-names :executable :elf :freebsd ...) :modules ("ASDF" "LOOP") :package (:name "COMMON-LISP-USER" :prompt "CL-USER") :version "2010-04-12")) 1) (:emacs-rex (swank:swank-require '(:swank-package-fu :swank-presentations :swank-fuzzy :swank-fancy-inspector :swank-c-p-c :swank-arglists)) "COMMON-LISP-USER" t 2) (:return (:ok ("SWANK-ARGLISTS" "SWANK-FANCY-INSPECTOR" "SWANK-FUZZY" "SWANK-C-P-C" "SWANK-PRESENTATIONS" "SWANK-PACKAGE-FU" "ASDF" "LOOP")) 2) (:emacs-rex (swank:create-repl nil) "COMMON-LISP-USER" t 3) (:return (:ok ("COMMON-LISP-USER" "CL-USER")) 3) (:emacs-rex (swank:buffer-first-change "/xxx/try.lisp") "COMMON-LISP-USER" t 4) (:return (:ok nil) 4) (:emacs-rex (swank:autodoc '("foir" swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 5) (:return (:ok :not-available) 5) (:emacs-rex (swank:autodoc '("for" swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 6) (:return (:ok :not-available) 6) (:emacs-rex (swank:autodoc '("forma" swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 7) (:return (:ok :not-available) 7) (:emacs-rex (swank:autodoc '("format" "" swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 8) (:return (:ok "(format ===> destination <=== control-string &rest format-arguments)") 8) (:emacs-rex (swank:autodoc '("print" "" swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 9) (:return (:ok "(print ===> object <=== &optional stream)") 9) (:emacs-rex (swank:autodoc '("print" ("" swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 10) (:return (:ok "(print ===> object <=== &optional stream)") 10) (:emacs-rex (swank:autodoc '("print" ("+" swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 11) (:return (:ok "+ => (PROGN ..)") 11) (:emacs-rex (swank:autodoc '("print" ("+" "" swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 12) (:return (:ok "(+ &rest ===> args <===)") 12) (:emacs-rex (swank:autodoc '("print" ("+" "1" swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 13) (:return (:ok "(+ &rest ===> args <===)") 13) (:emacs-rex (swank:autodoc '("print" ("+" "1" "" swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 14) (:return (:ok "(+ &rest ===> args <===)") 14) (:emacs-rex (swank:autodoc '("print" ("+" "1" "0" swank::%cursor-marker%)) :print-right-margin 80) "COMMON-LISP-USER" t 15) (:return (:ok "(+ &rest ===> args <===)") 15) (:emacs-rex (swank:autodoc '("print" ("+" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 16) (:return (:ok "(print ===> object <=== &optional stream)") 16) (:emacs-rex (swank:autodoc '(("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 17) (:return (:ok :not-available) 17) (:emacs-rex (swank:autodoc '("ri" ("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 18) (:return (:ok :not-available) 18) (:emacs-rex (swank:autodoc '("rint" ("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 19) (:return (:ok :not-available) 19) (:emacs-rex (swank:autodoc '("r" ("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 20) (:return (:ok :not-available) 20) (:emacs-rex (swank:autodoc '(("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 21) (:return (:ok :not-available) 21) (:emacs-rex (swank:autodoc '("pring" ("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 22) (:return (:ok :not-available) 22) (:emacs-rex (swank:autodoc '("print" ("/" "1" "0") swank::%cursor-marker%) :print-right-margin 80) "COMMON-LISP-USER" t 23) (:return (:ok "(print ===> object <=== &optional stream)") 23) (:emacs-rex (swank:set-default-directory "/xxx/") "COMMON-LISP-USER" t 24) (:return (:ok "/xxx/") 24) (:emacs-rex (swank:interactive-eval-region "(print (+ 1 0))\n(print (/ 1 0))\n") "COMMON-LISP-USER" t 25) (:return (:ok "/xxx/") 24) (:write-string "\n1 ") (:return (:abort) 25)
---------------------------------------- *scratch* -------------------- (insert (format "\n=>\n%s\n%s" slime-lisp-implementations slime-net-coding-system)) => ((cmucl (/app/lisp/cmucl/2010-04-06/bin/lisp) :coding-system utf-8-unix)) utf-8-unix
============================================================
-- Alex -- alex-goncharov@comcast.net --