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

Ü обладает (пока что) небольшой, но полезной стандартной библиотекой, содержащей контейнеры, вспомогательный функционал, функционал по взаимодействию с системой. Эта стандартная библиотека называется ustlib.

Эта страница кратко описывает содержимое стандартной библиотеки (без подробностей). Если вы хотите узнать больше, читайте её исходный код самостоятельно.

Вспомогательный функционал

  • Выравненное хранилище, используемое внутри некоторыми контейнерами (aligned_storage.iu).

  • Функции выделения/освобождения памяти (alloc.iu).

  • Класс аренного аллокатора (arena_allocator.iu).

  • Ассерты (assert.iu).

  • Примитив синхронизации барьер (barrier.iu).

  • Поддержка атомарных операций (atomic.iu).

  • Функции для работы с двоичной кучей и сортировка кучей (binary_heap.iu).

  • Функции бинарного поиска (binary_seach.iu).

  • Функции побитовой математики (bit_math.iu).

  • Математические функции с проверкой переполнения (checked_math.iu).

  • Классы сравнения для сортировки и бинарного поиска (compare.iu).

  • Вспомогательные функции для создания массивов и кортежей (composite.iu). Содержит функции которые конструируют объекты типов массивов и кортежей для переданных аргументов.

  • Примитив синхронизации условная переменная (condition_variable.iu).

  • Различные утилиты для контейнеров (container_utils.iu).

  • Вспомогательные функции для корутин (coro.iu).

  • Итратор по элементам директории (directory_iterator.iu).

  • Класс длительности (duration.iu)

  • Фунции для преобразования перечислений в строки и строк в перечисления (enum_string_conversions.iu).

  • Классы файлов (file.iu).

  • Дополнительные функции для чтения/записи файлов (file_helpers.iu).

  • Структуры метаданных файла (file_metadata.iu).

  • Функции для работы с файловой системой (filesystem.iu).

  • Функции хеширования (hash.iu). Хеширование поддерживается для всех основных типов языка.

  • Различный вспомогательный функционал (helpers.iu).

  • Структуры ip адресов и адресов сокетов (inet_address.iu).

  • Объявление функции разрешения сетевого адреса (inet_address_resolve.iu).

  • Объявления типов IO result (io_result.iu).

  • Функции для парсинга десятичных целых чисел (integer_parsing.iu).

  • Шаблон класса итератора (iterator.iu). Он поддерживает трансформации, фильтрацию и другие операции над итераторами.

  • Вспомогателньый макрос-обёртка для входной точки исполняемых файлов (main_wrapper.iu)

  • Математические функции (math.iu).

  • Функции для работы с памятью, в основном небезопасные (memory.iu).

  • Функции минимум/максимум (minmax.iu).

  • Вспомогательные функции для mixin (mixin_utils.iu).

  • Объявление нативного типа сокета (native_socket.iu).

  • Объявление типа пути файловой системы (path.iu).

  • Функции для манимуляции путями файловой системы (path_utils.iu).

  • Функции для оперирования с полиморфными объектами (polymorph.iu).

  • Вспомогательные функции для ссылочной нотации (reference_notation.iu). Используются для упрощения указания ссылочной нотации функций.

  • Вспомогательные классы и макросы для создания массивов со временем жизни, ограниченным блоком (scoped_array.iu).

  • Примитив синхронизации семафор (semaphore.iu).

  • Разделяемая версия примитива синхронизации барьер (shared_barrier.iu).

  • Разделяемая версия примитива синхронизации условная переменная (shared_condition_variable.iu).

  • Функции сортировки (sort.iu).

  • Поддержка чтения из стандартного потока ввода (stdin.iu).

  • Поддержка вывода в стандартный поток (stdout.iu).

  • Функции для преобразования чисел в строку (string_conversions.iu).

  • Класс системного времени (system_time.iu).

  • Класс TCP слушателя (tcp_listener.iu).

  • Класс TCP потока (tcp_stream.iu).

  • Класс потока (thread.iu).

  • Различные вспомогательные функции для работы с типами и проверкой типов (type_traits.iu).

  • Класс UDP сокета (udp_socket.iu).

  • Вспомогательные макросы для эффективного использования некоторых контейнеров (ustlib_macros.iu).

  • Функции для преобразования между строками разных форматов (UTF-8, UTF-16, UTF-32) (utf.iu).

  • Поддержка volatile операций с памятью (volatile.iu).

