[swift-evolution] [Review] SE-0101: Rename sizeof and related functions to comply with API Guidelines

Joe Groff jgroff at apple.com
Tue Jun 21 15:25:59 CDT 2016





> On Jun 21, 2016, at 1:23 PM, Dave Abrahams <dabrahams at apple.com> wrote:
> 
> 
> 
> 
> on Tue Jun 21 2016, Joe Groff <swift-evolution-m3FHrko0VLzYtjvyW6yDsg at public.gmane.org> wrote:
> 
>> Regarding the issue of existential metatypes with sizeof:
>> 
>> Pyry Jahkola points out one instance where the memorySize(type(of: …))
>> workaround won't work. When the value is an existential, it's illegal
>> to ask for the size of its dynamic type: the result can't be retrieved
>> at compile time:
>> 
>> // Swift 2.2, 64-bit
>> let i = 123
>> print(sizeofValue(i)) //=> 8
>> let c: CustomStringConvertible = i
>> print(sizeofValue(c)) //=> 40
>> print(sizeof(c.dynamicType)) // error: cannot invoke 'sizeof' with an argument list of type '(CustomStringCo
>> This could be enabled by having sizeof and friends formally take an
>> Any.Type instead of <T> T.Type. (This might need some tweaking of the
>> underlying builtins to be able to open existential metatypes, but it
>> seems implementable.)
> 
> Would it be as fully specializable down to a compile-time constant?

Seems like it ought to be. sizeof() is just a transparent wrapper around Builtin.sizeof IIRC, and we can control the codegen of the builtin.

-Joe



More information about the swift-evolution mailing list