strangest systems I've sent email from
Guy Dawson
guy at cuillin.org.uk
Sun May 22 09:09:24 CDT 2016
>> I'm not even sure
>
>> size_t foo = (size_t)-1;
>
>> is legal,
>
> In C++, I don't know. In C, I'm fairly sure it's legal.
>
>> or even does what I expect it to do (namely---set foo to the largest
>> size_t value possible (pre C99).
>
> I'm not sure it does that. If you want that, I think you want
>
> size_t foo = -(size_t)1;
While I think that
size_t foo = (size_t)(-1);
is what C would interpret as being meant. What the size of the thing that
by default, in this implementation, -1 would be stored in.
On 22 May 2016 at 14:09, Mouse <mouse at rodents-montreal.org> wrote:
> > I'd wager that most C code is written *assuming* 2's complement and 0
> > NULL pointers (and byte addressable, but I didn't ask for that 8-).
>
> Well, yes. I'd go further: I'd wager most C code is written assuming
> everything works just the way the developer's system does; most people
> I interact with don't seem to realize that "try it and see how it
> works" is not a valid way to find out how C (as opposed to "C on this
> particular version of this particular implementation on this particular
> system") works.
>
> > "[W]rite a VM with minimal bytecode and that uses 1s'
> > complement and/or sign-magnitude. Implement a GCC or LLVM
> > backend for it if either of them has nominal support for that,
> > or a complete C implementation if not. [...]
> > Personally, I would *love* to see such a compiler (and would actually
> > use it, just to see how biased existing code is).
>
> I've often thought about building a C implementation that goes out of
> its way to break assumptions like "integers are two's complement with
> no padding bits" or "floats are IEEE" or "nil pointers are all-bits-0"
> or "all pointers are the same size and representation" or etc.
>
> > I'm not even sure
>
> > size_t foo = (size_t)-1;
>
> > is legal,
>
> In C++, I don't know. In C, I'm fairly sure it's legal.
>
> > or even does what I expect it to do (namely---set foo to the largest
> > size_t value possible (pre C99).
>
> I'm not sure it does that. If you want that, I think you want
>
> size_t foo = -(size_t)1;
>
> > To me, I see 2's complement as having "won the war" so to speak.
>
> At present, yes, I agree. I am not convinced that will not change.
>
> There was a time when "little endian, no alignment restrictions"
> appeared to have won the war (in the form of the VAX and, later, the
> x86). These days, ARM's star is on the rise and others may follow,
> breaking the "no alignment restrictions" part (and possibly the "little
> endian" part - I forget whether ARM is big- or little-endian).
>
> > http://blog.regehr.org/archives/[...]
>
> Yeah, I've read some of his writings.
>
> I disagree with him. I think C needs to fork. It seems to me there is
> need for two languages: an unsafe one, the "high level assembly
> language" C is regularly called, which is suitable for things such as
> hardware interfacing or malloc() implementation, and a safer one,
> closer to what blog.regehr.org seems to want, for...well, I'm not quite
> sure what he thinks this language would be better for. Application
> layer stuff, I guess?
>
> /~\ The ASCII Mouse
> \ / Ribbon Campaign
> X Against HTML mouse at rodents-montreal.org
> / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B
>
--
4.4 > 5.4
More information about the cctalk
mailing list