This page describes the January 1, 2006 revisions to the San programming
language specification. Many of the changes were suggested during an
preliminary implementation of the San interpreter in San. Each revision
description consists of a informal description of the original text, an informal
description of the new text including motivation, and a listing of altered,
delelted, and new sections.
Added a detailed table of contents Original text: (none) New text: A final section at the end of the page was added
that contains links to all title levels; it was added to make it easier
Changed the comment character Original text: Comments start with // (not enclosed in
within a line and
continue to the end of the line, or if / was the first non
white space character then the entire line is a comment.
New text: Comments start with # (if not enclosed in
a string) and continue to the end of the line. A minor
justification for this change is that it simplifies lexing
and parsing; the real reason for it is that the author
decided he preferred the # character.
old 3.3.2 was deleted and the old
renumbered to 3.3.2. Also 76 occurrences of //
were changed to #.
Added case expression lists in switches Original text: The case statement consists of the
case keyword, a case expression, a colon (:), and an action.
New text: Instead of a single case expression there
can be a list of case expressions.
Object signatures Original text: (none)
New text: The object signature is the list of aspects
and the vector of fields. Object signatures can change during
Expanded object copying Original text: The only kind of usage for the set
command was simple object cloning.
New text: The usage is extended to include any kind
of assignment, with the caveat that object signatures in lists
must be consistent.
Added the “self” object Original text: The original specification provided
for “naked” identifiers, i.e., identifiers that omit the object
name because the reference is to the current object.
New text: The “self” identifier has been added. Naked
identifiers are retained as a convenience but not as a necessity.
Restrict string substitution Original text: Originally the string substitution operator
could be used to produce modified identifiers.
New text: The string substitution operator can only
produce strings. Identifiers may not be modified; this revision
is needed for compilable code. It also facilitates parsing.