[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ANN] Lua 5.2.0 (work1) now available
- From: Roberto Ierusalimschy <roberto@...>
- Date: Mon, 11 Jan 2010 13:22:06 -0200
> Yes, I'd like to *vehemently* protest about the included
> abomination of a bit library!
>
> It's INCOMPATIBLE to *all* other bit libraries out there! And it
> has nonsensical system-dependent semantics, esp. wrt. the number
> type. How on earth should one write portable code that way?
>
> Do you really want to repeat the learning curve that the lbitlib
> author and myself as the author of Lua BitOp had to go through?
> Have you read the lengthy page on portable bit operations
> semantics I wrote?
>
> I cannot understand what stops you from just dropping in the
> latest Lua BitOp and *be done*.
>
> [
> I strongly suggest to read "Hints on programming language design",
> by C.A.R. Hoare from 1973 (!):
>
> ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/73/403/CS-TR-73-403.pdf
>
> Especially chapter 12 (2) about "The language designer [...]":
> "One thing he should not do is to include untried ideas of his own.
> His task is consolidation, not innovation."
> ]
Your tone is rather offensive, but nevetheless I am going to answer
this message.
First, I read that paper, several times, along many years. I have great
respect for Tony Hoare, but he is not God. Most successful languages do
not follow this particular advice (I guess Java is the only exception ;).
About why we do not use BitOp: I see no reason why (a << 33) should not
be 0, or why (a << -1) should not be equal to (a >> 1). I have been
using shift operators for many years, and I too often miss this behavior
in C. I can undestand why C does not give it, but I cannot undestand why
Lua should not give it.
About the system-dependent semantics, I may be missing something,
but I do not see the problem. This library operates on bits; as long
as the result type is able to represent the 32 bits, is should make
no difference whether they are signed, unsigned, or packed inside a
double. Of course, if you do something like "if bit.band(x,y) < 0
...", then you will have system-dependent semantics. But, for me, this
operation already has an arbitrary semantics. What does it mean to ask
whether a bunch of bits is smaller than zero?
Of course we can argue about it, but not in the way you tone your
message.
-- Roberto