On 11/18/12 13:58, Manu wrote: > On 18 November 2012 14:51, Artur Skawina <art.08...@gmail.com > <mailto:art.08...@gmail.com>> wrote: > > On 11/18/12 12:21, Manu wrote: > > I've often wondered about having an official 'half' type. > > It's very common in rendering/image processing, supported by most video > cards (so compression routines interacting with this type are common), and > it's also supported in hardware by some cpu's. > > > > ARM for instance supports 'half's in hardware, and GCC has an __fp16 > type which would map nicely if D supported the type in the front end. > > > > The alternative us to use ushort everywhere, which is awkward, because > it is neither unsigned, nor is it an integer, and it's not typesafe (allows > direct assignment to ints and stuff)... > > It would be nice if: cast(half)someFloat would yield the proper value, > even if it is performed in software in most architectures, it could be mapped > to hardware for those that do it. > > > > It could be done in a library, but then GCC couldn't map it properly to > the hardware type, and since D has no way to describe implicit casts (that I > know of?) it becomes awkward to use. > > someFloat = someHalf <- doesn't work, because a cast operator expects > an explicit cast, even though this is a lossless conversion and should be > exactly the same as someDouble = someFloat. > > > > Thoughts? > > version (GNU) alias half = @gcc[mode(HF)] float; > > But of course this won't work right now, cause that kind of type > attributes > aren't supported yet. 'pragma' can't be used on types either (otherwise > something like "alias half = pragma(attribute, mode("HF")) float;" could > be > made to work). > > And - yes - the /proper/ way would be eg > > alias half = @core[size=2] float; > // or '@core.size(2)' or any other syntax. > > For now, a struct + alias-this-getter might be enough, for a s/w > implementation. > > > Yes, that's what I and everyone else does, but that's not the point of the > topic... > I think it's a fundamental datatype, and it deserves the same casting/type > conversion/type safety rules as ints and floats, and it would also be useful > to map it to hardware (which GDC can easily do).
All of the 'half' definitions above would give you a 'fundamental' datatype -- -- there is no reason to make it a /language/-defined type. The work required to implement things like implicit conversions can be done more generically; right now the problem is the lack of a way to define such types. alias fp24 = @core[exp=7, mant=16] float; // It's only a matter of time until // someone asks for it&co... Also, *every* user- (or in this case more likely lib-) defined data type deserves the same control over casting and conversions as built-in types. No, D doesn't have that and yes - it is a problem. I actually think these types /should/ be done as structs, but a) it isn't currently possible (also for reasons other than the above mentioned ones) and b) such aliases would /still/ be useful for mapping to "magic" compiler-supported h/w types. artur