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

Re: #\a octothorpe syntax vs SRFI 10

On Thu, 30 Dec 2004, Aubrey Jaffer wrote:

>In the updated srfi-58.html I sent to the editor I have eliminated the
>#Axxx syntax.  The rank digit(s) will be required.

My own preference would be something like [3 instead of #A3(
making the bracket-number combination (without a separating space)
a token that means "start an array of this numerical order."

Scheme makes parentheses separating characters, but brackets,
officially, are not parentheses.  I think openbracket immediately
followed by a number is a much nicer (more succinct) way to
indicate array rank.

You could extend it for Uniform arrays, if you wanted:  [3u8
would mean "start a rank 3 array of 8-bit unsigned integers."
it's two fewer characters every time an array is used, and
the symbols are visually simpler.  I think that's important,

> | >  | So, for example, the two-by-two array of unsigned 16-bit integers from
> | >  | the document might be written as #,(ARRAY 2 u16 (0 1) (2 3)).

or as [2u16 [ 0 1][ 2 3]] .  This treats openbrace as a non-delimiter
character (allowing rank, etc, prefixes to be appended) and close
brace as a delimiter.

> | >  | General object arrays' types would be OBJECT (so #(FOO 1 #T ())
> | >  | could also be written #,(ARRAY OBJECT FOO 1 #T ()))

Or as [ FOO 1 #T '() ]

> | >  and character
> | >  | arrays' types would be CHAR (so "foo" could alternatively be
> | >  | written #,(ARRAY CHAR #\f #\o #\o)).

I don't think that "string" as a misspelling of "character array"
is consistent with the modern universe of character sets and encodings.
I think that

[c #\f #\o #\o ] should be a different entity than "foo."

>English doesn't much help remember Scheme exponent markers:
>  The letters `s', `f', `d', and `l' specify the use of SHORT, SINGLE,
>  DOUBLE, and LONG precision, respectively.
>I don't usually think of a DOUBLE as shorter than a LONG.  And where
>did `f' for SINGLE come from?  Maybe it is a C-ism.  In any case, it
>is one of five characters (with 'e') rather than one of five longer
>sequences to remember.

Actually, scheme exponent markers other than default-precision 'e'
are 's' 'f' 'd' and 'l', for  'short', 'float', 'double', and 'long',
which only makes sense if you are a C programmer.  The idea with C
was that these names would be distributed among the hardware float
types available, such that they are a nondecreasing sequence in
precision, although some precisions may be known by more than one
name.  Unfortunately, rather than actually carry through with the
plan, most C compilers now treat 'double' and 'long' as identical
precisions, while introducing new tokens, 'long long' or 'extended'
to denote even bigger precisions.

Personally, I think this is a wart in scheme numeric syntax; these
are properly about exactness and belong with the exactness prefix,
not in the exponent marker.