[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

First impressions of the specification



Hello all,

First of all, I should admit that I have only begun reading about sweet
expressions in the last hour or so.  I don't yet understand the rules.

I began to try to learn about them by jumping directly to the
"Specification" section of SRFI-110.  I'm sorry to say that I find that
section extraordinarily unclear.  Below, I've made notes about the parts
that I found confusing.

No doubt, I could find answers to all of these questions by reading the
rest of the document more carefully, and/or by reading the website of
the Readable Lisp S-expressions Project.  However, I don't think I
should have to.  The specification should stand on its own to a
reasonable extent, IMO anyway.

[In the list below, "first list", "second list", and "third list" refer
to the three numbered lists of rules in the "Basic specification"
section.]

* "term" is used before it is defined.

* The concepts of "parent" and "child" are not defined.

* The use of the term "parameter" is confusing.  This is a datum reader
  after all, which deals with "lists", not "parameters".  I'd prefer for
  it to describe more clearly what data structure is created.

* Item 1 (first list): What is an "indented line"?  Does that mean any
  line with non-empty indentation, or does it mean "indented more than
  some other line"?  If the latter, which other line?

* Item 3 (first list): Does "multiple terms" mean "multiple terms on
  the same line"?  If so, isn't this redundant with item 2 (but IMO
  more clearly stated)?

* Item 4 (first list): What is an "empty line"?  Is whitespace allowed?
  What about exclamation points?  What about comments?

* Item 6 (first list): What does "prefixed" mean?

* Are '!', '$', '\\', '$$$', '<*' and '*>' recognized as special tokens
  only if they are surrounded by whitespace?  (All of these characters
  except for backslash are considered extended alphabetic characters in
  standard scheme.)

* Later in the design rationale, it is mentioned in passing that '!'
  is only recognized as indentation at the beginning of a line.  Does
  that mean before any whitespace?  If so, that fact should be
  mentioned in the specification (which currently suggests that '!'
  could mixed freely with spaces or tabs).

* Item 1 (second list): What are lines with "initial indent"?  What
  happens if a line is not consistently indented?  What is meant by
  "preceding line"?  Does that mean "preceding non-empty line"?  (if
  so, what does "empty line" mean?)

* Item 3 (second list): What does "completely ignored" mean?  How does
  this relate to the "preceding line" of item 1 (second list)?

* Is '!' considered whitespace?

* Item 5 (second list): What does it mean for an expression to "start
  indented"?

* Item 6 (second list): Do datum comments ignore intervening '!'
  characters as well?

* In the rules that say neoteric expression are read (not sweet
  expressions), how are '!', '$', '\\' and '$$$' handled?

* Item 7 (second list): What does it mean exactly that block comments
  are "removed"?

* Item 1 (third list): Regarding GROUP, what does it mean "it
  represents no symbol at all, located at that indentation"?

* Item 2 (third list): What does "restart list processing" mean?  What
  is "the right-hand-side"?  What are "its sub-blocks"?  What happens
  if there's more than one '$' on a line?

* Item 3 (third list): Does "indentation" mean "non-empty
  indentation"?  (and does that definition apply generally?)  In the
  "entire sweet-expression that follows" what is considered the
  indentation of the first line of that expression?

* Item 4 (third list): What are "un-indented sweet expressions"?

* Why is there a distinction made between "advanced sweet-expression
  features" and the rest of the spec?

* In the paragraph immediately following the third list:

   * "MUST only be accepted ... is active"
      => "MUST NOT be accepted ... is not active"

   * When are sweet expressions accepted but "indentation processing"
     is not active?  (in collecting lists?)

   * What does it mean that a "character sequence" begins with
     "exactly the marker's first character"?  In "{$}", why is the '$'
     not considered a "character sequence"?

* IMO, it should probably be specified whether "#!no-sweet" disables
  curly-infix.

* In the examples, why are the s-expressions not indented according to
  the nearly-universally accepted conventions?

* The use of '$', '$$$', '<*', and '*>' as special tokens should be
  mentioned in the "Backwards compatibility" section.  These are all
  considered extended alphabetic characters by standard scheme.

* If an implementation implements sweet expressions by default, then
  they will have to be careful about writing symbols that contain '$',
  '<*' or '*>'.

* In the design rationale, there's a section entitled "Blank lines".
  Are these the same as the "empty lines" referenced in the
  specification?  If so, I suggest using just one term, and defining
  it clearly in the spec.

* When you speak of "traditional abbreviations", you might want to
  make a suggestion about how to handle additional non-standard
  abbreviations.  In particular, the abbreviations #', #`, #, and #,@
  are widely used by the syntax-case macro system.

    Regards,
      Mark