@hirthwork

Тег posix в блоге hirthwork

hirthwork

tfw flock(1) не reentrant

hirthwork

У POSIX и Linux в частности есть проблема. Когда ты вызываешь dlsym(), то ты
можешь задать только имя функции, которую надо загрузить, ничего больше.
Затем уже элементарно можно ошибиться с параметрами и получить увлекательный
дебаг. Ошибиться с параметрами можно не только из-за криворукости, а ещё и
из-за того, что при увеличении мажорной версии автор либы чуть изменил API

Казалось бы, C++ и манглинг спасают ситуацию. Можно сразу в dlsym() передать
трудночитаемую строку, которая говорит, что загружаемая функция принимает в
себя struct stat по значению. И опять получить увлекательный дебаг, потому что
с годами размер struct stat тоже растёт. Можно передавать все аргументы по
указателю/ссылке, но это не cache friendly.

Получается, что система загрузки символов должна включать указание abi, которое
будет описывать layout аргументов и возвращаемого значения, например,
указывать, что функция возвращает восьмибайтный дабл и принимает структуру,
состоящую из поля вмещающего в себя size_t и указателя, а вторым параметром
идёт массив из десяти восьмибитных элементов.
При этом набор типов такого метаязыка описания abi можно свести к intN_t,
floatN_t, size_t и void*, всё остальное можно описать комбинируя эти типы в
структуры и массивы.
Вот только вряд ли общественность примет динамическую загрузку символов со
стогой типизацией

hirthwork

сабж. каким, блядь, надо быть идиотом, чтобы продолжать всюду пихать null-terminated string, после того как Никлаус Вирт в Паскале придумал хранить длину строки отдельно? Ведь strcat в этом случае выполняется куда проще. А также многие другие вещи

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.