[swift-evolution] [Review] SE-0107: UnsafeRawPointer API (binding memory to type)
atrick at apple.com
Mon Jul 11 12:10:06 CDT 2016
> On Jul 11, 2016, at 12:50 AM, Ben Rimmington <me at benrimmington.com> wrote:
>> On 10 Jul 2016, at 14:41, Andrew Trick via swift-evolution <swift-evolution at swift.org> wrote:
>> I'm revising this proposal based on last week's feedback. A few of the
>> additive APIs are removed and a number of UnsafePointer and
>> UnsafeRawPointer methods are renamed.
>> Here is a PR for the revision. Note that the examples in the proposal
>> text still need to be updated:
>> I updated the short-form summary of the API:
>> The full UnsafeRawPointer API with doc comments is here:
>> The UnsafePointer and UnsafeRawPointer changes are on this branch:
>> If you wish to comment line-by-line on the detailed docs or
>> implementation, you can do so here:
>> The only concern I have about this version of the proposal is this method name:
>> func copyBytes(from: UnsafeRawPointer, count: Int)
>> because `count` usually refers to a number of values. I think it should be:
>> func copy(bytes: Int, from: UnsafeRawPointer)
> Using `bytes` to label the count / length / size would be inconsistent with:
> UnsafeMutableRawPointer could use a `size` or `sizeInBytes` label.
> (This also applies to the `allocate` and `deallocate` methods).
> — Ben
Thanks for pointing that out.
My concern is code like:
let ptrToInt: UnsafePointer<Int32> = …
rawPtr.copyBytes(from: ptrToInt, count: 4)
which looks a lot like 4 Int32s will be copied when only 1 Int32 will actually be copied.
Anyone care to vote on this?
let rawPtr = UnsafeMutableRawPointer.allocate(bytes: 24)
rawPtr.copyBytes(from: ptrToInt, count: 24)
let rawPtr = UnsafeMutableRawPointer.allocate(sizeInBytes: 24)
rawPtr.copyBytes(from: ptrToInt, sizeInBytes: 24)
More information about the swift-evolution