Что нового в Swift: сентябрь 2 026 года

Добро пожаловать в «Что нового в Swift» — кураторский дайджест релизов, видео и обсуждений в проекте Swift и сообществе. Веб‑фреймворк Vapor недавно отметил десятилетие и отпраздновал это Vapor Week! Мы пригласили одного из авторов Vapor стать гостевым автором этого выпуска: Привет, я Тим из основной команды Vapor! 10 лет назад, в сентябре, был выпущен Vapor 1.0, и за эти годы Vapor превратился в комплексный фреймворк для создания бэкендов и API на Swift. К годовщине мы выпустили первую бету Vapor 5 — следующую мажорную версию Vapor, которая представляет собой полную переработку, устраняющую 6 лет технического долга, добавляющую полную поддержку структурированной конкурентности и (наконец‑то!) прощающуюся с EventLoopFutures. С самого начала цели Vapor не изменились: выразительный, простой в использовании и мощный фреймворк для создания серверных приложений на Swift. С Vapor 5 мы можем использовать новый Swift HTTP Server для обработки фактической HTTP‑части и сосредоточиться на том, чтобы быть отличным веб‑фреймворком, используя новейшие возможности Swift там, где это имеет смысл. Удивительно видеть круг людей, использующих Vapor, от независимых разработчиков до крупных компаний. Полную историю, включая обновлённую, локализованную и более доступную документацию, можно найти в Vapor Week. Если вам интересен серверный Swift, попробуйте бету Vapor 5 и расскажите нам, что вы думаете! А теперь к другим новостям о Swift:

Релиз Swift 6.4

В сентябре главной новостью проекта стал релиз Swift 6.4, который приносит более глубокую интероперабельность, более сильную поддержку платформ и более простой повседневный код. Ключевые моменты включают Swift Build в качестве нового выбора по умолчанию в Swift Package Manager, достижение версии 1.0 для Subprocess и ускорение моста WebAssembly с JavaScriptKit до 40 раз. В недели, предшествовавшие релизу, мы также поделились двумя глубокими погружениями в некоторые его возможности:

Основные события сообщества

Новые релизы пакетов

  • WasmKit — это среда выполнения WebAssembly, написанная на Swift. Релиз 0.4 удваивает скорость интерпретатора, и теперь он может работать на микроконтроллерах ESP32-C6 и Playdate.

  • Был выпущен Swift AWS Lambda Runtime 3.0, добавляющий плагины SwiftPM для инициализации, сборки и развёртывания. Плагин сборки теперь может упаковывать в zip или OCI‑образ, и вы можете выбрать способ компиляции: с помощью Docker, Apple’s container или кросс‑компиляции с использованием Swift Static Linux SDK.

Swift Evolution

Проект Swift добавляет новые языковые возможности через процесс Swift Evolution. Вот некоторые из предложений, находящихся на рассмотрении или недавно принятых для будущего релиза Swift.

На активном рассмотрении:

  • SE-0554 Условная компиляция по целевому значению развёртывания — Swift может проверять, доступен ли API во время выполнения с помощью if #available(...), но это не может выбирать между импортами, псевдонимами типов, соответствиями, хранимыми свойствами или полными объявлениями; этот выбор должен быть сделан во время компиляции модуля. Это предложение добавляет #if deploymentTargetAtLeast(...), чтобы библиотека могла компилировать различный исходный код для разных минимальных версий ОС без поддержки отдельного флага системы сборки.

Недавно приняты:

  • SE-0546 Расширения memberwise‑инициализатора в том же файле — когда memberwise‑инициализатор структуры должен быть public, его можно определить только в её базовом объявлении; определение в расширении является ошибкой повторного объявления, и для структур, сгенерированных макросами, нет способа сделать их memberwise‑инициализаторы публичными. Это предложение позволяет определять memberwise‑инициализаторы и default init() в расширениях в том же файле.

  • SE-0548 resignRemoteID для ссылок на удалённых распределённых акторов — сегодня DistributedActorSystem наблюдает за жизненным циклом локальных распределённых акторов через assignID(_:) / resignID(_:) и участвует в создании удалённых ссылок через resolve(id:as:), но нет способа наблюдать, когда удалённая ссылка была деинициализирована. Это предложение добавляет resignRemoteID(_:), вызываемый при деинициализации прокси удалённого распределённого актора, чтобы системы могли поддерживать соединения живыми только пока хотя бы одна удалённая ссылка всё ещё использует их.

  • ST-0029 Включение дополнительных метаданных о проблеме в поток событий — такие инструменты, как Xcode и VS Code, потребляют поток JSON‑событий Swift Testing, но структурированной информации недостаточно, чтобы различать разные виды проблем, например, выброшенную ошибку и вызов Issue.record. Это предложение добавляет новые поля в тип события проблемы, включая error, confirmation miscount, exceeded time limit и expression, чтобы инструменты могли отображать более богатый контекст сбоя.

Недавно приняты с изменениями:

  • SE-0540 Настройки цели по умолчанию (рассматривалось как «Настройки пакета по умолчанию») — очень часто пакеты Swift используют одни и те же флаги настроек для всех своих целей, что сегодня означает их дублирование для каждой цели или изменение package.targets после определения пакета. Это предложение позволяет определять настройки по умолчанию как часть инициализатора Package (defaultSwiftSettings, defaultCSettings, defaultCXXSettings и defaultLinkerSettings) с заполнителем .defaults, который управляет тем, как каждая цель наследует их.

Авторы

Тим Кондон входит в SSWG (Swift Server Workgroup) и является частью основной команды Vapor. Дэйв Лестер — старший менеджер по продукту в Apple и член рабочей группы сайта Swift.

Комментарии (0)