Представляем обновление от приглашённого автора Симона Либа (Simon Leeb) о прогрессе Swift как языка для веб‑сценариев:
Привет! Симон на связи. Я создатель проекта elementary‑swift — коллекции пакетов, рождённой из простого желания: я хочу создавать веб‑интерфейсы на Swift и в конечном счёте помочь Swift стать первоклассным выбором для веба. Этот путь начался после того, как я стал использовать Swift для бэкенд‑сервисов. Однако веб‑фронтенд по‑прежнему существовал в отдельной экосистеме, и мне очень хотелось, чтобы он был таким же эргономичным, безопасным и эффективным, как тот Swift, который я писал везде остальном.
Это привело к созданию Elementary — современной и эффективной библиотеки для рендеринга HTML с привычным декларативным API, созданной для веба. Она легко интегрируется с такими фреймворками, как Vapor и Hummingbird, и стала практичным вариантом для серверного рендеринга веб‑интерфейсов.
Примерно в то же время многолетняя работа сообщества над проектом swift‑wasm сделала компиляцию Swift в WebAssembly всё более жизнеспособной, а Embedded Swift делал свои первые экспериментальные шаги. Это заставило меня задуматься: «Насколько сложно может быть использовать Embedded Swift и создать фреймворк для управления состоянием веб‑интерфейса, который создаёт крошечные WebAssembly‑бинарники?» Оказалось: довольно сложно! Но было уже поздно. Несмотря на здравый смысл, я оказался в процессе создания того, что теперь известно как ElementaryUI.
Если Elementary рендерит HTML на сервере, то ElementaryUI работает непосредственно в браузере. Вы можете посмотреть мой доклад на Swift@FOSDEM 2026, если хотите узнать больше о том, зачем, что и как.
Чтобы показать, куда движется проект, я недавно опубликовал небольшую демонстрацию полного стека Swift на Cloudflare. В ней Swift в браузере общается с бэкендом на Swift через общие типы сообщений. Надеюсь, это даст людям конкретное представление о том, насколько продвинулись основные технологии и окружающие их инструменты.
ElementaryUI ещё молод, и многое предстоит построить. Посетите elementary.codes, чтобы попробовать, поделиться отзывами, внести вклад или поддержать разработку. Давайте работать вместе и сделаем Swift первоклассным выбором для веба!
Видео к просмотру
Салеем Абдулрасул (Saleem Abdulrasool) присоединился к подкасту Empower Apps, чтобы обсудить Swift на Windows, серверный Swift, SwiftWin32, взаимодействие Swift с C++ и то, с чего начать.
Создаёте безопасную с точки зрения памяти программу? Видео «Write security‑sensitive code in Swift» рассказывает, как Swift гарантирует безопасность в отношении границ, времени жизни, типов, инициализации и параллелизма, с использованием таких примитивов, как
Spanи некопируемые типы, а также о том, как аудировать небезопасный код со строгой безопасностью памяти и поэтапно мигрировать существующие C‑модули.Два коротких видео о запуске Embedded Swift на Raspberry Pi Pico: “Let it blink!” — начало работы на macOS и «Fun with traffic lights in 60 seconds».
Новости сообщества
«Building scalable backend apps in Swift» описывает подход к структурированию серверных кодовых баз на Swift, отделяя бизнес‑логику от деталей базы данных и фреймворка, чтобы код было легче тестировать и изменять с течением времени.
Блог Swift Package Index объясняет, что такое реестр пакетов, как он вписывается в экосистему SwiftPM и индексов пакетов, а также на примере показывает, как переключить управление зависимостью с Git на реестр Swift.
«Embedded Swift Improvements Coming in Swift 6.4» обобщает, что ждёт Swift на микроконтроллерах и в других ограниченных средах.
Статья The Browser Company “Swift on Windows: A year of refinement” подводит итоги года работы по повышению предсказуемости Swift на Windows.
Новые пакеты
Напишите интерфейс один раз с помощью SwiftTUI, используя декларативный синтаксис с управлением состоянием, а затем опубликуйте его как терминальное приложение, как нативное приложение для macOS или iOS, как приложение для Android или как сборку WASI для браузера.
Устали вручную писать соответствия
RawRepresentableиLosslessStringConvertible? lexic генерирует их за вас с помощью макросов и работает одинаково на Linux и на платформах Apple.StructuredQueries — построитель запросов SQLite от Point‑Free — теперь имеет полностью типобезопасную поддержку столбцов JSON и JSONB, включая функцию таблицы
json_each, так что вложенными данными можно манипулировать по ключевым путям, не выходя из системы типов Swift.
Эволюция Swift
Проект Swift добавляет новые возможности языка через процесс Swift Evolution. Ниже приведены некоторые предложения, которые в настоящее время рассматриваются или недавно приняты для будущих версий Swift.
На стадии активного рассмотрения
ST-0029: Добавить дополнительные метаданные об ошибках в поток событий — сегодня JSON‑поток событий Swift Testing сообщает лишь минимальные сведения при возникновении ошибки, из‑за чего трудно отличить выброшенную ошибку от вызова
manualIssue.record. Это предложение добавляет структурированные поля, включаяerror,confirmationMiscount,exceededTimeLimitиexpression, чтобы такие инструменты, как Xcode и VS Code, могли показывать более полную и конкретную информацию об ошибках.
Недавно принятые
SE-0544: Мутация и потребление в деинициализаторах некопируемых типов — Некопируемые типы, управляющие ресурсом (например, дескриптором файла или буфером), часто должны выполнять ту же логику очистки в своём деинициализаторе, что и в других местах. Однако до сих пор
selfвнутри деинициализатора можно было только заимствовать, но не мутировать или потреблять. Это предложение позволяет деинициализатору напрямую мутировать или потреблять свои собственные сохранённые свойства, так что существующие методы очистки можно использовать повторно, а не дублировать.ST-0028: Пересмотр взаимодействия Attachment/Encodable в Swift Testing — Swift Testing позволяет прикреплять дополнительные данные (например, скриншот или JSON‑снимок) к тесту для проверки после сбоя, но прикрепление пользовательских типов требовало дополнительного кода и не давало возможности выбрать формат кодирования. Это предложение добавляет новые инициализаторы
Attachment, позволяющие прикреплять значенияEncodableилиNSSecureCodingнапрямую, выбирая формат или предоставляя собственный кодировщик.
Недавно принятые с изменениями
SE-0536: Поиск в реестре пакетов — Чтобы использовать пакет из реестра, сегодня нужно уже знать его точный идентификатор, поскольку не существует стандартного способа обнаруживать пакеты внутри реестра, в отличие от других экосистем пакетов. Это предложение добавляет опциональную конечную точку
/searchв спецификацию реестра и подкомандуswift package-registry search, позволяющую находить пакеты по имени, области, автору и другим критериям, с поддержкой квалификаторов типаauthor:"Mona Lisa Octocat"и поиска по всем настроенным реестрам одновременно.SE-0516: Iterable — Итерация по коллекции в Swift традиционно означает копирование элементов по одному, что не работает для новых типов, которые нельзя копировать, таких как
SpanиInlineArray. Это предложение вводитIterable— новый способ итерации по данным без копирования. Перед принятием оно было переименовано изBorrowingSequenceи получило поддержку типизированныхthrow.ST-0026: Трейт TaskLocal для тестов — Локальные для задачи значения подобны настройкам (например, флаг функции), которые действуют только в пределах одной задачи. Переопределение такого значения в тесте раньше требовало написания пользовательского трейта с нуля, но это предложение добавляет трейт
.taskLocal(_:_:), который делает это одной строкой, например:@Suite(.taskLocal(FeatureFlags.$isEnabled, true)).

