Вийшла мова Swift 5.5: що нового

3 хв. читання

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 з'явиться незабаром. Про всі оновлення можна детальніше дізнатись на сторінці релізу.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.6K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація