Зачем Ruby FFI нужны вызовы attach_function при наличии заголовочных файлов? - PullRequest
1 голос
/ 21 ноября 2010

Есть ли способ указать Ruby FFI на файл заголовка вместо записи вызовов attach_function?Файл заголовка в основном содержит ту же точную информацию.

temp_convert.rb:

attach_function :temp_convert, [:float], :float

temp_convert.h:

float temp_convert(float temp);

Ответы [ 2 ]

4 голосов
/ 21 ноября 2010

Поскольку заголовочные файлы C написаны на C, а интерпретаторы Ruby интерпретируют только Ruby. Кроме того, файлы заголовков могут быть недоступны даже во время выполнения.

Там уже говорили об автоматической генерации attach_function вызовов из заголовков. Однако, как я уже говорил выше, это в основном означает, что вы должны реализовать полноценный компилятор C (ну, точнее, полную переднюю половину единицы). В настоящее время разработчики Ruby более сосредоточены на том, чтобы заставить Ruby работать так же быстро, как и на C, чтобы облегчить необходимость использовать FFI в первую очередь, чем написание собственного компилятора C (что является нетривиальным мероприятием, даже если вам нужно только части лексизма, синтаксического анализа, семантического анализа и набора текста, а не фактическая генерация или оптимизация кода).

2 голосов
/ 22 ноября 2010

Как говорит Йорг, реализация сканера заголовков означает реализацию довольно большого количества компилятора C, чтобы все было правильно.

Одна вещь, которую вы могли бы попытаться облегчить боль, - это FFI SwigГенератор .Он использует Swig для создания интерфейса FFI.Это по-прежнему означает, что вам нужно проделать небольшую работу, которая может сводиться к работе по вырезанию и вставке для создания входного файла swig для простых интерфейсов.

...