Что нового в 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 раз. В недели, предшествовавшие релизу, мы также поделились двумя глубокими погружениями в некоторые его возможности:
Отслеживание модулей в отладочной информации Swift объясняет, как точные, основанные на путях импорты модулей делают поиск в LLDB более надёжным и уменьшают размер dSYM‑файлов и бинарников. Мейнтейнерам систем сборки (Bazel, Buck, CMake) стоит заменить
-modulewrap/-add_ast_pathна-debug-module-path.Улучшения Embedded Swift, грядущие в Swift 6.4 подводит итоги того, что ожидается для Swift на микроконтроллерах и других ограниченных средах.
Основные события сообщества
Google выпустил новый SDK: официальные клиентские библиотеки Google Cloud для Swift. Построенный на SwiftNIO и Swift concurrency, он предоставляет бэкенд‑сервисам и CLI‑инструментам доступ через async/await к Cloud Storage, IAM, Secret Manager, Gemini и более чем 100 другим сервисам Google Cloud на Linux и macOS.
Любопытно, что нужно для запуска Swift вообще без ОС? Минимальное ядро на Swift, работающее в QEMU, использует Embedded Swift и атрибут
@cдля загрузки ядра, которое печатает сообщение и эхо‑выводит введённые символы.Solbach Leads поделились своей историей внедрения Swift, включая то, как они перенесли производственный конвейер данных AI с Kotlin и Spring Boot на Swift и Vapor. Спустя шесть месяцев их конвейер обрабатывает более 52 миллионов задач в месяц.
Хватит спать: Детерминированные тесты для конкурентного кода на Swift показывает, как заменить
Task.sleepв тестах на тестовые шпионы, чтобы тесты могли проверять тайм‑ауты, ошибки и отмену, не дожидаясь часов.Вышел ежемесячный отчёт Swift for Wasm. Обновления за сентябрь 2026 освещают экспериментальную поддержку потоков в Wasm Swift SDK (в настоящее время в ночных снапшотах), новую опцию uWASI в JavaScriptKit и пользовательские элементы в ElementaryUI.
Новые релизы пакетов
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.