Имеет ли схема 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 ".

Другие вопросы по тегам