Имеет ли схема MIT/GNU C FFI?
Я проверил его руководства и не нашел много, чтобы сказать, что он делает, но я не нашел ничего иного.
1 ответ
Схема MIT/GNU - Интерфейс внешней функции
18.2 Интерфейс внешней функции
Интерфейс внешних функций Win32 (FFI) является примитивной и довольно простой системой для вызова процедур, написанных на C, в динамически связанной библиотеке (DLL). Процедуры пользователя из пользовательской библиотеки DLL и системные процедуры (например, MessageBox) вызываются с использованием одного и того же механизма.
Предупреждение: FFI в его нынешнем виде имеет несколько недостатков, которые затрудняют надежное использование. Ожидается, что как интерфейс, так и механизмы, используемые FFI, будут изменены в будущем. Мы предоставляем его и эту документацию только для того, чтобы дать людям ранний доступ к некоторым функциям Win32 из Scheme. Если вы используете его в эксперименте, мы приветствуем любые отзывы.
FFI предназначен для вызова процедур C, которые используют типы данных C, а не объекты данных Scheme. Таким образом, невозможно написать и вызвать процедуру C, которая возвращает, например, список Scheme. Возвращаемый объект всегда будет целым числом (которое может представлять адрес структуры данных Си).
Предупреждение: крайне опасно пытаться передать процедуры обратного вызова Scheme процедурам C. Это возможно только путем передачи целочисленных "дескрипторов", а не фактических процедур, и даже в этом случае, если сборка мусора происходит во время выполнения процедур обратного вызова, объекты в куче Схемы будут перемещены. Таким образом, в чужой процедуре, которая имеет обратный вызов и строку, после вызова обратного вызова строковое значение может быть недействительным. Игра в эту игру требует глубоких знаний о реализации.
Интерфейс для FFI состоит из двух основных компонентов: язык для объявления типов значений, передаваемых и возвращаемых из иностранных процедур, и форма для объявления внешних процедур.
Ссылка на Win32 в этой документации, я полагаю, относится к вызову функций Windows NT/3.1 из GNU/Linux. По крайней мере, раздел 18.2 Интерфейс внешних функций является подразделом раздела 18 "Справочник по пакетам Win32 ".