Стандартная библиотека¶
Ü обладает (пока что) небольшой, но полезной стандартной библиотекой, содержащей контейнеры и вспомогательный функционал. Эта стандартная библиотека называется ustlib.
Эта страница кратко описывает содержимое стандартной библиотеки (без подробностей). Если вы хотите узнать больше, читайте её исходный код самостоятельно.
Вспомогательный функционал¶
Выравненное хранилище, используемое внутри некоторыми контейнерами (aligned_storage.u).
Функции выделения/освобождения памяти (alloc.u).
Ассерты (assert.u).
Поддержка атомарных операций (atomic.u).
Математические функции с проверкой переполнения (checked_math.u).
Вспомогательные функции для создания массивов и кортежей (composite.u). Содержит функции которые конструируют объекты типов массивов и кортежей для переданных аргументов.
Различные утилиты для контейнеров (container_utils.u).
Вспомогательные функции для корутин (coro.u).
Функции хеширования (hash.u). Хеширование поддерживается для всех основных типов языка.
Различный вспомогательный функционал (helpers.u).
Шаблон класса итератора (iterator.u). Он поддерживает трансформации, фильтрацию и другие операции над итераторами.
Математические функции (math.u).
Функции для работы с памятью, в основном небезопасные (memory.u).
Функции минимум/максимум (minmax.u).
Вспомогательные функции для mixin (mixin_utils.u).
Функции для оперирования с полиморфными объектами (polymorph.u).
Вспомогательные функции для ссылочной нотации (reference_notation.u). Используются для упрощения указания ссылочной нотации функций.
Вспомогательные классы и макросы для создания массивов со временем жизни, ограниченным блоком (scoped_array.u).
Функции сортировки (sort.u).
Поддержка (частичная) вывода в стандартный поток (stdout.u).
Функции для преобразования чисел в строку (string_conversions.u).
Класс потока (thread.u). Основан на библиотеке pthread.
Различные вспомогательные функции для работы с типами и проверкой типов (type_traits.u).
Вспомогательные макросы для эффективного использования некоторых контейнеров (ustlib_macros.u).
Поддержка volatile операций с памятью (volatile.u).
Контейнеры¶
Контейнер-обёртка (box.u) с хранилищем, выделяемым в куче и его зануляемая версия (box_nullabe.u). Предназначен для непрямого хранения значения, что позволяет использовать его для создания рекурсивных структур данных.
Класс optional, который хранит в себе значение указанного типа или же пуст (optional.u).
Опциональная ссылка, которая или хранит ссылку на значение (изменяемую или неизменяемую), или же не указывает ни на какой объект (optional_ref.u).
Невладеющее представление последовательности значений определённого типа (изменяемых или неизменяемых) (random_access_range.u).
Контейнер result, который хранит в себе значение одного из двух указанных типов (result.u). Предназначен для использования в качестве возвращаемого значения для функций, которые могут завершиться неудачей.
Однопоточные разделяемые указатели (shared_ptr.u). Предоставляют возможность внутренней разделяемой изменяемости.
Однопоточные разделяемые указатели для неизменяемых данных (shared_ptr_final.u). Позволяют разделять один и тот же неизменяемый объект между множеством пользователей.
Многопоточные разделяемые указатели (shared_ptr_mt.u). Предоставляют возможность потокобезопасный внутренней разделяемой изменяемости.
Многопоточные разделяемые указатели для неизменяемых данных (shared_ptr_mt_final.u). Позволяют разделять один и тот же неизменяемый объект между множеством пользователей и потоков.
Строки (string.u, string_base.u) и вспомогательные утилиты. Строки подобны векторам, но поддерживают только``char`` типы в качестве элементов и позволяют конкатенацию через перегруженные операторы
+
.Unordered map - контейнер ключ-значение на основе хеширования (unordered_map.u).
Unordered set (адептер для unordered map) (unordered_set.u)
Контейнер variant, который может хранить в себе значение одного из указанных типов (variant.u).
Vector - последовательный контейнер с возможностью добавления элементов в конец (vector.u).
Встроенный в компилятор функционал¶
Некоторые функции ustlib реализованы непосредственно в компиляторе Ü. Эти функции реализованы в ll файлах в поддиректории src. Эти ll файлы компилируются при сборке компилятора Ü и встраиваются в него. По этой причине настоятельно рекомендуется использовать ustlib, поставляемую с компилятором, чтобы избежать возможного несоответствия объявления этих функций реализации.
Выделение памяти¶
Некоторый функционал ustlib не использует функций выделения памяти и может быть использован в средах без кучи.
Другой же функционал использует кучу. К нему относятся контейнеры box, box_nullable string, vector, unordered_map и все shared_ptr контейнеры. Так что эти контейнеры стоит избегать в средах без кучи.