Смешивание разных языков программирования уже давно я не совсем понимаю. Согласно этой статье в Википедии, интерфейс внешней функции (или FFI) можно выполнить несколькими способами:
- Требование, чтобы функции гостевого языка, которые должны быть вызываемыми на языке хоста, должны быть указаны или реализованы определенным образом; часто используя библиотеку совместимости.
- Использование инструмента для автоматического "переноса" функций гостевого языка с соответствующим кодом клея, который выполняет любой необходимый перевод.
- Использование библиотек-оболочек
- Ограничение набора возможностей языка хоста, которые могут использоваться для перекрестного языка. Например, функции С++, вызываемые из C, не могут (в общем) включать ссылочные параметры или исключать броски.
Мои вопросы:
- Каковы различия между 1, 2 и 3 пути? Кажется мне все они должны составить код названный язык в некоторые библиотека с объектными файлами и заголовком файлы, которые затем вызываются вызывающий язык.
-
Один источник, который он связывает, говорит: реализация FFI может быть выполнена в несколько способов:
- Требование, чтобы вызываемые функции на целевом языке конкретный протокол.
- Реализация библиотеки-обертки, которая берет данный низкоуровневый язык функции и "обертывает" его кодом для преобразования данных в/из высокоуровневые языковые соглашения.
- Требование функций, объявленных native, использовать подмножество высокоуровневой функциональности (совместимой с языком низкого уровня).
Мне было интересно, если первый способ связанный источник тот же, что и первый путь в Википедии?
Что делает третий способ в этом источник означает? Соответствует ли это 4-му пути в Википедии?
- В тот же источник, при сравнении трех способов, которые он перечисляет, кажется, говорит задача заполнения разрыва между два языка постепенно смещено от названного языка на язык вызова. я был интересно, как это понимать? Это смещение также верно для четырех способов в Википедии?
-
Являются привязка к языку и FFI эквивалентные понятия? Как они связанные и отличаются?
привязка с языка программирования к библиотеке или службе ОС - это API предоставляя эту услугу в язык.
-
Мне было интересно, какой путь в цитате из Википедии или из источника принадлежит каждому из следующих примеров?
- Архитектура брокер Common Object Request (CORBA)
- Вызов C на С++, с помощью выражения extern "C" в С++ до отключить управление именами.
- Вызов C в Matlab, Интерфейс MATLAB для общих библиотек, то есть сначала компиляция кода C в общую библиотеку через общий C компилятор, такой как gcc, а затем загрузка, вызов функции из и выгрузка общей библиотеки через функции Matlab loadlibrary(), calllib() и unloadlibrary().
- Вызов C в Matlab, Создание MEX файлов языка C/С++
- Вызов Matlab в C, mcc-компилятор
- Вызов С++ в Java, JNI и вызов Java в С++, а также JNI
- Вызов C/С++ на других языках, используя SWIG
- Вызов C в Python, Модуль Ctypes.
- Cython
- Вызов R в Python, RPy
- Язык программирования привязок к OpenGL с разных языков, таких как Python, Fortran и Java
- Привязки для библиотеки C, такие как Cairo, с разных языков, таких как С++, Python, Java, Common Lisp
Спасибо за ваше просвещение! С наилучшими пожеланиями!