Вышел
Swift 6.3 - релиз, который делает акцент на том, чтобы язык работал не только на Apple-платформах.
Android,
C /
C++ интеграция, улучшенная сборка и поддержка встраиваемых систем - вот главные темы этого обновления.
Главное нововведение - @c
Самый интересный атрибут в этом релизе -
@c. Он позволяет экспортировать Swift-функции и перечисления в C-заголовки. То есть вы можете написать функцию на
Swift и вызывать ее из
C или
C++ кода. Без лишних прослоек, без ручного написания оберток.
Особенно это актуально для библиотек, которые работают с
LLM - большинство из них написаны на
C /
C++, а все остальное - обертки. Если у вас есть своя обертка над
llama.cpp, теперь ее можно сделать более прямой и эффективной.
Также
@c работает в паре с
@implementation: можно объявить функцию в C-заголовке, а реализовать ее на
Swift. Компилятор проверит, что сигнатуры совпадают, и сгенерирует все необходимое.
Модульные селекторы и контроль оптимизаций:
Другая полезная фича - модульные селекторы. Если в двух импортированных модулях есть функции с одинаковыми именами, раньше приходилось изворачиваться. Теперь можно явно указать:
ModuleA::getValue() и
ModuleB::getValue(). Конфликтов больше нет.
Для библиотек добавили новые атрибуты:
@specialize (прекомпилированные версии generic-функций),
@inline(always) (гарантированное встраивание) и
@export(implementation) (экспорт реализации для оптимизаций). Это для тех случаев, когда нужно выжать максимум производительности.
SwiftPM и Swift Build:
Менеджер пакетов получил preview-версию нового движка сборки
Swift Build. Он делает сборку более единообразной на всех платформах. Теперь не должно быть ситуаций, когда пакет собирается на
macOS, но падает на
Linux из-за различий в тулчейне.
Swift Testing: теперь с предупреждениями:
Фреймворк тестирования обзавелся несколькими полезными возможностями:
- Можно записать предупреждение (severity: .warning), которое не помечает тест как упавший, но показывает, что что-то подозрительное произошло.
- Теперь можно отменить тест после его запуска (try Test.cancel()), например, для пропуска отдельных аргументов в параметризованном тесте.
- Добавлена поддержка вложений изображений - полезно для визуальных тестов.
Документация и кроссплатформа:
DocC получил экспериментальную поддержку генерации Markdown-версий документации и статического HTML (чтобы документацию было легче находить поисковым системам). А также новые аннотации для блоков кода: отключение копирования, подсветка строк, отображение номеров строк, перенос по ширине.
Android и Embedded:
В релизе появился официальный
Swift SDK для
Android. Это большой шаг для кроссплатформенной разработки на
Swift. Можно писать нативные программы для
Android, обновлять существующие пакеты, чтобы они собирались под
Android, и интегрировать Swift-код в существующие приложения на
Kotlin /
Java.
Embedded Swift тоже получил улучшения: отладка, линковка, интероп с
C - все это стало стабильнее.
Вывод:
Swift 6.3 - это не про очередные фичи для iOS-разработки. Это про то, чтобы
Swift стал языком, на котором можно писать везде: от встраиваемых систем до Android-приложений. C-интероп через
@c открывает прямой доступ к огромной экосистеме библиотек. А улучшения в
SwiftPM и
Swift Testing делают разработку более предсказуемой. Для тех, кто пишет кроссплатформенный код или работает с низкоуровневыми библиотеками, этот релиз - важный шаг вперед.