Стандартная библиотека
Стандартная библиотека Swift определяет базовый уровень функциональности для написания программ на Swift. Документация стандартной библиотеки в настоящее время размещена на сайте Apple Developer.
Стандартная библиотека Swift, вместе с её тестами и встроенной документацией, является частью основного репозитория Swift на GitHub.
Предварительная версия стандартной библиотеки
Пакет предварительной версии стандартной библиотеки предоставляет ранний доступ к новым добавлениям в стандартную библиотеку. Когда новые API стандартной библиотеки, которые могут быть реализованы как автономная библиотека, принимаются через процесс Swift Evolution, они публикуются как отдельные пакеты и включаются в пакет предварительной версии, который действует как обобщающая библиотека. В настоящее время пакет предварительной версии включает следующие отдельные пакеты:
| Пакет | Описание |
|---|---|
| SE0270_RangeSet | Операции над несмежными поддиапазонами коллекций, такими как subranges(where:) и moveSubranges(_:to:), а также поддерживающий тип RangeSet. |
| SE0288_IsPower | Расширяет BinaryInteger методом isPower(of:), который возвращает, является ли целое число степенью другого. |
Проектирование стандартной библиотеки
Стандартная библиотека Swift включает в себя ряд типов данных, протоколов и функций, включая фундаментальные типы данных (например, Int, Double), коллекции (например, Array, Dictionary) вместе с протоколами, которые их описывают, и алгоритмами, которые на них действуют, символы и строки, и низкоуровневые примитивы (например, UnsafeMutablePointer). Реализация стандартной библиотеки находится в подкаталоге stdlib/public внутри репозитория Swift, который далее подразделяется на:
-
Ядро стандартной библиотеки: Ядро стандартной библиотеки (реализовано в stdlib/public/core), включая определения всех типов данных, протоколов, функций и т.д.
-
Выполнение: Выполнение поддержки языка (реализовано в stdlib/public/runtime), которое расположено между компилятором и ядром стандартной библиотеки. Оно отвечает за реализацию многих динамических функций языка, таких как приведение типов (например, для операторов
as!иas?), метаданных типов (для поддержки дженериков и рефлексии) и управления памятью (выделение объектов, подсчёт ссылок и т. д.). В отличие от библиотек более высокого уровня, среда выполнения написана в основном на C++ или (при необходимости для межплатформенного взаимодействия) Objective-C. -
Наложения SDK: Специфичные для платформ Apple, наложения SDK (реализованы в stdlib/public/Platform) предоставляют Swift-специфические дополнения и модификации существующих фреймворков Objective-C для улучшения их сопоставления в Swift. В частности, наложение
Foundationпредоставляет дополнительную поддержку взаимодействия с кодом Objective-C.
Стандартная библиотека Swift написана на Swift, но поскольку это код Swift самого низкого уровня в стеке — ответственный за реализацию основных типов данных, на которых строится другой код Swift, — он немного отличается от обычного кода Swift. Некоторые из отличий включают:
-
Доступ к встроенным функциям компилятора: Модуль
Builtin, который в основном доступен только стандартной библиотеке, предоставляет встроенные функции компилятора (например, для прямого создания инструкций SIL) и типы данных (например, «сырые» указатели, примитивные целые типы LLVM), необходимые для реализации типов данных, фундаментальных для программирования на Swift. -
Видимость часто управляется соглашением: Декларации стандартной библиотеки часто нуждаются в большей видимости, чем обычно желательно, из-за способа компиляции и оптимизации стандартной библиотеки. Например, модификаторы
privateникогда не используются. Более важно, что часто необходимо сделать что-тоpublic, даже если это не предназначено как часть публичного интерфейса. В таких случаях следует использовать ведущую подчёркивание, чтобы указать, что публичный API предназначен для закрытого использования. Политика управления доступом в стандартной библиотеке документирована в docs/AccessControlInStdlib.rst. -
Повторный код использует gyb: gyb — это простой инструмент для генерации повторяющегося кода из шаблона, который часто используется в стандартной библиотеке. Например, он используется для создания определений целых типов различных размеров (
Int8,Int16,Int32,Int64и т. д.) из единственного источника. -
Тестирование тесно связано с компилятором: Стандартная библиотека и компилятор развиваются вместе и тесно связаны. Изменения в основных типах данных (например,
ArrayилиInt) могут потребовать изменений со стороны компилятора, и наоборот, поэтому набор тестов стандартной библиотеки хранится в той же структуре каталогов, что и компилятор, в test/stdlib и validation-test/stdlib.
The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.
Documentation for Swift 6.0.3
https://www.swift.org/documentation/standard-library/