Apple випустила Swift 5.5: це велике оновлення її мови програмування, з яким з'явились ключові слова async/await, колекції пакетів і краща сумісність з Objective-C.
Найбільш очікувані нові функції у Swift 5.5 пов'язані з паралелізмом. Раніше у Swift були з цим проблеми: коли розробники створювали кілька асинхронних операцій, результатом була «піраміда приреченості». Тобто виникали безліч вкладених викликів, за якими складно стежити і які ускладнюють керування потоком та відстеження помилок.
Тому розробники Swift вирішили звернутись до шаблону async/await, який є у C#, JavaScript і Python. Тож замість писати код на кштлт цього:
func loadWebResource(_ path: String, completionBlock: (result: Resource) -> Void) { ... }
func decodeImage(_ r1: Resource, _ r2: Resource, completionBlock: (result: Image) -> Void)
func dewarpAndCleanupImage(_ i : Image, completionBlock: (result: Image) -> Void)
func processImageData1(completionBlock: (result: Image) -> Void) {
loadWebResource("dataprofile.txt") { dataResource in
loadWebResource("imagedata.dat") { imageResource in
decodeImage(dataResource, imageResource) { imageTmp in
dewarpAndCleanupImage(imageTmp) { imageResult in
completionBlock(imageResult)
}
}
}
}
}
Тепер можна писати так:
func loadWebResource(_ path: String) async -> Resource
func decodeImage(_ r1: Resource, _ r2: Resource) async -> Image
func dewarpAndCleanupImage(_ i : Image) async -> Image
func processImageData1() async -> Image {
let dataResource = await loadWebResource("dataprofile.txt")
let imageResource = await loadWebResource("imagedata.dat")
let imageTmp = await decodeImage(dataResource, imageResource)
let imageResult = await dewarpAndCleanupImage(imageTmp)
return imageResult
}
Окрім того, анонімні замикання будуть неявно асинхронними, якщо вони містять вираз await. Ця нова модель паралелізму також покращить сумісність з іншою мовою Apple — Objective-C. Методи обробника завершення з Objective-C будуть перетворюватись в асинхронні методи Swift і навпаки.
Інший складник паралелізму Swift — це модель акторів (з ключовим словом actor
). Йдеться про посилальний тип, що захищає доступ до змінюваного стану; взаємодія з actor відбувається асинхронно. Розробники кажуть, що так хочуть досягти ізоляції даних, аби повідомлення, надіслані акторам, не призводили до спільного змінного стану, а саму модель називають «островом серіалізації в морі паралелізму».
Ще одне важливе оновлення Swift 5.5 — це колекції пакетів, де кожен пакет має набір файлів зі Swift-кодом та маніфест. Так буде легше розуміти, для чого ці пакети застосовувати (наприклад, під час навчання). На колекції можна буде підписуватись і шукати їх через команду swift package-collection
. Також вони підтримуються незалежним Індексом Пакетів Swift та інтегровані у Xcode 13.
Мова Swift 5.5 тепер доступна як частина Xcode 13, ще її можна завантажити для Ubuntu, CentOS та Amazon Linux 2. Версія для Windows 10 з'явиться незабаром. Про всі оновлення можна детальніше дізнатись на сторінці релізу.
Ще немає коментарів