Noncopyable Generics Walkthrough
Non-copyable generics aren’t for every-day code – but we’ve put a lot of care into making them stay out of your way until you need them, and then keeping them usable once you do. They will allow libraries to unlock more performance and safety for end users.
[…]
To help tie all these pieces together, I wrote up some code that uses all these proposals in order to build a basic singly-linked list type.
[…]
This is a struct that opts out of the default
Copyable
conformance via: ~Copyable
. This allows it to have adeinit
, like a class. This type uses no reference counting to know when to destroy the box. The type cannot be copied, so when it goes out of scope, thedeinit
is called by the compiler.[…]
The generic placeholder
Wrapped
, which can stand in for the type of anything you want to put in the box, is also marked~Copyable
. This means that theBox
type cannot make any copies of its wrapped type. […] What this~Copyable
annotation means is just that theBox
type doesn’t know if the type it holds is copyable, which means it can safely hold both copyable and non-copyable types.[…]
Sequence
, and thereforefor…in
, does not yet support non-copyable types.Sequence
could be made to support it today by marking the protocol up as~Copyable
and havingmakeIterator()
be consuming. However this is probably not desirable. Mostly, you want iteration to be a borrowing operation. Accomplishing this needs more language features.
Previously:
- Swift 5.9
- Swift Proposal: Noncopyable Structs and Enums
- Porting Graphing Calculator From C++ to Swift
1 Comment RSS · Twitter · Mastodon
And the complexity increases yet again , we’re almost surpassing C++.
Yet another feature I will never need when building iOS apps. I’m glad the language people are having fun building these things, while the most basic things are forever broken. All I need for making software is a working debugger, a non crashing and FAST compiler, less bugs in everything (regexes are broken, Decimal is broken, etc…) and simplicity.
The relative elegance of Objective-C is far away. Seem like the architecture astronauts have won and are more concerned about technical achievements than actually making usable software.