305просмотров
75.3%от подписчиков
26 марта 2026 г.
questionScore: 336
Вышел Swift 6.3, что же там внутри? Два дня назад Apple выкатили Swift 6.3. Найти блог пост можешь как-обычно на swift.org. Но для тех, кому лень все читать, вот основные моменты: 1. @c - Swift функции теперь видны из C: Раньше, чтобы дёрнуть Swift из C / C++, приходилось городить bridging обёртки. Теперь вешаешь @c на функцию - и компилятор сам генерит декларацию в C-хедере: @c func callFromC() { ... } В сгенерированном хедере появится: void callFromC(void); Можно задать кастомное имя через @c(MyLib_callFromC). А в связке с @implementation - наоборот, реализовать существующую C-функцию на Swift. Компилятор проверит, что сигнатуры совпадают. Ты можешь спросить, а зачем тебе это? Если работаешь с C/C++ библиотеками или Embedded - это убирает целый слой boilerplate. 2. Module selectors - ModuleA::getValue() Импортируешь два модуля, а в обоих есть getValue(). Раньше было больновато, но теперь можно разрулить через ::: import ModuleA
import ModuleB let x = ModuleA::getValue()
let y = ModuleB::getValue() Работает и для стандартной библиотеки: Swift::Task { ... } - когда у тебя в проекте есть свой Task и нужно явно указать на системный. Вроде мелочь, а на больших проектах может быть приятно. 3. Контроль оптимизаций для авторов библиотек Три новых атрибута:
• @specialize - предоставляешь предспециализированные реализации дженерик функций для конкретных типов.
• @inline(always) - гарантирует инлайнинг вызова. Без "может быть". Но используй осторожно: размер бинарника подрастёт.
• @export(implementation) - открывает реализацию функции из ABI-stable библиотеки для клиентов. Больше возможностей для оптимизаций на стороне вызывающего кода. Если ты не автор публичной библиотеки - пока просто знай, что такое есть. Если автор - то можешь изучить подробнее, пригодится. 4. Swift Testing: предупреждения, отмена тестов, картинки Issue.record("Что-то подозрительное", severity: .warning) - записывает проблему как предупреждение, но тест не падает. Удобно для нестабильных вещей, которые не хочешь игнорировать, но и не хочешь ломать пайплайн. try Test.cancel() - отмена теста прямо в процессе выполнения. Можно скипнуть конкретный аргумент в параметризованном тесте или остановиться по условию. Image attachments - ты прикладываешь картинки к тесту на Apple и Windows платформах. Через кросс-импорт с UIKit. 5. Swift Build - единый билд движок, превью Swift Package Manager получил превью интеграции с Swift Build. В чём суть: один билд движок на всех платформах вместо зоопарка. Пока-что это в превью, но уже можно тестировать на своих пакетах. Также: пребилженный swift-syntax для макро библиотек, swift package show traits для просмотра трейтов пакета. 6. Android SDK - официально Это, пожалуй, самая неожиданная штука. Swift 6.3 включает первый официальный SDK для Android. Можно писать нативный Android код на Swift, собирать пакеты под Android, интегрировать Swift в Kotlin / Java-приложения через Swift Java. Пока рано говорить, что это перевернёт кроссплатформу и KMM KMP стоит переживать . Но сам факт, что Apple выпускает официальный Android SDK - внушительный и дающий надежды сигнал. Что если swift хочет быть языком не только для яблочных платформ? Поживём - увидим. 7. Embedded Swift - подтянули Улучшили C-интероп для Embedded, допилили дебаг, продвинулись в linkage model. Если ты работаешь с железом - отдельный блог пост от Apple разбирает детали: Embedded Swift Improvements. 8. DocC - три экспериментальных фичи Markdown-выгрузка документации: --enable-experimental-markdown-output. Статический HTML внутри <noscript> для SEO и скринридеров. Аннотации для блоков кода: nocopy, highlight, showLineNumbers, wrap. Если ты ведёшь документацию через DocC - поиграйся. Особенно highlight по строкам - удобно для туториалов. —- А ты что-то ждал или нашел для себя приятный сюрприз? 😜