Вышел Swift 6.3, что же там внутри?
Два дня назад Apple выкатили Swift 6.3. Найти блог пост можешь как-обычно на swift.org. Но для тех, кому лень все читать, вот основные моменты:
1. @c - Swift функции теперь видны из C:
Раньше, чтобы дёрнуть Swift из C / C++, приходилось городить bridging обёртки. Теперь вешаешь @c на функцию - и компилятор сам генерит декларацию в C-хедере:
В сгенерированном хедере появится:
Можно задать кастомное имя через @c(MyLib_callFromC). А в связке с @implementation - наоборот, реализовать существующую C-функцию на Swift. Компилятор проверит, что сигнатуры совпадают.
Ты можешь спросить, а зачем тебе это? Если работаешь с C/C++ библиотеками или Embedded - это убирает целый слой boilerplate.
2. Module selectors - ModuleA::getValue()
Импортируешь два модуля, а в обоих есть 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 по строкам - удобно для туториалов.
—-
А ты что-то ждал или нашел для себя приятный сюрприз?😜
Два дня назад 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.
Пока рано говорить, что это перевернёт кроссплатформу и
Что если 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 по строкам - удобно для туториалов.
—-
А ты что-то ждал или нашел для себя приятный сюрприз?
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift.org
Swift 6.3 Released
Swift is designed to be the language you reach for at every layer of the software stack. Whether you’re building embedded firmware, internet-scale services, or full-featured mobile apps, Swift delivers strong safety guarantees, performance control when you…
👍7❤6
Forwarded from iOS Roadmap - Новости, анонсы и все события
PvP Дуэли в мини приложении
Привет, в приложении уже доступен для пользования функционал дуэлей. Он работает асинхронно, и вот как это устроенно:
• Создаёшь дуэль - нажимаешь на кнопку "Быстрый матч"
• Отвечаешь на 8 вопросов - это микс тем, сложность по нарастающей: лёгкие -> средние -> сложные -> последний средний
• Ждёшь когда ответит соперник, так же 8 вопросов
После того как ты и твой соперник прошли дуэль, вы получаете результаты. Эти результаты будут отмечаться в статистике в шапке экрана дуэлей и в футере как прошедший матч.
Кто побеждает?🤔
1. Больше правильных ответов -> победа
2. Одинаковый счёт? Побеждает тот, кто быстрее отвечал на правильные вопросы: время на ошибки не считается - нельзя наугад тыкать быстро
3. Разница во времени ≤ 3 секунды? Ничья
Новый функционал позволит тебе ещё качественне и с интересом подойти к вопросу подготовки к собеседованию.
Даже если ты не готовишься к собеседованию, узнать кто же лучше знает вопрос и iOS разработку.
Если остались вопросы или предложения, можно отписать в комментарии или в лс, встретимся на дуэли!🎮
Ссылка на мини приложение
Привет, в приложении уже доступен для пользования функционал дуэлей. Он работает асинхронно, и вот как это устроенно:
• Создаёшь дуэль - нажимаешь на кнопку "Быстрый матч"
• Отвечаешь на 8 вопросов - это микс тем, сложность по нарастающей: лёгкие -> средние -> сложные -> последний средний
• Ждёшь когда ответит соперник, так же 8 вопросов
После того как ты и твой соперник прошли дуэль, вы получаете результаты. Эти результаты будут отмечаться в статистике в шапке экрана дуэлей и в футере как прошедший матч.
Кто побеждает?
1. Больше правильных ответов -> победа
2. Одинаковый счёт? Побеждает тот, кто быстрее отвечал на правильные вопросы: время на ошибки не считается - нельзя наугад тыкать быстро
3. Разница во времени ≤ 3 секунды? Ничья
Новый функционал позволит тебе ещё качественне и с интересом подойти к вопросу подготовки к собеседованию.
Даже если ты не готовишься к собеседованию, узнать кто же лучше знает вопрос и iOS разработку.
Если остались вопросы или предложения, можно отписать в комментарии или в лс, встретимся на дуэли!
Ссылка на мини приложение
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2❤1
AI решение для текущего рынка
Репозиторий career-ops насчитывает 13.4K звёзд и помогает с поисками работы.
Ты кидаешь ссылку на вакансию. Система сама парсит описание, сравнивает с твоим CV, оценивает совпадение по 10 параметрам, генерит PDF-резюме, заточенное именно под эту позицию.
Я насчитал 14 режимов:
• Оценка вакансии
• Генерация CV
• Сканирование порталов
• Батч-обработка десятка вакансий параллельно
• Подготовка к интервью
• Скрипты переговоров по зарплате
• LinkedIn
Советую изучить гитхаб и поспрашивать свою LLM как можно на твоём рынке и для тебя найти применение🙏
Репозиторий career-ops насчитывает 13.4K звёзд и помогает с поисками работы.
Ты кидаешь ссылку на вакансию. Система сама парсит описание, сравнивает с твоим CV, оценивает совпадение по 10 параметрам, генерит PDF-резюме, заточенное именно под эту позицию.
Я насчитал 14 режимов:
• Оценка вакансии
• Генерация CV
• Сканирование порталов
• Батч-обработка десятка вакансий параллельно
• Подготовка к интервью
• Скрипты переговоров по зарплате
Советую изучить гитхаб и поспрашивать свою LLM как можно на твоём рынке и для тебя найти применение
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - santifer/career-ops: Open-source AI job search: scan job portals, evaluate listings with a structured A-F rubric into…
Open-source AI job search: scan job portals, evaluate listings with a structured A-F rubric into a 1.0-5.0 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Cod...
👍4🔥4❤1
Сегодня Apple отвечает на твои вопросы по Swift Concurrency
Возможно ты вспомнишь, как вечерами сидел и немного злился при миграции на Swift 6? А может-быть тебе не достаточно понятно:"Как же устроен async / await под капотом?"
Всё это и много другое можно будет сегодня спросить у разработчиков из Apple, напрямую! Да-да, не удивляйся...
Формат простой:
• Задавать вопрос здесь
• Отвечать будут здесь
Я бы посоветовал заранее подумать, до эфира, что хочется спросить и, возможно, подготовить код. Тогда ты сможешь одним из первых закинуть в Q&A секцию и не ждать очередь / пропустить.
https://www.youtube.com/live/E95agtPgaa0
Возможно ты вспомнишь, как вечерами сидел и немного злился при миграции на Swift 6? А может-быть тебе не достаточно понятно:"Как же устроен async / await под капотом?"
Всё это и много другое можно будет сегодня спросить у разработчиков из Apple, напрямую! Да-да, не удивляйся...
Формат простой:
• Задавать вопрос здесь
• Отвечать будут здесь
Я бы посоветовал заранее подумать, до эфира, что хочется спросить и, возможно, подготовить код. Тогда ты сможешь одним из первых закинуть в Q&A секцию и не ждать очередь / пропустить.
Сегодня, в 20:00 по МСК
https://www.youtube.com/live/E95agtPgaa0
Apple Developer
Q&A: Swift concurrency - Meet with Apple - Videos - Apple Developer
Join us online for a live deep dive into Swift concurrency with Apple engineers. Ask questions, gain insights from teams within Apple who...
👍2❤1🔥1
Swift Concurrency + Task.immediate
Представь, что ты на
Угадай, что вызовется первым?
• update
• print
Спойлер:print
И возможно тебе требовалось:
1. Выполнить быструю задачу, которая заканчивается без реального suspend
2. Ловишь легаси колбэки, но точно знаешь, что он на main
3. Нужен порядок: сначала обновить state, потом продолжить синхронный код
И вот, в Swift 6.2 завезли Task.immediate
Как понятно из названия, в
Если update() успеет обновить state до того, как реально приостановится - обновление произойдёт до print.
Всё это, плюс await != suspension, как часто сгодится и др. разобрано глубже в пропозале:
• https://github.com/swiftlang/swift-evolution/blob/main/proposals/0472-task-start-synchronously-on-caller-context.md
Или есть небольшое саммари:
• https://www.avanderlee.com/concurrency/immediate-tasks-in-swift-concurrency-explained/
В ноушене будет скоро 👍️️️️️️
Представь, что ты на
@MainActor и тебе надо вызвать async функцию:
@MainActor
func didTapButton() {
Task {
await viewModel.update()
}
print("после Task")
}
Угадай, что вызовется первым?
• update
Спойлер:
Task - это "давай положим в очередь. А выполним, когда executor освободится".И возможно тебе требовалось:
1. Выполнить быструю задачу, которая заканчивается без реального suspend
2. Ловишь легаси колбэки, но точно знаешь, что он на main
3. Нужен порядок: сначала обновить state, потом продолжить синхронный код
И вот, в Swift 6.2 завезли Task.immediate
Как понятно из названия, в
Task.immediate стартует тело задачи синхронно, на текущем executor'е и без enqueue. Гонит код до первой реальной suspension и только там отдаёт управление обратно на calling executor.
@MainActor
func didTapButton() {
Task.immediate {
await viewModel.update()
}
print("после Task.immediate")
}
Если update() успеет обновить state до того, как реально приостановится - обновление произойдёт до print.
Всё это, плюс await != suspension, как часто сгодится и др. разобрано глубже в пропозале:
• https://github.com/swiftlang/swift-evolution/blob/main/proposals/0472-task-start-synchronously-on-caller-context.md
Или есть небольшое саммари:
• https://www.avanderlee.com/concurrency/immediate-tasks-in-swift-concurrency-explained/
В ноушене будет скоро 👍️️️️️️
GitHub
swift-evolution/proposals/0472-task-start-synchronously-on-caller-context.md at main · swiftlang/swift-evolution
This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. - swiftlang/swift-evolution
❤4👍2🔥2
Крупный редизайн для mini app
Привет! В мини-приложении не так давно появился режим дуэлей.
Изучаю AI на практике, поэтому редизайн делал вместе с Claude Design, через агентов в Claude Code. Кто помнит, какой дизайн был раньше - оцените разницу.
Перепаковано всё: от баннера на вкладке "Интервью" до экранов ожидания, самой сессии и финальных результатов.
Если ты не пробовал, то самое время. Можно договориться с другом и сыграть один на один, или принять открытый вызов от любого игрока. Игра асинхронная, возвращайся к ней когда удобно.
Если есть идеи, пожелания, нашел баг - смело пиши @somestay07
Привет! В мини-приложении не так давно появился режим дуэлей.
Если коротко - соревнуешься с реальным человеком на одинаковых вопросах: кто сильнее в iOS. Вопросы случайные, но обоим даются те же. Побеждает тот, у кого больше правильных ответов; при равном счёте решает суммарное время.
Рандомные вопросы одинаковы для обоих, побеждает тот, кто ответил правильнее. А в случае ничьи решает время.
Изучаю AI на практике, поэтому редизайн делал вместе с Claude Design, через агентов в Claude Code. Кто помнит, какой дизайн был раньше - оцените разницу.
Перепаковано всё: от баннера на вкладке "Интервью" до экранов ожидания, самой сессии и финальных результатов.
Если ты не пробовал, то самое время. Можно договориться с другом и сыграть один на один, или принять открытый вызов от любого игрока. Игра асинхронная, возвращайся к ней когда удобно.
Если есть идеи, пожелания, нашел баг - смело пиши @somestay07
❤5👍2🔥2