> I don't think it's generating a table, just calling generate-crc32-table.

Well, yeah. What do you suppose a function called generate-crc32-table could plausibly do?

> Let's remove that line and the difference is still ridiculous (even if you look at only one of the two implementations).

OK, lets' do that experiment:

(defun update-crc32-checksum (crc buffer end)
(declare (type (unsigned-byte 32) crc)
(type (simple-array (unsigned-byte 8) (*)) buffer)
(type fixnum end)
(optimize (speed 3) (debug 0) (space 0) (safety 0)))
(let ((cur (logxor crc #xffffffff)))
(declare (type (simple-array (unsigned-byte 32) (256)) table)
(type (unsigned-byte 32) cur))
(dotimes (i end)
(declare (type fixnum i))
(let ((index (logand #xff (logxor cur (aref buffer i)))))
(declare (type (unsigned-byte 8) index))
(setq cur (logxor (aref table index) (ash cur -8)))))
(logxor cur #xffffffff)))

That's 14 LOC, and 8 of those are declarations. For an example that you cherry-picked to be a perfect match for the kind of task that C was designed to do.

> You really don't see how ridiculous that is? You are chasing exactly the target that is unholy in your eyes.

You are completely missing the point, which was:

> It's not that they are without flaws, it's that it is a lot easier to fix/ignore/work-around the flaws than in other languages, where the flaws are unchangeable (except by the standards committee) and constantly in your face.

And specifically, you were responding to this:

> I'll bet that for any flaw you name, I'll be able to show you an easy way to work around it.

You haven't actually done that, you've just exhibited some nice clean C code and some ugly CL code. I was just showing you some of the possible ways that the Lisp code could be improved. I threw the infix in there not because I was advocating it, just to show you that it was possible.

So what exactly is it about that code that makes it "ridiculous" in your eyes? Whatever it is, I'll bet I can fix it with very little effort.

For example:

> Can't see any machine types here.

That's right, I left them out (because you can do that in CL if you want). Is that what you want to see, a cleaner syntax for type declarations? Because that's trivial, a few DEFTYPEs and a two-line macro.

> WHY was the Lisp code written in two different ways, but not the C code?

Because the Lisp code was trying to leverage system-specific optimizations while remaining portable. Do you seriously doubt that I could find an example of ugly #idef-laden C code that does the same?

> If you want automated and perfect bounds checking, you need [a bunch of stuff]

That's right. And why is it that you don't see that in C? Because adding that to C is hard. Really really hard. So hard that in 47 years it still hasn't been done in any standardized way. Yes, it's true that CL is not a particularly good systems programming language out of the box. But turning Lisp into a good systems programming language (if that's what you want) is relatively easy, almost an elementary exercise. And it can be done at the user level. No need to wait for a language design committee.

You want to know what is ridiculous? A language that after 47 years still doesn't have a linked list as part of its standard library because the language design makes it impossible.