> On Jun 24, 2016, at 10:58 AM, Andrew Trick via swift-evolution 
> <[email protected]> wrote:
>> On Jun 24, 2016, at 8:19 AM, Matthew Johnson <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Andrew, thank you for working on this.  The latest draft is much improved!
>> 
>> I have a few questions.
>> 
>> Why do you require explicitly passing the type in these signatures?
>> 
>> func initialize<T>(_: T.Type, with: T, count: Int = 1) -> 
>> UnsafeMutablePointer<T>
>> func initialize<T>(toContiguous: T.Type, atIndex: Int, with: T) -> 
>> UnsafeMutablePointer<T>
>> func storeRaw<T>(_: T.Type, with: T)
>> func storeRaw<T>(toContiguous: T.Type, atIndex: Int, with: T)
>> 
>> There is probably a good reason, but it seems redundant at first glance and 
>> isn’t obvious from my reading of the proposal.  The alternatives would be 
>> something like this:
>> 
>> func initialize<T>(with: T, count: Int = 1) -> UnsafeMutablePointer<T>
> 
> Good question. It is deliberately, and unfortunately redundant. We're trading 
> convenience for safety. I added this note to the proposal:
> 
> Note that the `T.Type` argument on `initialize` is redundant because
> it may be inferred from the `with` argument. However, relying on type
> inferrence at this point is dangerous. The user needs to ensure that
> the raw pointer has the necessary size and alignment for the
> initialized type. Explicitly spelling the type at initialization
> prevents bugs in which the user has incorrectly guessed the inferred
> type.

One major problematic case: the value could have a defaulted type, e.g.:
  pointer.initialize(with: 0, count: 1024)

John.

> 
>> The parameter order in this signature is the opposite of the order in 
>> UnsafeMutablePointer.  Is that intentional?  If so, what is the rationale?  
>> You might want to elaborate this in the proposal.
>> 
>> public func + (lhs: Int, rhs: UnsafeRawPointer) -> UnsafeRawPointer
> 
> Fixed.
> 
>> Shouldn’t the precondition be that memory for all elements is 
>> *uninitialized* / *deinitialized* in this example?
>> 
>> // - precondition: memory for all elements is initialized.
>> func freeCBuffer() {
>>   UnsafeRawPointer(ptrToA).deallocate(capacity: eltCount, of: A.self)
>> }
>> 
> 
> Typo. Thanks!
> 
>> It looks like there is a type in this example:
>> 
>> var anyT = T(...)
>> takesTPtr(&anyT)
>> takesVoidPtr(&any)
>> 
>> Should the last line say `&anyT`?
> 
> Typo. Thanks!
> 
> -Andy
> 
>> Other than these few questions all I can say is that this looks great!  I 
>> believe it will add important clarity to code that works with unsafe 
>> pointers.
>> 
>> -Matthew
>> 
>>> On Jun 23, 2016, at 8:40 PM, Andrew Trick via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>> I sent two RFC's for this proposal over the past couple months (see Early 
>>> swift-evolution threads). High-level feedback was fairly light. This 
>>> version is a final draft, as I expect it to go through the review process 
>>> next week. There is a lot more explanation and detail in this proposal now, 
>>> and the memory model has been simplified and clarified.
>>> 
>>> https://github.com/atrick/swift-evolution/blob/voidpointer/proposals/XXXX-unsaferawpointer.md
>>>  
>>> <https://github.com/atrick/swift-evolution/blob/voidpointer/proposals/XXXX-unsaferawpointer.md>
>>> 
>>> If you have opinions or suggestions on API syntax, please make yourself 
>>> heard. You can jump straight to the naming discussion here:
>>> 
>>> https://github.com/atrick/swift-evolution/blob/voidpointer/proposals/XXXX-unsaferawpointer.md#variations-under-consideration
>>>  
>>> <https://github.com/atrick/swift-evolution/blob/voidpointer/proposals/XXXX-unsaferawpointer.md#variations-under-consideration>
>>> 
>>> Of particular interest may be the API names for:
>>> 
>>> - Memory allocation/deallocation: fairly fundamental to the language.
>>> 
>>> - Unsafe casting from raw pointers to typed pointers. This is going to 
>>> impact a lot of code that needs C interoperability.
>>> 
>>> Keep in mind that we will make additive API improvements later for 
>>> convenience. We want the fundamentals to be clear, explicit, and reasonably 
>>> safe.
>>> 
>>> -Andy
>>> 
>>> <XXXX-unsaferawpointer.md>_______________________________________________
>>> swift-evolution mailing list
>>> [email protected]
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to