Hi.
A recent change where UTF-8 was made the network coding system didn't take into account the end-on-line transformation that some implementations do. A very disturbing proliferation of ^M infested the REPL and the Inspector.
I'm sending a patch (in attachment) to make ACL and LW use a UTF-8 coding system that doesn't transform line endings, specifically to CRLF in Windows. Please take a look at it.
I tested ACL 8.2 Express and LispWorks 6.0.1 Personal, and both seem to be working fine. I evaluated some expressions in the REPL:
CL-USER> (princ " ")
" "
I also compiled a file:
(cl:in-package #:cl-user)
(defun test-string () (princ " "))
Then, in the REPL:
CL-USER> (test-string)
" "
I got the same result when compiling the defun/region separately.
The inspector now seems fine.
Out of curiosity, I tested in other implementations. The inspector seems fine in all of them, so here are the REPL tests.
ABCL 1.0.1 jre7u3:
CL-USER> (princ " ") ^M " " ; Compiling C:/Users/Paulo/Lisp/string.lisp ...^M ; Wrote c:/Users/Paulo/Lisp/string.abcl (0.081 seconds)^M CL-USER> (test-string) ^M " " STYLE-WARNING: redefining TEST-STRING at top level^M CL-USER> (test-string) ^M " "
ABCL has a specific ext:make-slime-output-stream. it instances a SlimeOutputStream which inherits Stream's default definition of eolStyle, which is platformEolStyle, hence it outputs CRLF's when printing.
I think that the correction requires a change in ABCL, either by not using the platform dependent eol-style, or by accepting an optional external-format or eol-style so it can be overriden in the case of a newer SLIME version of swank-abcl.lisp and to keep the old behaviour in older versions.
CLisp 2.49:
CL-USER> (princ " ")
" " ;; Compiling file C:\Users\Paulo\Lisp\string.lisp ... ;; Wrote file C:\Users\Paulo\Lisp\string.fas 0 errors, 0 warnings ;; Loading file C:\Users\Paulo\Lisp\string.fas ... ;; Loaded file C:\Users\Paulo\Lisp\string.fas CL-USER> (test-string)
" " WARNING: DEFUN/DEFMACRO: redefining function TEST-STRING in top-level, was defined in C:\Users\Paulo\Lisp\string.fas
CL-USER> (test-string)
" "
Works just fine.
ClozureCL 1.7 x64:
CL-USER> (princ " ")
" " ;Compiling "c:/Users/Paulo/Lisp/string.lisp"... CL-USER> (test-string) ^M "^M " TEST-STRING CL-USER> (test-string)
" "
It reads the source file as-is, hence the ^M's appear only with the compiled file test, but not with the compiled defun/region test. I don't know if this is by design.
SBCL:
CL-USER> (princ " ")
" " ; compiling file "c:/Users/Paulo/Lisp/string.lisp" (written 11 MAR 2012 10:22:55 PM):
; c:/Users/Paulo/Lisp/string.fasl written ; compilation finished in 0:00:00.017 CL-USER> (test-string) ^M "^M " ; compiling (DEFUN TEST-STRING ...) STYLE-WARNING: redefining COMMON-LISP-USER::TEST-STRING in DEFUN
CL-USER> (test-string)
" "
Same as ClozureCL.
Please excuse the long boring message and any formatting error in the attached patch file.
Regards,
Paulo Madeira
* Paulo Madeira [2012-03-11 23:32] writes:
Hi.
A recent change where UTF-8 was made the network coding system didn't take into account the end-on-line transformation that some implementations do. A very disturbing proliferation of ^M infested the REPL and the Inspector.
I'm sending a patch (in attachment) to make ACL and LW use a UTF-8 coding system that doesn't transform line endings, specifically to CRLF in Windows. Please take a look at it.
Thanks for the patch. Committed.
Helmut