Что Fiddle.dlwrap и Fiddle.dlunwrap делают в Ruby?
Я пытаюсь понять, как работает библиотека Руби Fiddle. Я в основном понимаю, как он взаимодействует с libffi, но есть одна вещь, которая до сих пор сбивает меня с толку: что на самом деле делают Fiddle.dlwrap и Fiddle.dlunwrap?
В документации просто сказано
dlunwrap(addr)
Возвращает шестнадцатеричное представление адреса указателя памяти
addr
dlwrap(val)
Возвращает указатель в памяти на шестнадцатеричный адрес функции
val
(с ruby-doc.org)
Я попытался поэкспериментировать с их передачей различных типов объектов и строк. Методы всегда возвращают значения независимо от того, что вы передаете (не только шестнадцатеричные строки указателей на функции C). Кажется, что dlwrap просто возвращает адрес памяти переданного объекта, но в этом случае две вещи не имеют особого смысла:
- Если я передаю короткую строку и создаю указатель, используя результат в качестве адреса, память, на которую он указывает, не является строкой.
- Если я передаю число, оно просто возвращает идентификатор объекта числа.
Если у кого-то есть секретные знания о внутренней работе над Fiddle, и он готов поделиться, пожалуйста, помогите:)