Получи случайную криптовалюту за регистрацию!

Structured concurrency принят и будет доступен в 5.5 Вчера ко | Server Side Swift News

Structured concurrency принят и будет доступен в 5.5

Вчера команда языка наконец подвела итог всей полугодовой саги с пропозалом про structured concurrency (доступен по ссылке https://github.com/apple/swift-evolution/blob/main/proposals/0304-structured-concurrency.md). Пропозал, конечно, был принят.

Последняя итерация обсуждения была относительно спокойной, обсуждались отдельные маловажные детали, вроде именования функции Task.yield (её рекомендуется использовать в конце циклов длительных функций, чтобы не занимать весь тред надолго).

Пропозал довольно сильно отличается от своего оригинального вида. Так, например, из него в отдельные пропозалы были выделены:

1. Sendable типы — оригинально они назывались ConcurrencyValue (принято).
2. Continuation — создание async контекста из функций с замыканием (принято).
3. Async let — фьючеры на уровне синтаксиса (принято).
4. Custom executors — на чем исполняются куски асинхронных подпрограмм; по умолчанию это треды, но могут быть, скажем, и EventLoop из SwiftNIO или DispatchQueue из GCD (отложено).

Учет изменений названий и API не велся.

После всех изменений и правок пропозал регулирует следующие концепции:

1. Асинхронные программы — атрибут @main для структур или классов, требующий наличия статического асинхронного метода main, который будет точкой входа в программу с асинхронностью.
2. Task groups — создание произвольного количества асинхронных задач, ожидание их выполнения, группировка и возврат обработанного результата. Кто занимался жонглированием EventLoopFuture из НИО, знает о чем речь.
3. Создание асинхронной подзадачи с сохранением родительского контекста через let handle = Task { ... } или без него через let handle = Task.detached { ... }
4. Возможность отмены асинхронной задачи — никакой магии: предполагается, что задача сама внутри себя должна проверять, не отменена ли она (отмена выполняется через API из третьего пункта), и если да, то ей следует как можно скорее завершить работу.

Всё это официально станет доступно в версии языка 5.5, который выйдет в релиз вместе с macOS Monterey. Дата выхода операционной системы еще не назначена, но ожидается что сам выход или его анонс состоится 14 сентября, на анонсированном накануне ивенте Apple.

О других асинхронных фичах, выход которых состоится в 5.5, можно почитать в других материалах нашего канала.