On Jul 29, 2016, at 6:42 PM, Andrew Bennett via swift-evolution 
<[email protected]> wrote:
> I wrote this a few months ago, but we weren't accepting additive proposals. 
> Now we're explicitly looking for something like this:
> 
> Memory ownership model: Adding an (opt-in) Cyclone/Rust inspired memory 
> ownership model to Swift is highly desired by systems programmers and folks 
> who want predictable and deterministic performance (for example, in real time 
> audio processing code).  More pertinent to the goals of Swift 4, this feature 
> is important because it fundamentally shapes the ABI.  It informs code 
> generation for “inout", how low-level “addressors” work in the ABI, impacts 
> the Swift runtime, and will have a significant impact on the type system and 
> name mangling. 

Memory ownership is about something slightly different than this.  In the 
context of Swift, the model we’re looking for is:

- You can completely ignore memory ownership features of the language, and get 
very far into development with Swift.  This is in stark contrast with Rust and 
Cyclone, which require you to grapple with it up front.  This means that in the 
Swift context, this will be more of a “power user” feature, instead of 
essential part of the model.

- You can choose to use the memory ownership features by adding extra 
annotations, giving better performance and control over ARC.  Right now we have 
very limited options for avoiding ARC overhead in critical loops, largely 
forcing you to drop down to unsafe constructs.  We’d prefer the model to be 
“you can add more annotations to your code to get better performance, allowing 
the compiler statically verify correctness instead of dynamically”.

- Memory ownership control is an extremely non-trivial feature, which will 
probably drive us to add first class move semantics and region types to the 
language.  This will also call for significant standard library extensions.  It 
will pay for this complexity by making it easy to ignore the complexity if you 
don’t want it, and by the fact that the standard library and other stuff can go 
much faster.

- As a Stage 2 feature, I can imagine an opt-in mode that “forces” the use of 
these features, for code that wants to guarantee deterministic performance.  
This is what enables the use of swift in realtime audio applications, for 
example.

While some initial brainstorming and scoping has been done in this area, we’re 
far from having a concrete design.  We have a few folks who are experts at Rust 
that are helping contribute ideas and experience to this though.  

If you have more specific questions, feel free to ask about it.

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

Reply via email to