Стандартная библиотека

Ü обладает (пока что) небольшой, но полезной стандартной библиотекой, содержащей контейнеры и вспомогательный функционал. Эта стандартная библиотека называется 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 контейнеры. Так что эти контейнеры стоит избегать в средах без кучи.