RTLD
RTLD расшифровывается как Real-Time Library for D. Это рантайм-библиотека для D, которая позволяет не использовать стандартные druntime и Phobos. Она основана на модулях, которые я изначально писал для dlib2/dcore, а также на прямых портах из dlib 1.x. RTLD предоставляет самую базовую функциональность, работая поверх libc, WinAPI, POSIX, системных вызовов Linux, а также динамически загружаемых функций — X11 и OpenGL ES. По сути, это библиотека для тех, кто хочет писать на D как на C, не используя ничего лишнего.
Репозиторий проекта: https://github.com/gecko0307/rtld
Как гласит название, библиотека пригодна для разработки приложений реального времени — в том смысле, что все функции работают за предсказуемое время и не создают утечек памяти (стандартная библиотека D опирается на сборку мусора, поэтому в общем случае нельзя полагаться, что вызов ее функций не приведет к глобальной блокировке). Если вы пишете обычные приложения для x86, не ограниченные по таймингам и памяти, то вы можете использовать RTLD ситуативно, для каких-то отдельных задач, не отказываясь в целом от Phobos — обе библиотеки могут благополучно сосуществовать в одной программе. Полный переход на RTLD целесообразен в особых случаях, из которых я выделяю два главных сценария:
- Системное программирование: если вы пишете низкоуровневую библиотеку с интерфейсом C, которая будет использоваться другими программами — драйвер, сетевой протокол, графический или звуковой API и т.д.;
- Программирование встраиваемых систем и маломощных компьютеров. Сюда относятся одноплатные ARM-компьютеры вроде Raspberry Pi или Khadas. RTLD имеет минимальный отпечаток памяти, что позволяет использовать ее на самых слабых машинах, имеющих операционную систему.
На данный момент RTLD поддерживает Windows и Linux, компилируется под x86_64 и AArch64. Некоторые ее модули платформонезависимы, и их можно использовать в системной разработке, под bare metal.
Текущий список фич:
rtld.core— ключевые функции: форматированный вывод, работа с динамической памятью, файлами, загрузчик библиотек, потоки, мьютексы, создание окнаrtld.container— контейнерыrtld.gl— биндинг к OpenGL ES 2/3 и создание контекста (поддерживаются Windows и Linux/X11)rtld.hash— хэш-функцииrtld.libc— функции библиотеки Crtld.math— элементарные математические функцииrtld.random— генератор псевдослучайных чиселrtld.sys.windows— функции WinAPIrtld.sys.posix— функции POSIXrtld.sys.linux— функции Linuxrtld.text— текстовые кодировки (UTF-8, UTF-16)rtld.time— функции даты-времени, наносекундный таймер.