Статус dlib2
В последнее время редко пишу о dlib, но хочу заверить: разработка библиотеки на месте не стоит, в данный момент я разрабатываю dlib2, а точнее — ее низкоуровневый компонент dcore. dcore — это процедурный API, совместимый с betterC и минимально заменяющий стандартную библиотеку. Он полностью автономный, не зависит от Phobos, поддерживает компиляцию в машинный код под bare metal (то есть, без операционной системы) и в WebAssembly. Он предназначен для создания компактных приложений в стиле C, а также для написания высокоуровневых частей библиотеки на его основе.
Может возникнуть вопрос — для чего это нужно, если есть libc? dcore, конечно, использует стандартные функции C при компиляции в таргеты, которые поддерживают libc. Но все упирается в WebAssembly: своего Emscripten на D не существует. Поэтому, для упрощения написания WASM-модулей, я решил сделать минимальный набор абстракций, которые скрывают платформозависимые реализации самых важных компонентов приложения под универсальным низкоуровневым API. dcore элементарно позволяет использовать printf
, malloc
и т.д., не задумываясь, доступны ли они на целевой платформе.
Еще один важный момент — математика. Я уже публиковал пост о бенчмарках различных реализаций синуса и косинуса — dcore поддерживает все стандартные математические функции (sin
, cos
, tan
, asin
, acos
, sqrt
, cbrt
и др.), предоставляя на каждой платформе оптимальные реализации: LLVM-интринсики, функции C, функции Phobos и кастомные, без зависимостей, предназначенные для нестандартных таргетов.
Из нового:
- dcore.time — удобный враппер над C-шными
localtime
иgmtime
. Позволяет получать текущую системную время-дату, в текущем часовом поясе или по Гринвичу; - dcore.sys — информация о системе: архитектура CPU, количество ядер, объем памяти, название и версия ОС. Модуль поддерживает x86/x64, ARM, ARM64, IA64, MIPS, SPARC, PPC. Информация об ОС поддерживается для всех версий Windows и двух больших семейств Unix — Linux/Solaris/AIX (через sysconf) и BSD/OSX (через sysctl);
- dcore.process — позволяет кроссплатформенно получить PID.