Компания Apple опубликовала релиз языка программирования Swift 6.0. Официальные сборки подготовлены для Linux (Ubuntu 20.04/22.04/24.04, Debian 12, Fedora 39, Amazon Linux 2, RHEL 9), Windows 10 и macOS (Xcode). Исходные тексты распространяются под лицензией Apache 2.0.
Язык Swift сочетает лучшие элементы языков C и Objective-C, и предоставляет объектную модель, совместимую с Objective-C (Swift-код может смешиваться с кодом на С и Objective-C), но отличается использованием средств автоматического распределения памяти, контроля переполнения переменных и массивов, защитой от использования неинициализированных переменных и блокированием доступа к памяти после её освобождения, что значительно увеличивает надёжность и безопасность кода. Swift также предлагает множество современных методов программирования, таких как замыкания, обобщённое программирование, лямбда-выражения, кортежи и словарные типы, быстрые операции над коллекциями, элементы функционального программирования.
Pеализация Swift построена с задействованием технологий свободного проекта LLVM. Для обеспечения высокой производительности Swift-программы компилируются в машинный код, который в проведённых тестах демонстрирует производительность на 30% опережающую код на Objective-C. Вместо сборщика мусора в Swift используются средства подсчёта ссылок на объекты. В поставку входит пакетный менеджер Swift Package Manager, предоставляющий инструменты для распространения модулей и пакетов с библиотеками и приложениями на языке Swift, управления зависимостями, автоматизированной загрузки, сборки и связывания компонентов.
Ключевые изменения в новой версии:
- Добавлен новый режим изоляции данных, предоставляющий на уровне компилятора защиту от состояний гонки, возникающих при обращении к данным из параллельно выполняемых потоков. При включении режима компилятор выполняет проверку безопасного использования или наличия должных блокировок данных, обрабатываемых параллельно выполняемым кодом.
- Предложен экспериментальный урезанный вариант языка Embedded Swift, предназначенный для создания приложений для встраиваемых систем и микроконтроллеров. В компиляторе сборка в новом режиме реализована для целевых платформ ARM и RISC-V, и позволяет генерировать более компактные, потребляющие меньше памяти и обособленные исполняемые файлы, не привязанные к runtime.
- Предложена новая библиотека Synchronization, предоставляющая низкоуровневый API для организации параллельного выполнения кода, атомарного выполнения операций и использования мьютексов.
- Добавлена поддержка типизированных исключений (Typed throws), дающих возможность указать тип возвращаемой ошибки на этапе определения функции. Например, ниже показано определение функции, которая либо возвращает экземпляр Record либо ошибку с типом ParseError: func parseRecord(from string: String) throws(ParseError) -> Record { // … }
- Предоставлена возможность использования обобщённого кода (generic), который может одновременно работать как с копируемыми, так и с некопируемыми типами (некопируемые типы могут иметь только одного владельца, что позволяет добиться увеличения производительности за счёт замены связанных с владением проверок на запрет копирования ресурсов).
- Расширена переносимость с кодом на языке C++ в таких областях, как
типы, допускающие только перемещение, виртуальные методы, аргументы по умолчанию и дополнительные типы стандартной библиотеки (например, std::map и std::optional). - Реализованы знаковые и беззнаковые 128-разрядные целые типы.
- Библиотека Foundation унифицирована для всех поддерживаемых платформ (Linux, Windows, macOS) и может применяться в переносимых приложениях. На языке Swift переписаны реализации типов JSONDecoder, URL, Calendar, FileManager и ProcessInfo.
- Добавлена новая библиотека Swift Testing, предоставляющая API для написания и выполнения тестов.
- Значительно расширена поддержка платформ Linux и Windows. Добавлена возможность сборки полностью статически связываемых исполняемых файлов для Linux, не использующих внешние зависимости (реализован static SDK для Linux). Обеспечено тестирование в Debian, Fedora и Ubuntu 24.04.