Subject: Re: ACL 6.0 Trial Edition ships with non ANSI reader behavior.
From: Erik Naggum <erik@naggum.net>
Date: 07 Nov 2000 04:57:40 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3182561860085563@naggum.net>

* John Foderaro -> Lieven Marchand
| Are you suggesting that we remove everything from our Lisp that isn't 
| part of the ANSI standard?

  John, please listen, now.  Nobody is suggesting any such thing.
  Least of all I, but you know that, already.  I support what you do
  in extra-standard work.  I have argued strongly, vociferously, and
  fervently at times, that people _should_ use implementation-defined
  extensions both to the language (like the effect of threads on the
  binding behavior of special variables) because that moves the
  language _forward_.  I don't support what you do to _break_ the
  standard, because that moves the language _backward_.

| Case sensitivity is just one more variant.  In fact it's far less
| likely to be a porting issue than, for example, the particular
| foreign function interface you use.

  It would be even less of a problem if you didn't break the workings
  of readtable-case.  I have shown you, with the code to support my
  claim, that your choice to break that functionality is gratuitous at
  best, and purposefully undermining the standard because you think
  that particular functionality is a kludge to fix a botch at worst.
  Your insistence on not getting this has pissed me off for a long
  time, and you're doing exactly nothing to understand it now, either.

| Ever since the Common Lisp definition started to gel evolution in the 
| Lisp language has slowed.   Lisp used to be a springboard for 
| experimenting with language ideas, then change became a dirty word.
| So yes, we have to get Lisp jumpstarted again.

  I think I have said so quite explicitly, but I said one more thing
  that you consistently omit: First we fully implement the _entire_
  standard, because that works as a better springboard to really know
  what needs to be changed or expanded.  If you jump from a broken
  springboard, it's just foolish to blame non-broken springboards, but
  that's what you keep doing, John.  Because you _break_ the standard
  you don't like, you _blame_ the standard for not supporting what you
  need, and use that as an excuse to continue to dislike it, but this
  is fantastically counter-productive.  But as I have shown you, by
  nuking that stupid *force-readtable-case-raw* thing, you can get
  what you want _within_ the standard operating parameters of the
  readtable and the printer control variables.  Take this to heart.

| > Although I like case insensitivity, and find very little value in
| > your |field| vs. |Field| example from a software engineering
| > aproach,
| 
| If you look at object oriented case sensitive languages you'll
| generally find this is the convention they use (Smalltalk, C++,
| Java).

  Others have chosen a namespace-like approach.  Like Common Lisp does
  special variables with *stars*, Dylan has classes with <brackets>.
  I actually think this makes a helluva lot of sense, that it is quite
  elegant, and furthermore, the abuse of case reminds me of German.
  The use of underscores is clearly Too Ugly, so some fools instead
  went for AlternatingCapitalLetters, which I can't help snicker at --
  it looks like the really want to be programming with crayons!  With
  their keyword-rich languages and highly redundant syntaxes, exactly
  what kept them from using internal _whitespace_ in identifiers?  If
  you look at the grammars of these languages, you find that there
  _is_ room for internal whitespace in identifiers.  So why don't
  they?  Braindamaged language designers who can't think outside of
  the box they live in, that's what.

  I don't think caving in to other language's bad choices is a good
  choice for doing stupid things in Common Lisp.  Common Lispers are
  like English-speakers: used to words with several meanings depending
  on the context and any modifying words in the context.  This is not
  a problem that needs solving.  In languages designed by people who
  have never quite progressed beyond coloring the parts of speech
  differently when parsing sentences, hating the fact that many words
  exist in multiple roles, they can't have an identifier named the
  same as a type, or a function the same as a variable.  This is so
  _ridiculous_!  How could anyone _be_ so unintelligent as to set this
  kind of mess up for himself?

  Now, why do I want a Common Lisp with case sensitive symbols and
  normally all lower-case symbols?  Because I want the _freedom_ of
  actually referring to a symbol as, say, NORDPOOL in all caps, and
  have it print back to me the same way it was read.  That has nothing
  to do with what other languages have conventions for -- the fact
  that they _have_ those conventions _came_ from that freedom, so it's
  the (fundamental) freedom I want, not their (random) conventions.

| That's the key point I've been making.  Old code continues to work
| either in ANSI mode or in Modern mode.

  This is just plain wrong, John.  It is only true if you follow Franz
  Inc coding standards in ANSI mode.  People don't do that.  They'd
  have to change their ways to use a case-sensitive Lisp no matter
  what you think, precisely because of the nature of the change.  I'm
  staring in disbelief at your repeated assertions that I know to be
  completely untrue and I wonder what the hell you're thinking.  Who
  the hell do you think you're fooling with this useless propaganda?

| That's my #1 goal for without it we require everyone to choose one
| or the other and people will just stick with the old ANSI version.

  I have given you an alternative that you won't listen to: Switch to
  lower-case symbol names as a separate step from case sensitivity.
  That way, people will find their dependencies on case first, and
  when that is gone (since it's a good idea not to have that kind of
  dependencies, since the case of symbols is an arbitrary decision).
  This can only be done if you are honest about the case change, which
  you are not, and which it bugs me to no end that you don't realize.

  _When_ people have become accustomed to lower-case symbols and have
  stopped making assumptions about the internal case of symbols,
  there's a natural fall-out: case sensitivity will be much closer,
  and much less harmful to introduce to the Common Lisp world.

  If you introduce case sensitivity with lower-case symbols at the
  same time, you will meet with legitimate and strong resistance,
  because it is just too much at once.  Contrary to what you think,
  there _is_ no migration path from a Lisp with upper-case symbols and
  a case-insensitive reader to a Lisp with lower-case symbols and a
  case-sensitive reader which you can walk, carrying all the baggage
  in one trip.  If you have to make several trips, you need to break
  the migration path in two or more parts so people can make one trip
  per "leg" in the whole migration path, but they must also not be
  allowed to return.  Each step must leave something behind that you
  _don't_ want.  In the case of Common Lisp, you are asking us to
  leave too _much_ behind that we are supposed not to want, like your
  stupid (sorry, John, but that's exactly what I think it is) disdain
  for the standard's solution to the problem of case, and we won't
  move.  Enticing people to make changes in their lives is hard work,
  but there are some things you need to do right: First, make them
  want to move by offering something at the other end of a journey
  across the migration path, but also make them want to leave
  something they do not want behind and make sure the two are so
  tightly coupled they can't have one without leaving the other.
  Second, make sure that you can't go back and pick up your old ways,
  or people will do just that.  The leaving behind thing is serious
  business.  (You seem to think that people are as disgusted with the
  case issue in Common Lisp that you cannot fathom that people do not
  want to leave readtables behind, but that's your _big_ mistake.)

  This wisdom actually comes from my father, who was in charge of
  "rationalization" at an industrial plant when I was just a kid.  At
  the time, it was a problem that workers returned to their old ways
  despite what the management thought were good reasons to move to a
  new way of doing things.  The problem wasn't that the reasons were
  not good enough.  The problem was that they _could_ return.  All the
  effort of the rationalization had been spent on making the move into
  a smooth process, like crossing a plain.  But that's just wrong.
  You have to cross a hill or at best a mountain pass to move to a
  better world and _stay_ there.  That's why I don't move to the
  U.S. -- it's easy enough for me to get the best of both worlds, not
  to mention some crucial developments in the politics of the U.S.,
  what with the dire consequences of having that moron George W. Bush
  in the driver's seat for four to eight years and his Supreme Court
  justices and other key personnel in charge for the next several
  decades, I imagine myself wanting out of there like so many other
  Americans currently feel like fleeing the place before it's too late.

  What you are suggesting to us all, John, is that we leave behind the
  things in the standard that you personally hate with a passion.
  (Please don't try to deny this -- at first I couldn't believe the
  hostility towards the resolution to the case issue in Common Lisp
  that you harbored.)  But most of us don't feel that way about these
  issues.  On the contrary, many of us are actually happy with the way
  it has been decided and how it has worked out.  We're not going to
  pick up your hatred and leave all that behind.  You're not that good
  a cult leader, John, and if you think in cult terms (like a "Modern
  Cult"), you're doing it all wrong.  The Common Lisp community is
  just that: a community, where we _respect_ a common set of rules and
  laws and standards.  You don't.  That's _your_ problem, not ours.
  You _must_ be thrown out if you persist in disrespecting what the
  rest of the community respects.  Don't do that to yourself!  This is
  a fight you can't win.  You can win if you _don't_ fight, however.

  If you want us to do something differently, make sure we get
  something back for doing it that can motivate us to join you.  The
  freedom of using and preserving case information is enough for me,
  for instance.  The simplicity of dealing with symbols that look
  excatly like they are written is appealing to me.  I think upper-
  case symbols look old and clunky and don't want to explain why we do
  things that way to people I'd like to use Common Lisp, not the least
  because I fail.  Case is an arbitrary decision if you have a case
  insensitive reader, but like all arbitrary decisions, they have to
  fall down on one side, and that side invariably carries some kinds
  of connotations with it.  Upper-case communicates "old and clunky"
  to a lot of people.  I'd like to move away from that to a new world.

  But you can't lie to people if you want them to join you.  That only
  works for idiots who run for President, and that's only because they
  get much power it's worth the loss of credibility to get it.  You
  are not going to get any power just because some Lispers move from
  upper- to lower-case symbol names, and you have already realized
  that you aren't going to get the entire community with you, anyway.
  That code written to ANSI X3.226-1994 is going to continue to work
  when ou downcase the symbol names and don't even downcase in the
  reader, but claim that you upcase, insead, is just obviously false.
  I can't believe you think you can fool anyone with that hoax, John.
  It pisses me off that you do, too, because it's such a gross insult
  to people's intelligence.  Common Lisp programmers are among the
  very smartest programmers around.  You treat them like they are
  stupid because they don't _rebel_ against upper-case symbol names
  when it's _you_ who are stupid because you _rebel_ instead of work
  _with_ the community to make this at first an implementation-defined
  property of the Common Lisp implementation.

  The way you're going about this case issue has bugged me for years.
  The way you have consistently denigrated those who don't agree with
  you on the case issue may in fact explain why they stick to _their_
  ways instead of listening to you, and why you don't budge, either.
  I was not there at the time, but I have a feeling from what I have
  read in the publicly available notes, that you went about this as
  irrationally and counter-productively in the committee as you do now
  and that you failed because you never realized that in order to get
  your choice, you have to make the other choice available, too.

  If we shall ever succeed in getting Common Lisp away from specifying
  that all symbol names are in upper-case and that the reader upcases,
  we must make it implementation-defined, forcing people to check if
  they need to know, and use symbols to get their names, not the other
  way around, meaning that the reader has the _only_ opportunity to
  leave _its_ decision behind in the code.  This means full support
  for readtable-case and the printer control variables, which you
  hate.  This means that the Franz Inc coding standards that works for
  both lower-case and upper-case Lisps becomes more popular, and we
  can get a new and better world where the internal case of symbols no
  longer matters.  But we do this the community-friendly way, through
  the standards bodies, with working systems that _respect_ the work
  of the standards bodies and the communities behind them.  You have
  shown us that a lower-case Lisp works just fine.  That is good.  I
  have shown you that you don't have to break readtable-case to get
  that lower-case Lisp.  That is good, too.  Now we can show people
  that if they write code that does not assume an arbitrary decision
  has been made one particular way, they will win something and write
  better and more robust code, too.  That is a good way to go.

  A splinter group, a Modern Cult, an implementation broken in the way
  it deals with specified behavior, is a very bad, very stupid way to
  make a community move in your chosen direction.  I am so thoroughly
  annoyed with you for not using your sometimes brilliant mind to get
  this simple picture, but continuing to do stupid things that hurts
  the Lisp community with your hatred for parts of the standard.  You
  have not listened to me before, and I sort of doubt that you will
  listen to me now, but you're a really smart guy with a serious
  hangup that needs to be cured before you can get the respect your
  work deserves.  The reason is that you don't respect those who hold
  opinions on the case issue different from your own and ignore their
  needs and their requirements, which are far more important things
  than whether some code "works" or not.

  With a standard, we build a society based on trust in common resepct
  for the standard, in best-effort implementations of it, and we hold
  implementers harmless for mistakes if they also work to fix them.
  With a standard, we build communities that work and communicate
  together with a common baseline that is not subject to violation
  except by malicious outsiders, criminals, and destructive forces of
  other kinds.  With a standard, we sign contracts and pay monies for
  work assuming the entire contents of the standard as part of the
  specification for that work by reference.  With a standard, we take
  part in a very, very long legal tradition that extends far beyond
  programming and contracts: That of trusting an authoritative third
  party to resolve our disputes, reasonable as well as unreasonable.

  With your standards-breaking attitude, specifically that _you_
  should be that authority (no longer a trusted third party) and that
  whatever _you_ decide shall prevail, you throw not just some parts
  of this framework of trust out the window, but _all_ of it.

  This works for Microsoft because they have succeeding in building
  their own society and community around trust in their authority,
  such as it is.  Microsoft has built their community around them.
  Franz Inc is a vendor that sells to a community they have not built
  on their own.  They do not own the community and they cannot dictate
  the community will.  Franz Inc _chose_ to implement Common Lisp
  instead of continuing Franz Lisp.  That meant something to you once.
  It means something to me now, and not just because I like the way
  the standard does things, but because I like standards as such,
  because I like lawa snd organized societies that relieve me of
  fighting for my rights all the time so I can instead form bonds with
  people based on mutual trust and respect.  Granted, today's
  political reality is a far cry from what I expect and want to live
  under, but my operating principle is that _I_ shall not contribute
  to any further destruction of society-building mechanisms as defined
  and reasonably well upheld.  I am deeply insulted and offended when
  you don't give a fuck about these principles, John, and just want to
  go off and destroy all the work that went into building this
  community just because you harbor a long-standing hatred for the
  committee's choice of upper-case symbol names.

  Let's build a bigger community, not more and smaller societies.
  Let's find ways to make room for your lower-case needs within the
  important political desire not to specify arbitrary decisions so
  strictly that reasonable choices are no longer available.  And that
  includes you, John: You have to make room for the upper-case needs
  and other people's desire to have reasonable choices, too.

#:Erik
-- 
  Does anyone remember where I parked Air Force One?
                                   -- George W. Bush