С какими высокоуровневыми языками легко соединяют интерфейсом с C / C++?

Groovy имеет перегрузку оператора и работает в JVM. Если Вы не возражаете против хита производительности (который становится меньшим повседневный). Это автоматически на основе имен методов. например, '+' звонит 'плюс (аргумент)' метод.

11
задан Łukasz Lew 15 August 2009 в 13:58
поделиться

16 ответов

Почти все языки сценариев (Perl, Python, Lua, PHP, Ruby, Tcl) предназначены для встраивания в C и C ++.

Хороший обзор относительных достоинств API:

H. Muhammad and R. Ierusalimschy. C APIs in extension
and extensible languages. Journal of Universal Computer
Science, 13(6):839–853, 2007.

См. также этот очень похожий вопрос мой ответ, в частности ;)).

7
ответ дан 3 December 2019 в 00:58
поделиться

Реализации Common Lisp часто имеют FFI, который действительно хорошо работает с C. дело в том, что вам не нужно писать код C, чтобы использовать библиотеки C; все, что вам нужно сделать, это написать объявление функции C - Lisp.

Factor скопировал эту систему FFI из Lisp.

0
ответ дан 3 December 2019 в 00:58
поделиться

Tcl может вызывать код C / C ++

0
ответ дан 3 December 2019 в 00:58
поделиться

Возможности интеграции Lua с C (и расширением C ++) абсолютно первоклассные. Это тоже прекрасный маленький язык. Не думаю, что он получает почти ту любовь, которой заслуживает.

ссылка: http://www.lua.org/

0
ответ дан 3 December 2019 в 00:58
поделиться

Я скомпоновал библиотеки FORTRAN один раз. Я бы сказал вам больше, но пора вздремнуть.

0
ответ дан 3 December 2019 в 00:58
поделиться

Взаимодействие с объектами C ++ всегда будет неприятно, поскольку стандартного ABI (двоичного интерфейса) не существует.

0
ответ дан 3 December 2019 в 00:58
поделиться

R расширяется через C, C ++ и Fortran, это описано в R Extensions Manual , а дополнительный пакет Rcpp делает это проще вызывать функции C ++.

1
ответ дан 3 December 2019 в 00:58
поделиться

У Java хороший собственный интерфейс с JNI, в C # есть нечто очень похожее.

2
ответ дан 3 December 2019 в 00:58
поделиться

D разработан для легкого взаимодействия с C.

D 2.0 действительно имеет ограниченный интерфейс для кода C ++.

1
ответ дан 3 December 2019 в 00:58
поделиться

Python имеет отличный интерфейс C, использующий встроенный модуль ctypes. Для взаимодействия с модулями C ++ можно использовать SWIG.

3
ответ дан 3 December 2019 в 00:58
поделиться

Вам может понравиться эта недавняя ветка comp.compilers о различных интерфейсах сторонних функций. Было высказано предположение, что Haskell - один из самых красивых.

3
ответ дан 3 December 2019 в 00:58
поделиться

Python - мощный и простой в изучении язык высокого уровня, имеющий хорошую документацию по расширению его с помощью C и C ++:

http://docs.python.org/exnding/exnding. html

Использовать этот подход просто, но вы должны писать свои расширения явно для Python. Используя SWIG (см. Расширение Python с помощью C ++ для получения небольшого хорошего учебника), вы создаете код C / C ++, как если бы он запускался сам по себе, плюс файл интерфейса, который SWIG использует для создания некоторого кода оболочки для вы можете использовать в Python (или других языках, если на то пошло).

3
ответ дан 3 December 2019 в 00:58
поделиться

Эта проблема стоит более 20 лет. Самым современным в решении этой проблемы является определение языка определения интерфейса или IDL. Затем у вас есть инструмент, который автоматически генерирует те функции, которые вы использовали для написания вручную. Другой широко используемый термин - это интерфейс внешней функции или FFI.

К сожалению, большинство из них не очень хороши. Из личного опыта:

  • tolua и SWIG не стоит использовать для Lua и C; Связывающие функции проще написать вручную. В частности, IDL для tolua - это почти, но не совсем заголовочный файл C, так что вам придется поддерживать две версии каждого объявления.

  • tolua ++ может быть полезным для связывания Lua и C ++ - неприятное значение моделирования объектов C ++ вручную

  • SWIG охватывает множество языков, но мне всегда было трудно его использовать.

Из чтения об опыте других людей:

  • Glasgow Haskell Compiler , кажется, имеет самый приятный интерфейс внешней функции, и, если я правильно помню, IDL отрадно прост: вы просто указываете тип Haskell для функции C.

  • Стандартный ML в Нью-Джерси , похоже, также имеет довольно приятный интерфейс внешней функции; об этом была статья в BABEL-01.

Для любого заданного языка, который вы хотите взаимодействовать с C, вы должны спросить об интерфейсе внешней функции и спросить, существует ли IDL и соответствующие инструменты.

5
ответ дан 3 December 2019 в 00:58
поделиться

Существуют разные степени удовольствия от основных языков и их интерфейсов C. К счастью, вы можете использовать SWIG для большинства из них.

8
ответ дан 3 December 2019 в 00:58
поделиться

Python имеет очень хороший C API. Его также можно очень легко и удобно интегрировать в C ++ с помощью привязки boost :: python C ++ для API Python C.

15
ответ дан 3 December 2019 в 00:58
поделиться

I wouldn't use Python in this case, even if there is Boost.Python to help embedd it. Even Python people say it makes more sense to embedd C in Python than the other way around, simply because Python is not designed to be embedded.

I like to use languages that are specifically made to be embedded in C++ or C, like Lua, Falcon or ChaiScript. However I also like to have a full language available. If I want to write an application under heavy constraints (like games on consoles) I prefer to use Lua that is designed for this. Otherwise, I prefer to use Falcon or ChaiScript.

Falcon is a good alternative to Python in this case (embedding a high level language in C++) : http://falconpl.org
It's designed to work with C++ and even the standard libraries are implemented in C++.

I also like to use ChaiScript when I want to just include the headers and go with a scripring language : http://chaiscript.org Он предназначен только для заголовка и легко интегрируется в код C ++. Фактически, он предназначен для работы только с C ++.

Оба являются языком высокого уровня. Falcon больше похож на Python и Ruby, но имеет то преимущество, что предлагает гораздо больше парадигм программирования, чем эти два. Chaiscript выглядит как упрощенный C ++, поэтому он может быть не лучшим выбором для людей, не привыкших к такому синтаксису, но в остальном он легко привязан к вашему реальному коду C ++. Falcon тоже, но не таким, и его синтаксис проще для непрограммистов.

3
ответ дан 3 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: