Subject: Re: MD5 in LISP and abstraction inversions
From: Erik Naggum <erik@naggum.net>
Date: Wed, 31 Oct 2001 23:23:32 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3213559409134408@naggum.net>

* Francois-Rene Rideau <fare@tunes.org>
| I was looking for a Common LISP implementation of MD5, but found none.

  Several implementations are available for those who ask, some as fast as
  those written in C, and about as low-level as C versions, too.

| Horrible things that get in the way: CL characters, and lack of builtin
| modular operators.

  Huh?  You probably mean that you open a file with element-type character
  and since you get what you asked for, but not what you wanted, you blame
  the language instead of your own incompetence at expressing your wishes.
  If you really want to read a file of 8-bit bytes, specify it, and you get
  exactly what you want.

| The problem is that CL purports to be a high-level language, but actually
| provides gratuitously incompatible and subtly unusable access to what is
| ought to be low-level constructs.

  Huh?  This sounds like a disgruntled programmer more than a language
  problem.  Perhaps we would be able to judge for ourselves if you posted
  the actual _code_ you wrote to arrive at these weird conclusions?

| The world has standardized on low-level byte streams as the universal
| medium for communication of data, including text.

  Which is a mistake, since they run into an enormous amount of trouble
  with supporting more than one character encoding.  The Unix model is one
  of those "simpler than possible" models that do not actually work when
  pushed too hard.  That some operations require punning on the lowest
  level of representation and that this is not only possible, but easy in
  C, is not necessarily a good thing.  Such representational issues should
  be explicit.  Even C++ has discovered the truth in this, these days.

  What has stopped you from using "low-level byte streams" in _your_ code?

| Yet, CL strings are based on a pseudo-high-level characters that are not
| portably interoperable with worldly text, much less efficiently.

  Whatever that means.  I think you are simply seriously confused and would
  have come a lot further if you had asked for help or read _all_ the fine
  documentation before you became so frustrated, but that seems to be
  incompatible with the tunes to which some people's egos play.

| That there can be direct support for >8 bit characters and for character
| attributes is great, but, particularly when efficient portable
| text-processing is meant, the only way is using (unsigned-byte 8), and
| suddenly, all builtin support for any text-processing at all vanish.

  The myopia suffered by people who think 8 bits is sufficient is probably
  never going to be discovered as long as they stare at their data from a
  distance of only 1 inch.  Just because you think you need a byte for a
  particular operation does not mean that you do, nor that anything else
  should conform to this particular requirement.

  Look, you are not doing text processing when you process bytes.  It works
  in some environments and under some assumptions, but if you are dealing
  with text, you deal with characters, not their coding, and if you deal
  with bytes, you are not dealing with characters.  It is that simple.
  Since the C mindset is so insidious and unconscious with those who suffer
  frm it, including some long-time (not Common) Lisp programmers, 

| CommonLISPers often diss Scheme for being such a small language, which
| forces development of incompatible implementation-specific extensions for
| any interesting work.  Well, we have to face the fact that in today's
| world, CL is also a small language by this criterion.  Much much smaller
| than C, SML, OCAML, Haskell, Mercury, Oz, Perl, Python, or whatever.

  What does this mean?  Your conclusions seem to be drawn from a lot of bad
  experiernce, but there is no way to determine whether that is due to your
  incompetence or to whatever it is you conclude it must have been, blaming
  the language for your problems.  Just post the evidence: The code and let
  people help you figure out what the real problem is.

///
-- 
  Norway is now run by a priest from the fundamentalist Christian People's
  Party, the fifth largest party representing one eighth of the electorate.
-- 
  Carrying a Swiss Army pocket knife in Oslo, Norway, is a criminal offense.