Subject: Re: Reply to Ousterhout's reply (was Re: Ousterhout and Tcl ...)
From: Erik Naggum <erik@naggum.no>
Date: 1997/04/18
Newsgroups: comp.lang.scheme,comp.lang.scheme.scsh,comp.lang.lisp,comp.lang.tcl,comp.lang.functional,comp.lang.c++,comp.lang.perl.misc,comp.lang.python,comp.lang.eiffel
Message-ID: <3070347275198364@naggum.no>


* Charles Lin
| Erik Naggum (erik@naggum.no) wrote:
| || * Charles Lin
| || | If one had to choose a single type for everything, a string is a pretty
| || | good choice.  Why not a number?  How would you represent a string with a
| || | number?
| 
| || excuse me?  what you call a "string" already _is_ a number.  computers
| || don't have characters.  display devices and printers do.
| 
| || one of the first lessons of computer science _should_ have been internal
| || and external representation are so wildly different concepts that they
| || cannot even be confused, except, of course, by people who are fully aware
| || of the difference, but proceed to attempt to obliterate it.
| 
|      Egads.  You must have a slow newsserver.  You're at least the third
| person to mention, plus there have been follow-ups to that, and
| follow-ups to the follow-ups.  To summarize.  Yes, you can use numbers to
| encode anything.  Computers use binary representations for everything.
| Second, no one would want to use numbers to program in.  The point was
| given that a programming language has one type, what would be the most
| convenient type to use.  If your only type was integers, then strings
| would be a complete pain.  Just write a program that just prints "Hello,
| world".  I don't think you want to look up the ASCII representation just
| to force the use of numbers as types.

I'm sorry you didn't get the point simply because you think I have a slow
newsfeed.  at issue is that you must be the only person here who thinks
that "everything is a number" is equivalent to "everything is a decimal
digit string".  it isn't.  it never was.  the point is that your "string"
is merely the expression of a number in base 256, and the digits look like
characters because that is what happens when you throw those base-256
digits at your display device.  (adjust for other bases as appropriate.)

my second point also escapes you completely.  the internal representation
of a number is _not_ a digit string.  the internal representation of an
character is _not_ "the ASCII representation" (by which one must assume you
mean "string of decimal digits").  the idea is that there is a difference,
a very important difference, in fact, between internal and external
representation.  I get the impression that you don't understand this
difference.  whether a sequence of bits or bytes is given the external
representation of a decimal digit string, a string, an image on a bitmap
display, etc, is completely irrelevant to that sequence.

strings are excellent for external representation, and that's where they
should be used.  internal representation should be efficient for the
machine.  when and if you need to read or print a value, use the external
representation, but as long as you work with it internally, use something
more efficient.  where you define yourself relative to "external" is of
course an open issue.

from what I read here, it seems that even John Ousterhout has seen this
light in Tcl 8.0.

btw, only the Lisp family has a consistent interface between internal and
external representation, with the read/write functions.  when non-Lispers
try to reinvent this wheel, they get it completely wrong, such as Tcl.
some don't even understand the difference between internal and external
representation in the first place, so are precluded from appreciating this
lesson from the Lisp family.

#\Erik
-- 
I'm no longer young enough to know everything.