[swift-dev] statically initialized arrays
Dave Abrahams
dabrahams at apple.com
Thu Jun 15 13:21:02 CDT 2017
on Thu Jun 15 2017, Arnold <aschwaighofer-AT-apple.com> wrote:
>> On Jun 14, 2017, at 2:56 PM, Dave Abrahams via swift-dev <swift-dev at swift.org> wrote:
>>
>>
>>> on Wed Jun 14 2017, Erik Eckstein <swift-dev-AT-swift.org> wrote:
>>>
>>> Hi,
>>>
>>> I’m about implementing statically initialized arrays. It’s about
>>> allocating storage for arrays in the data section rather than on the
>>> heap.
>>
>> W00t! I'd like to do the same for String, i.e. encode the entire buffer
>> in the data section. I was looking for Array example code to follow but
>> couldn't find it.
>
> We have support for constant string buffers as of PR 8701 and PR
> 8692. The former PR shows the protocol that has to be implemented.
>
> (The implementation currently exposes the ref count ABI. This
> can/needs to be fixed when we move to a stable abi by running an once
> initializer)
>>
>>> Info: the array storage is a heap object. So in the following I’m
>>> using the general term “object” but the optimization will (probably)
>>> only handle array buffers.
>>>
>>> This optimization can be done for array literals containing only other
>>> literals as elements. Example:
>>>
>>> func createArray() -> [Int] {
>>> return [1, 2, 3]
>>> }
>>>
>>> The compiler can allocate the whole array buffer as a statically
>>> initialized global llvm-variable with a reference count of 2 to make
>>> it immortal.
>>
>> Why not 1
>
> Mutation must force copying.
I know, but I assumed each reference formed to this buffer would
increment the reference count.
--
-Dave
More information about the swift-dev
mailing list