plibsys -- кросс-платформенная системная библиотека на C
Недавно ко мне обратились с вопросом, не хочу ли я написать новость об одной из разрабатываемых библиотек (plibsys). В принципе, я не против, поэтому эксклюзивно для LOR.
Что такое plibsys?
plibsys — это кросс-платформенная системная библиотека, написанная на чистом C. Основной упор был изначально сделан на портируемость и поддержку широкого спектра компиляторов. Для достижения этих целей у библиотеки отсутствуют (небольшим исключением является SCO OpenServer 5 ввиду отсутствия на ней потоков) какие-либо зависимости — используются только те вызовы, которые доступны в целевой ОС. Также никакого ассемблера и использования прочих недокументированных возможностей. Для сборки нужен только рабочий компилятор и CMake.
Изначально библиотека писалась для запуска потоков и работы с сокетами, но постепенно функционал расширялся по мере необходимости. На данный момент есть следующий функционал:
Платформо-независимые типы данных
Потоки и средства синхронизации: мьютексы, условные переменные, блокировки чтения-записи, спинлоки, атомарные операции
Межпроцессное взаимодействие: семафоры, разделяемая память, кольцевой буфер
Сокеты (UDP, TCP) с поддержкой IPv4 и IPv6
Хэш-функции: MD5, SHA-1, SHA-2, SHA-3, GOST (R 34.11–94)
Бинарные деревья: несбалансированное, красно-черное, АВЛ
Загрузка разделяемых библиотек
Работа с памятью: mmap, установка собственного аллокатора
Замер времени исполнения (по возможности — в высоком разрешении)
Базовая работа с файлами и директориями
Парсер файлов INI
Макросы для определения архитектуры ЦПУ, ОС и компилятора
Различные вспомогательные структуры данных типа связанного списка, хэш-таблицы, обработка строк
На все есть документация.
Поддерживаемые платформы и компиляторы
Абсолютно все модули покрыты Unit-тестами. Есть интеграция с CI (Travis, AppVeyor), где прогоняется большое число разнообразных конфигураций. Также для улучшения качества кода и снижения числа ошибок используется сервис статического анализа кода Coverity. Для оценки покрытия тестами используется Codecov.
На данный момент поддерживаются следующие платформы:
GNU/Linux
macOS
Windows, Cygwin, MSYS
FreeBSD, NetBSD, OpenBSD, DragonFlyBSD
Solaris
AIX
HP-UX
Tru64
OpenVMS
OS/2
IRIX
QNX Neutrino, BlackBerry 10
UnixWare 7
SCO OpenServer 5
Haiku
Syllable
BeOS
Также работоспособность библиотеки проверена на следующих компиляторах и архитектурах:
MSVC (x86, x64) 2003 и выше
MinGW (x86, x64)
Open Watcom (x86)
Borland (x86)
GCC (x86, x64, PPC32be, PPC64be/le, IA-64/32, IA-64, Alpha, HPPA2.0–32, MIPS32, AArch32, SPARCv9)
Clang (x86, x64, PPC32be)
Intel (x86, x64)
QCC (x86, AArch32)
Oracle Solaris Studio (x86, x64, SPARCv9)
MIPSpro (MIPS32)
XL C (PPC64le)
DEC C (Alpha)
PGI (x86, x64)
Cray (x64)
Особенности работы библиотеки, сборки и тестирования на разных платформах с разными компиляторами подробно рассмотрены в Wiki.
Что дальше?
Библиотека по-тихоньку продолжает развиваться, хотя, к сожалению, свободного времени не так много. Например, недавно была добавлена поддержка для систем Cray.
Планирую сделать родной пакет для Debian. В общем-то, он готов, надо только протестировать. В связи с этим, если кто-то сможет выступить в качестве поручителя (он же sponsor в терминологии Debian) для проверки и заливки пакета — буду рад.
Если у кого-то есть доступ к каким-то машинам и компиляторам, которых нету в списке, и есть возможность организовать удаленный доступ для портирования — буду рад. В данный момент было бы интересно проверить под HP-UX с компилятором HP C/aC++. Или на машинах уровня BlueGene с компилятором IBM XL. Или на AmigaOS.
Пожелания, комментарии (конструктивные и не очень) и поток сознания (в меру) по библиотеке приветствуются :)
>>> Подробности
Что такое plibsys?
plibsys — это кросс-платформенная системная библиотека, написанная на чистом C. Основной упор был изначально сделан на портируемость и поддержку широкого спектра компиляторов. Для достижения этих целей у библиотеки отсутствуют (небольшим исключением является SCO OpenServer 5 ввиду отсутствия на ней потоков) какие-либо зависимости — используются только те вызовы, которые доступны в целевой ОС. Также никакого ассемблера и использования прочих недокументированных возможностей. Для сборки нужен только рабочий компилятор и CMake.
Изначально библиотека писалась для запуска потоков и работы с сокетами, но постепенно функционал расширялся по мере необходимости. На данный момент есть следующий функционал:
Платформо-независимые типы данных
Потоки и средства синхронизации: мьютексы, условные переменные, блокировки чтения-записи, спинлоки, атомарные операции
Межпроцессное взаимодействие: семафоры, разделяемая память, кольцевой буфер
Сокеты (UDP, TCP) с поддержкой IPv4 и IPv6
Хэш-функции: MD5, SHA-1, SHA-2, SHA-3, GOST (R 34.11–94)
Бинарные деревья: несбалансированное, красно-черное, АВЛ
Загрузка разделяемых библиотек
Работа с памятью: mmap, установка собственного аллокатора
Замер времени исполнения (по возможности — в высоком разрешении)
Базовая работа с файлами и директориями
Парсер файлов INI
Макросы для определения архитектуры ЦПУ, ОС и компилятора
Различные вспомогательные структуры данных типа связанного списка, хэш-таблицы, обработка строк
На все есть документация.
Поддерживаемые платформы и компиляторы
Абсолютно все модули покрыты Unit-тестами. Есть интеграция с CI (Travis, AppVeyor), где прогоняется большое число разнообразных конфигураций. Также для улучшения качества кода и снижения числа ошибок используется сервис статического анализа кода Coverity. Для оценки покрытия тестами используется Codecov.
На данный момент поддерживаются следующие платформы:
GNU/Linux
macOS
Windows, Cygwin, MSYS
FreeBSD, NetBSD, OpenBSD, DragonFlyBSD
Solaris
AIX
HP-UX
Tru64
OpenVMS
OS/2
IRIX
QNX Neutrino, BlackBerry 10
UnixWare 7
SCO OpenServer 5
Haiku
Syllable
BeOS
Также работоспособность библиотеки проверена на следующих компиляторах и архитектурах:
MSVC (x86, x64) 2003 и выше
MinGW (x86, x64)
Open Watcom (x86)
Borland (x86)
GCC (x86, x64, PPC32be, PPC64be/le, IA-64/32, IA-64, Alpha, HPPA2.0–32, MIPS32, AArch32, SPARCv9)
Clang (x86, x64, PPC32be)
Intel (x86, x64)
QCC (x86, AArch32)
Oracle Solaris Studio (x86, x64, SPARCv9)
MIPSpro (MIPS32)
XL C (PPC64le)
DEC C (Alpha)
PGI (x86, x64)
Cray (x64)
Особенности работы библиотеки, сборки и тестирования на разных платформах с разными компиляторами подробно рассмотрены в Wiki.
Что дальше?
Библиотека по-тихоньку продолжает развиваться, хотя, к сожалению, свободного времени не так много. Например, недавно была добавлена поддержка для систем Cray.
Планирую сделать родной пакет для Debian. В общем-то, он готов, надо только протестировать. В связи с этим, если кто-то сможет выступить в качестве поручителя (он же sponsor в терминологии Debian) для проверки и заливки пакета — буду рад.
Если у кого-то есть доступ к каким-то машинам и компиляторам, которых нету в списке, и есть возможность организовать удаленный доступ для портирования — буду рад. В данный момент было бы интересно проверить под HP-UX с компилятором HP C/aC++. Или на машинах уровня BlueGene с компилятором IBM XL. Или на AmigaOS.
Пожелания, комментарии (конструктивные и не очень) и поток сознания (в меру) по библиотеке приветствуются :)
>>> Подробности
Ещё новости по теме:
18:20