В продолжении предыдущего поста...
🖥 Логарифмический график изменения процентного соотношения основных языков программирования в репозитории Swift. От версии 2.2 до 6.1.
Повторю, график логарифмический, иначе низы слились бы в одну линию. Смотрите значения оси Y и подписанные циферки.
🧍♂ Что я сделал
Конечно же начал с клонирования репозитория Swift. Дальше нужны было найти инструмент для подсчета процентов на каждом из нужных мне коммитов. Сам GitHub для этой цели использует Ruby-приложение Linguist, которое хрен поставишь на macOS. Я начал с cloc, но цифры, которые он выдавал были странные. Оказалось, что он подсчитывает код построчно, то есть
дает +3 в копилку свифта, а
дает +1.
И это явно не то, что нужно, так как Linguist подсчитывает код побайтово.
Оказалось, что у Linguist есть порт на языке Go - Enry. А скомпилировать go-приложение на макоси можно без вопросов, что я и сделал. Дальше муторное переключение между коммитами, заваривание чая, сбор статистики, заваривание кофе, сведение все в табличку, поиск художника для отрисовки графика.
Из графика видно, что разрыв между C++ и Swift в 2016 года был практически в 2 раза, а в последнем релизе Swift 6.1 - практически отсутствует. Objective-C++ все еще есть, хотя в Swift 5.9 появился интероп между плюсами и свифтом.
🧍♂ Верим в светлые времена, когда часть исходного кода плюсов будет написана на Swift, а не наоборот)
Повторю, график логарифмический, иначе низы слились бы в одну линию. Смотрите значения оси Y и подписанные циферки.
Конечно же начал с клонирования репозитория Swift. Дальше нужны было найти инструмент для подсчета процентов на каждом из нужных мне коммитов. Сам GitHub для этой цели использует Ruby-приложение Linguist, которое хрен поставишь на macOS. Я начал с cloc, но цифры, которые он выдавал были странные. Оказалось, что он подсчитывает код построчно, то есть
if {
// ...
}дает +3 в копилку свифта, а
if { // ... }дает +1.
И это явно не то, что нужно, так как Linguist подсчитывает код побайтово.
Оказалось, что у Linguist есть порт на языке Go - Enry. А скомпилировать go-приложение на макоси можно без вопросов, что я и сделал. Дальше муторное переключение между коммитами, заваривание чая, сбор статистики, заваривание кофе, сведение все в табличку, поиск художника для отрисовки графика.
Из графика видно, что разрыв между C++ и Swift в 2016 года был практически в 2 раза, а в последнем релизе Swift 6.1 - практически отсутствует. Objective-C++ все еще есть, хотя в Swift 5.9 появился интероп между плюсами и свифтом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Что значит Swift Build для экосистемы Swift
Разработчики Tuist об аспектах выпуска Swift Build. Очень интересно почитать мысли тех, кто годами занимается низкоуровневой работой с проектами. О перспективах туиста и формата проектов.
Авторитетное мнение.
Разработчики Tuist об аспектах выпуска Swift Build. Очень интересно почитать мысли тех, кто годами занимается низкоуровневой работой с проектами. О перспективах туиста и формата проектов.
Авторитетное мнение.
tuist.dev
What Swift Build means for the Swift ecosystem
In blog post we share our perspective on what Swift Build might mean for the Swift ecosystem, drawing from our extensive experience working with Xcode projects, and how it aligns with the plans we have for Tuist.
👍10🤡3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30❤2🌚1🍾1
Forwarded from Mobius — канал конференции
#доклады
Молот и наковальня iOS-разработчика
ℹ️ О чем доклад: Узнаем о macOS-приложении RaifMagic — внутреннем инструменте Райффайзен Банка. Приложение помогает автоматизировать ежедневные рабочие задачи и стандартизировать контроль качества программного кода.
RaifMagic имеет интегрированный с Swift Concurrency механизм запуска консольных команд, самописную систему автообновления и контроля требуемой для генерации проекта версии, систему контроля и развертывания окружения, систему проверки качества кода, систему интеграции с GitLab для назначения ревьюеров на merge requests и многие другие функции. Выясним историю создания и развития инструмента.
🗣 Спикеры:
Василий Усов — автор бестселлера «Swift. Основы разработки приложений под iOS, iPadOS и MacOS». Работает в платформенной команде Райффайзен Банка, ведет блог Мобильный кот и развивает сообщество JustSwift.
Кирилл Шумаков работает в Райффайзен Банке. Любит делать красивые анимации и классные инструменты для разработчиков.
Подробности и билеты
Молот и наковальня iOS-разработчика
ℹ️ О чем доклад: Узнаем о macOS-приложении RaifMagic — внутреннем инструменте Райффайзен Банка. Приложение помогает автоматизировать ежедневные рабочие задачи и стандартизировать контроль качества программного кода.
RaifMagic имеет интегрированный с Swift Concurrency механизм запуска консольных команд, самописную систему автообновления и контроля требуемой для генерации проекта версии, систему контроля и развертывания окружения, систему проверки качества кода, систему интеграции с GitLab для назначения ревьюеров на merge requests и многие другие функции. Выясним историю создания и развития инструмента.
🗣 Спикеры:
Василий Усов — автор бестселлера «Swift. Основы разработки приложений под iOS, iPadOS и MacOS». Работает в платформенной команде Райффайзен Банка, ведет блог Мобильный кот и развивает сообщество JustSwift.
Кирилл Шумаков работает в Райффайзен Банке. Любит делать красивые анимации и классные инструменты для разработчиков.
Подробности и билеты
🔥20😁7👍2
Mobius 2025. Итоги
Было круто, если еще не бывали там - атакуйте мозг своего работодателю, чтобы отправил. Нетворкинг прекрасный. В этот раз OZON устроил чрезвычайно крутую вечеринку после первого дня, удалось и на сцене Кирпичейнавалить попеть, и с Яндексом погудеть (я в Райфе, для информации).
К докладу удалось выложить в опенсорс все, что планировал. Не все в идеальном виде, не со всей докой. Но сперва год разработки, потом три месяца адовой подготовки не прошли даром.
🦄 RaifMagic
Панель управления iOS проектом. Место моего творчества последний год.
⚠️ CodeOwners
Система, управляющая отношением «файл-владелец» в проекте, и контролирующее влитие МРов в мастер. Суть в том, что разраб может влить МР только когда все заинтересованные лица поставят аппрувы. Данная система есть в составе Мейджика (см. выше), но так же может использоваться независимо. Скоро будет релиз более автоматизированной версии и, возможно, GUI на KMP под все операционки. Как сайд-эффект - вы всегда знаете, какая команда отвечает за тот или иной модуль.
💇♀️ CodeStyler
Система, контролирующая качество кода. Такой linter + danger на максималках, расширяемый, написан на Swift, с локальным GUI и интеграцией на CI. Суть в том, что пока пользователь не выполнит все правила оформления кода и ресурсов, то он не сможет влить их в репозиторий (или даже просто пушнуть). А вишенка в том, что можете писать свои правила на что угодно. Мы, к примеру, проверяем правила оформления в соответствии со swiftformat, архитектурные вопросы, форматы загружаемых изображений, а на CI еще наличие русских символов в названии ветки (оказалось капец как актуально😁)
📟 CommandExecutor
Либа для вызова shell-команд из Swift. Полная интеграция со Swift Concurrency и Swift 6.
Следующим постом приложу презентацию с доклада, но лучше смотреть доклад на сайте конференции. Надеюсь его скоро выложат на ютубчик
Было круто, если еще не бывали там - атакуйте мозг своего работодателю, чтобы отправил. Нетворкинг прекрасный. В этот раз OZON устроил чрезвычайно крутую вечеринку после первого дня, удалось и на сцене Кирпичей
К докладу удалось выложить в опенсорс все, что планировал. Не все в идеальном виде, не со всей докой. Но сперва год разработки, потом три месяца адовой подготовки не прошли даром.
🦄 RaifMagic
Панель управления iOS проектом. Место моего творчества последний год.
⚠️ CodeOwners
Система, управляющая отношением «файл-владелец» в проекте, и контролирующее влитие МРов в мастер. Суть в том, что разраб может влить МР только когда все заинтересованные лица поставят аппрувы. Данная система есть в составе Мейджика (см. выше), но так же может использоваться независимо. Скоро будет релиз более автоматизированной версии и, возможно, GUI на KMP под все операционки. Как сайд-эффект - вы всегда знаете, какая команда отвечает за тот или иной модуль.
💇♀️ CodeStyler
Система, контролирующая качество кода. Такой linter + danger на максималках, расширяемый, написан на Swift, с локальным GUI и интеграцией на CI. Суть в том, что пока пользователь не выполнит все правила оформления кода и ресурсов, то он не сможет влить их в репозиторий (или даже просто пушнуть). А вишенка в том, что можете писать свои правила на что угодно. Мы, к примеру, проверяем правила оформления в соответствии со swiftformat, архитектурные вопросы, форматы загружаемых изображений, а на CI еще наличие русских символов в названии ветки (оказалось капец как актуально😁)
📟 CommandExecutor
Либа для вызова shell-команд из Swift. Полная интеграция со Swift Concurrency и Swift 6.
Следующим постом приложу презентацию с доклада, но лучше смотреть доклад на сайте конференции. Надеюсь его скоро выложат на ютубчик
GitHub
GitHub - Raiffeisen-DGTL/RaifMagic
Contribute to Raiffeisen-DGTL/RaifMagic development by creating an account on GitHub.
🔥23❤6🏆6🍾6
Мобильный кот
Mobius 2025. Итоги Было круто, если еще не бывали там - атакуйте мозг своего работодателю, чтобы отправил. Нетворкинг прекрасный. В этот раз OZON устроил чрезвычайно крутую вечеринку после первого дня, удалось и на сцене Кирпичей навалить попеть, и с Яндексом…
Mobius2025.pdf
43 MB
Презентация с доклада. PDF без анимаций, но для общей картины подходит отлично.
❤10
🫠 Прощай, Swift
Сегодня второй рабочий день в роли Техлида. Два дня уже не программировал, ломает.
А если серьезно, то теперь буду лидить разработку Райффайзен Онлайн - iOS приложения для физических лиц. Невероятно крутая возможность сделать значительный ап своих навыков. Тут и стратегия, и архитектура, и инициатива.
На фоне этого я хочу переформатировать канал. И если раньше я старался держать его только в рамках iOS-разработки, то теперь попробую рассказывать чуть шире. Будет больше постов о том, что не менее важно для мобильного разработчика, чем его код: физическое здоровье, усталость, быт, организация рабочего процесса.
Про разработку конечно не буду забывать, RaifMagic, о котором говорил выше все еще остается в моем ведении. Время от времени буду наливать смузи и кодить на SwiftUI.
Сегодня второй рабочий день в роли Техлида. Два дня уже не программировал, ломает.
А если серьезно, то теперь буду лидить разработку Райффайзен Онлайн - iOS приложения для физических лиц. Невероятно крутая возможность сделать значительный ап своих навыков. Тут и стратегия, и архитектура, и инициатива.
На фоне этого я хочу переформатировать канал. И если раньше я старался держать его только в рамках iOS-разработки, то теперь попробую рассказывать чуть шире. Будет больше постов о том, что не менее важно для мобильного разработчика, чем его код: физическое здоровье, усталость, быт, организация рабочего процесса.
Про разработку конечно не буду забывать, RaifMagic, о котором говорил выше все еще остается в моем ведении. Время от времени буду наливать смузи и кодить на SwiftUI.
🔥107😁13❤🔥10👍8🐳3❤2😢2🏆2
Forwarded from Mobius — канал конференции
#видеозаписи #МобильныйВторник
Открываем новую видеозапись выступления:
Кирилл Шумаков, Василий Усов — Молот и наковальня iOS-разработчика
YouTube | VK Видео
Открываем новую видеозапись выступления:
Кирилл Шумаков, Василий Усов — Молот и наковальня iOS-разработчика
YouTube | VK Видео
YouTube
Василий Усов, Кирилл Шумаков — Молот и наковальня iOS-разработчика
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Спикеры рассказали о macOS-приложении RaifMagic — внутреннем инструменте Райффайзен Банка, который их команда создала в рамках работы над мобильным приложением для клиентов.
RaifMagic — мощный инструмент…
— —
Спикеры рассказали о macOS-приложении RaifMagic — внутреннем инструменте Райффайзен Банка, который их команда создала в рамках работы над мобильным приложением для клиентов.
RaifMagic — мощный инструмент…
❤16👍10🔥8
🍷Отличный повод выйти из техлидского запоя и запилить пятничный пост после полугода шокового состояния от новой должности
Для информации, Педро - основатель Tuist. Ну а что такое Tuist для iOS, думаю, рассказывать не нужно.
Ну а мои ребята - 💪🏼. Беспощадно контрибьютят в Tuist и интегрируют его решение в проекты Райфа.
Для информации, Педро - основатель Tuist. Ну а что такое Tuist для iOS, думаю, рассказывать не нужно.
Ну а мои ребята - 💪🏼. Беспощадно контрибьютят в Tuist и интегрируют его решение в проекты Райфа.
🔥36👍10🤡2❤1🤣1
Когда структуры в Swift — не твои бро
Один из лучших докладов на Mobius 2025 Autumn. Очень люблю, когда докладчик копает глубоко, объясняет хорошо и разочаровывает меня в Swift.
💡Основное:
- Структуры не всегда ускоряют работу приложения, а не редко замедляют ее и увеличивают размер бинаря.
- Карта линковки (Link Map) позволяет посмотреть из каких сущностей состоит итоговый бинарь,
- С помощью LinkMap можно узнать размер сущностей, вырезанные символы, которые не используются в итоговом бинаре и являются кандидатами на удаление из кода, анализировать краши без DSYM.
- Для сохранения Link Map в файл необходимо включить настройку
- Имена символов манглированы, нужно деманглировать с помощью
- Чем больше вложенность структур друг в друга, тем больше будет итоговый размер структуры. Обычно особенно проблемными являются компоненты дизайн-системы.
- Использование экзистенциальных контейнеров дополнительно увеличивает размер за счет создания сервисных методов witness table. То есть, если компилятор не может рассчитать конкретный тип, а ходит через протокол - ситуация ухудшается. Вот почему нужно использовать some/generic везде, где это возможно.
- Флаги оптимизации -O никак не влияют на рост размера структур.
- Необоснованный рост может быть в КБ, десятки и сотник КБ, и даже МБ для особо больших структур.
- Накладные расходы на поддержку работы структур от 2 КБ превышают расходы на использование ссылочных типов
- Добавление
- Для определения того, какие структуры наиболее важны для такого рефакторинга можно построить граф вложенности структур (на основе Xcode index Store) и определить метрику центральности графа (Betweenness)
🧠 Мысли после доклада:
- А что там со SwiftUI? Вьюшки с кучей проперти-врапперов разгоняют размер и снижают скорость? Имеет ли смысл дробления вьюшек на более мелкие не только ради переписовок, но и облегчения размера?
- А что с NonCopyable структурами? Они не копируются и возможно в них нет такого большого количества сервисного кода.
- Как именно выглядят дженерики в итоговом файле - требует дополнительного изучения.
🔗 Ссылки:
- Видео (если у вас есть билет на конференцию)
Один из лучших докладов на Mobius 2025 Autumn. Очень люблю, когда докладчик копает глубоко, объясняет хорошо и разочаровывает меня в Swift.
💡Основное:
- Структуры не всегда ускоряют работу приложения, а не редко замедляют ее и увеличивают размер бинаря.
- Карта линковки (Link Map) позволяет посмотреть из каких сущностей состоит итоговый бинарь,
- С помощью LinkMap можно узнать размер сущностей, вырезанные символы, которые не используются в итоговом бинаре и являются кандидатами на удаление из кода, анализировать краши без DSYM.
- Для сохранения Link Map в файл необходимо включить настройку
Build Setting → Linking - General → Write Link Map File. Файл будет сохранен в Derived Data с именем {Имя_таргета}-LinkMap-normal-arm64.txt.- Имена символов манглированы, нужно деманглировать с помощью
swift demangle '{Имя_символа}'- Чем больше вложенность структур друг в друга, тем больше будет итоговый размер структуры. Обычно особенно проблемными являются компоненты дизайн-системы.
- Использование экзистенциальных контейнеров дополнительно увеличивает размер за счет создания сервисных методов witness table. То есть, если компилятор не может рассчитать конкретный тип, а ходит через протокол - ситуация ухудшается. Вот почему нужно использовать some/generic везде, где это возможно.
- Флаги оптимизации -O никак не влияют на рост размера структур.
- Необоснованный рост может быть в КБ, десятки и сотник КБ, и даже МБ для особо больших структур.
- Накладные расходы на поддержку работы структур от 2 КБ превышают расходы на использование ссылочных типов
- Добавление
indirect для enum зачастую лечит проблемы, когда в качестве associated value используется "дрянная структура".- Для определения того, какие структуры наиболее важны для такого рефакторинга можно построить граф вложенности структур (на основе Xcode index Store) и определить метрику центральности графа (Betweenness)
🧠 Мысли после доклада:
- А что там со SwiftUI? Вьюшки с кучей проперти-врапперов разгоняют размер и снижают скорость? Имеет ли смысл дробления вьюшек на более мелкие не только ради переписовок, но и облегчения размера?
- А что с NonCopyable структурами? Они не копируются и возможно в них нет такого большого количества сервисного кода.
- Как именно выглядят дженерики в итоговом файле - требует дополнительного изучения.
🔗 Ссылки:
- Видео (если у вас есть билет на конференцию)
👍14❤6🔥3🤔2
Мы уже видели, как Swift успешно захватил server-side, linux и windows разработку. В версии 6.3 язык делает очередной шаг уже в сторону разработки автономного программного обеспечения, в частности под микроконтроллеры или мини-пк, вроде Raspberry Pi и Arduino.
Embedded Swift - это строгое подмножество Swift, благодаря которому конечные бинарные файлы смогут иметь небольшой размер. Ограничения конечно существенные, но не фатальные: нет полноценных экзистенциалов, кучи типов стандартной библиотеки (например
Codable, KeyPath ...), рефлексии, weak и unowned и всякого разного, что может вызывать неопределенности в итоговом бинарном файле и увеличить его размер.Писать на нем iOS-приложения не получится, но использовать структуры, классы, перечисления. дженерики, протоколы, опционалы и другие возможности языка, но для создания микропрограмм - очень заинтересовало.
Неочевидным плюсом этого является то, что аттрибут
@_cdecl наконец зафиналили под именем @c (хотя может это было сделано и в более ранних версиях?). Когда я был в ВК, мы активно использовали его, так как взаимодействие C++ со Swift шло через C-слой (еще до официального интеропа). Ну и всякие новые аттрибуты, вроде @section и @used, Больше всего заинтересовала поддержка разработки под микроконсоль Playdate (см. картинку у поста). И это именно то, что потенциально будет интересно для детей (мужчин в возрасте до 50): пилить игрули не на чистых сях, а на смузи Swift в Xcode с запуском эмулятора Playdate.
🔗 Почитать про Embedded Swift
🔗 Посмотреть PlaydateKit
🔗 Ограничения Embedded Swift
#swift #embeddedswift #swift63
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤡3😁2