> At the moment, Rust is completely broken in this regard. The following
> expression evaluates to None:
> Some(~())

Ouch, this is a disaster.

Is there a bug filed for this?

Anyway, I don't get your argument about size to free having anything to do with 
fixing it (although I agree that size to free is awesome).

If you don't care about equality (i.e. the fact that &*~() != &*~(), but a == a 
where a = &*~()), just return the address of a single private static 1-byte 
item for any 0-sized allocation.

If you DO care about equality, then you will need at least an integer 
allocation scheme in all cases on 32-bit platforms, and the real costs are the 
data structures to track that (at least a bit in a bitmask, probably at least 2 
bits for an efficient implementation).
If you can't use the 1-2GB of kernel address space, then you'll also need to 
allocate one byte of actual usable address space (but not committed memory).

On 64-bit platforms, you generally have at least around 2^60-2^63 bytes of 
unusable address space, so you can just increment a pointer pointing there for 
each allocation, at zero cost.

Of course the quick and simple fix is to try to call malloc(0) and if it 
returns NULL, remember that and switch to using malloc(1) instead.

                                          
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to