Re: Why are byte ports "ports" as such? Jonathan S. Shapiro 21 May 2006 15:28 UTC

On Sun, 2006-05-21 at 07:31 -0700, bear wrote:
> If you use a character encoding that has multibyte sequences
> for some unicode codepoints, you can be left with up to seven
> bytes that are the "trailing part" of a codepoint before the
> next codepoint begins.

Nit: 5 bytes. The maximum legal code point in UTF-8 is 6 bytes.

>   And given combining codepoints and
> variation selectors, the next codepoint may not begin a new
> character itself.

Actually, this raises two very important points:

  1. The correct primitive is READ-CODEPOINT, not READ-CHAR.
     READ-CHAR is a library routine.

     Implication: text ports are not primitive either, and
     (whatever they may be named) should be understood as
     codepoint ports.

  2. The standard must define a normalization form as well as
     an encoding for input units of compilation.

     The universal answer in every other system/language that I have
     seen has been: UTF-8, normalization form C.

     I suspect that this will generate much debate as everyone
     expresses opinions about it, and will then turn out to be
     the "obvious" answer in hindsight, so let's get it over
     with :-)

One very nice attribute of this approach is that the implementation can
use READ-CODEPOINT (which has unambiguous behavior) directly, leaving
READ-CHAR and text ports as a matter for library implementation.