Контейнеры

  • Контейнер для хранения значения (почти) произвольного типа (any.iu).

  • Контейнер массива, выделяемого в арене (arena_allocated_array.iu).

  • Контейнер-обёртка (arena_allocated_box.iu), с хранилищем, выделяемым в арене и его зануляемая версия (arena_allocated_box_nullable.iu).

  • Контейнер атомарной переменной, который оборачивает сырые атомарные операции (atomic_variable.iu).

  • Контейнер-обёртка (box.iu) с хранилищем, выделяемым в куче и его зануляемая версия (box_nullabe.iu). Предназначен для непрямого хранения значения, что позволяет использовать его для создания рекурсивных структур данных.

  • Hash map - контейнер ключ-значение на основе хеширования (hash_map.iu).

  • Hash set (адептер для hash map) (hash_set.iu).

  • Класс optional, который хранит в себе значение указанного типа или же пуст (optional.iu).

  • Опциональная ссылка, которая или хранит ссылку на значение (изменяемую или неизменяемую), или же не указывает ни на какой объект (optional_ref.iu).

  • Невладеющее представление последовательности значений определённого типа (изменяемых или неизменяемых) (random_access_range.iu).

  • Контейнер result, который хранит в себе значение одного из двух указанных типов (result.iu). Предназначен для использования в качестве возвращаемого значения для функций, которые могут завершиться неудачей.

  • Разделяемая версия контейнера атомарной переменной (shared_atomic_variable.iu).

  • Однопоточные разделяемые указатели (shared_ptr.iu). Предоставляют возможность внутренней разделяемой изменяемости.

  • Однопоточные разделяемые указатели для неизменяемых данных (shared_ptr_final.iu). Позволяют разделять один и тот же неизменяемый объект между множеством пользователей.

  • Многопоточные разделяемые указатели (shared_ptr_mt.iu). Предоставляют возможность потокобезопасный внутренней разделяемой изменяемости.

  • Многопоточные разделяемые указатели для неизменяемых данных (shared_ptr_mt_final.iu). Позволяют разделять один и тот же неизменяемый объект между множеством пользователей и потоков.

  • Многопоточные разделяемые указатели с синхронизацией на базе мьютекса (shared_ptr_mt_mutex.iu).

  • Строки (string.u, string_base.iu) и вспомогательные утилиты. Строки подобны векторам, но поддерживают только``char`` типы в качестве элементов и позволяют конкатенацию через перегруженные операторы +.

  • Контейнер variant, который может хранить в себе значение одного из указанных типов (variant.iu).

  • Vector - последовательный контейнер с возможностью добавления элементов в конец (vector.iu).

Встроенный в компилятор функционал

Некоторые функции ustlib реализованы непосредственно в компиляторе Ü. Эти функции реализованы в ll файлах в поддиректории src. Эти ll файлы компилируются при сборке компилятора Ü и встраиваются в него. По этой причине настоятельно рекомендуется использовать ustlib, поставляемую с компилятором, чтобы избежать возможного несоответствия объявления этих функций реализации.

Выделение памяти

Некоторый функционал ustlib не использует функций выделения памяти и может быть использован в средах без кучи.

Другой же функционал использует кучу. К нему относятся контейнеры box, box_nullable string, vector, hash_map и все shared_ptr контейнеры. Так что эти контейнеры стоит избегать в средах без кучи.