Poor source location tracking in backquote
The new backquote reader produces less precise source location
information than the old. For instance this example
(compile nil '(lambda () `(1 2 3 4 ,(progn (/ 1 0)))))))
returns (2 0) with the new reader and (1 5 2 0) with the old.
(1 5 2 0) is clearly better.
The reason for this is that the new reader creates a sb-impl::comma
structure for ,X while the old reader creates a list. Later, the
compiler walks this object in sb-c::sub-
descents down into lists but not into structs; so the compiler has
less precise source location information with the new reader.
comma struct, but I think a better solution is not to create those
comma structs in the first place and instead use a list representation
like (unquote X). Not only would lists produce better source location
information for SBCL itself, but also avoid some breakage in third
party code. It would also follow the suggestion in the spec:
Implementors who have no particular reason to make one choice or
another might wish to refer to IEEE Standard for the Scheme
Programming Language, which identifies a popular choice of
representation for such expressions that might provide useful to be
useful compatibility for some user communities.