[swift-users] Implicitly capture a mutating self
Richard Wei
rxrwei at gmail.com
Fri Dec 16 03:12:54 CST 2016
The original file’s here:
https://github.com/rxwei/cuda-swift/blob/master/Sources/Warp/CollectionOperations.swift
I’m assuming this change has affected Dispatch users as well. It's not a good idea for such high-level APIs to rely on explicit pointers to pass mutating self for struct types.
-Richard
> On Dec 16, 2016, at 03:05, Richard Wei <rxrwei at gmail.com> wrote:
>
> It’s not the correct choice here :)
>
>> On Dec 16, 2016, at 03:04, Rien <Rien at Balancingrock.nl> wrote:
>>
>> Just because it is called “Unsafe” does not mean it is unsafe :-)
>> It all depends on how you use it.
>>
>> Regards,
>> Rien
>>
>> Site: http://balancingrock.nl
>> Blog: http://swiftrien.blogspot.com
>> Github: http://github.com/Swiftrien
>> Project: http://swiftfire.nl
>>
>>
>>
>>
>>> On 16 Dec 2016, at 09:52, Richard Wei <rxrwei at gmail.com> wrote:
>>>
>>> Zhao, it’s not a class.
>>>
>>> Rien, unsafe pointers is the last thing I would ever want to introduce in my library…
>>>
>>> Capturing self was clean, working perfectly, until Swift 3.0.2.
>>>
>>> -Richard
>>>
>>>> On Dec 16, 2016, at 02:49, Zhao Xin <owenzx at gmail.com> wrote:
>>>>
>>>> What is the type of self? If it is a class, try [unowned self].
>>>>
>>>> Zhaoxin
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, Dec 16, 2016 at 4:33 PM, Rien via swift-users <swift-users at swift.org> wrote:
>>>> How about using:
>>>>
>>>> UnsafeMutablePointer<TypeOfSelf>
>>>>
>>>> ?
>>>>
>>>> Regards,
>>>> Rien
>>>>
>>>> Site: http://balancingrock.nl
>>>> Blog: http://swiftrien.blogspot.com
>>>> Github: http://github.com/Swiftrien
>>>> Project: http://swiftfire.nl
>>>>
>>>>
>>>>
>>>>
>>>>> On 16 Dec 2016, at 09:10, Richard Wei via swift-users <swift-users at swift.org> wrote:
>>>>>
>>>>> Capturing makes it immutable, which unfortunately can't solve this problem.
>>>>>
>>>>> -Richard
>>>>>
>>>>>> On Dec 16, 2016, at 02:05, Zhao Xin <owenzx at gmail.com> wrote:
>>>>>>
>>>>>> I did not test the code. But if you cannot implicitly capture a mutating self, you should do it explicitly, right?
>>>>>>
>>>>>> let blockSize = min(512, count)
>>>>>> let blockCount = (count+blockSize-1)/blockSize
>>>>>> device.sync { [self] () -> () in // Launch CUDA kernel
>>>>>> try! fill<<<(blockSize, blockCount)>>>[
>>>>>> .pointer(to: &self), .value(value), .value(Int64(count))
>>>>>> ]
>>>>>> }
>>>>>>
>>>>>> Hope above code works.
>>>>>>
>>>>>> Zhaoxin
>>>>>>
>>>>>> On Fri, Dec 16, 2016 at 3:46 PM, Richard Wei via swift-users <swift-users at swift.org> wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Swift 3.0.2 seems to have broken my code due to mutating self capture. But I have to pass inout self to the closure. Any workaround?
>>>>>>
>>>>>> let blockSize = min(512, count)
>>>>>> let blockCount = (count+blockSize-1)/blockSize
>>>>>> device.sync { // Launch CUDA kernel
>>>>>> try! fill<<<(blockSize, blockCount)>>>[
>>>>>> .pointer(to: &self), .value(value), .value(Int64(count))
>>>>>> ]
>>>>>> }
>>>>>>
>>>>>> <PastedGraphic-1.png>
>>>>>>
>>>>>> -Richard
>>>>>>
>>>>>> _______________________________________________
>>>>>> swift-users mailing list
>>>>>> swift-users at swift.org
>>>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> swift-users mailing list
>>>>> swift-users at swift.org
>>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>>
>>>> _______________________________________________
>>>> swift-users mailing list
>>>> swift-users at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>>
>>>
>>
>
More information about the swift-users
mailing list