[Openmcl-devel] Why not #"foo" for ns-strings?
Ron Garret
ron at flownet.com
Tue Aug 25 23:24:12 PDT 2009
I started playing around with a package that co-opts the #@ reader
macro, which in CCL is used to create constant ns-string objects. It
seems to me that this would be a natural candidate for the #" dispatch
reader macro instead of #@, since the only character that can legally
follow #@ is a double quote.
I also have this in my personal init.lisp file:
(defun make-string-reader (c1 c2)
(set-macro-character
c1
(lambda (stream c)
(declare (ignore c))
(with-output-to-string (s)
(loop for c = (read-char stream)
with cnt = 1
if (eql c c1) do (incf cnt)
else if (eql c c2) do (decf cnt)
until (and (eql c c2) (eql cnt 0))
do (princ c s))
s))
t))
(make-string-reader #\« #\»)
This lets me use European-style «quotes» to create strings. These
have the advantage that they are self-balancing, so I can nest strings
without having to use backslash escapes. (There are also “smart
quotes” characters which could be used to create self-balancing
strings, but there's a bug in the readtable code at the moment that
barfs on reader macros for characters whose code-char is >256.)
My question is: how would people feel about adopting one of these as a
standard for ns-strings instead of #@? Either #"foo" or #«foo» or
#“foo”? That would free up the #@ reader macro, and especially the
last two would be at very low risk of collision with third-party code
since no one is actually using unicode in their code despite the fact
that all major implementations support it nowadays. Existing code
could be converted with a global search and replace of «#@"».
Thoughts?
rg
More information about the Openmcl-devel
mailing list