What is Sendable protocol and how it relates to Actors in swift?

Generated on 8/23/2024

1 search

The Sendable protocol in Swift is a key concept related to concurrency, particularly when working with actors. It ensures that types can be safely transferred across different concurrency domains without causing data races. In Swift, a type is considered sendable if it can protect its state from concurrent accesses, which is crucial for maintaining data integrity in concurrent programming.

Actors in Swift are reference types that encapsulate shared mutable state and automatically protect their state by serializing accesses. This means that only one task can execute at a time on an actor, preventing data races. The Sendable protocol complements actors by ensuring that any data shared between actors is safe from concurrent modifications.

In Swift 6, the language enforces data isolation more strictly, requiring explicit conformance to Sendable for public types. This is because marking a type as sendable is a guarantee to clients that the type contains no mutable state that could lead to data races. For internal types, Swift can infer sendability automatically, but for public types, developers must explicitly declare them as sendable to avoid potential concurrency issues.

For more details, you can refer to the session Migrate your app to Swift 6 (32:27) where this topic is discussed.

What’s new in Swift

What’s new in Swift

Join us for an update on Swift. We’ll briefly go through a history of Swift over the past decade, and show you how the community has grown through workgroups, expanded the package ecosystem, and increased platform support. We’ll introduce you to a new language mode that achieves data-race safety by default, and a language subset that lets you run Swift on highly constrained systems. We’ll also explore some language updates including noncopyable types, typed throws, and improved C++ interoperability.

Consume noncopyable types in Swift

Consume noncopyable types in Swift

Get started with noncopyable types in Swift. Discover what copying means in Swift, when you might want to use a noncopyable type, and how value ownership lets you state your intentions clearly.

A Swift Tour: Explore Swift’s features and design

A Swift Tour: Explore Swift’s features and design

Learn the essential features and design philosophy of the Swift programming language. We’ll explore how to model data, handle errors, use protocols, write concurrent code, and more while building up a Swift package that has a library, an HTTP server, and a command line client. Whether you’re just beginning your Swift journey or have been with us from the start, this talk will help you get the most out of the language.

Migrate your app to Swift 6

Migrate your app to Swift 6

Experience Swift 6 migration in action as we update an existing sample app. Learn how to migrate incrementally, module by module, and how the compiler helps you identify code that’s at risk of data races. Discover different techniques for ensuring clear isolation boundaries and eliminating concurrent access to shared mutable state.