Любой язык для взаимодействия с C ++? - PullRequest
2 голосов
/ 07 ноября 2019

Существуют ли современные языки, которые могут напрямую взаимодействовать с C / C ++? Я имею в виду прямо как Java делает с Kotlin. Язык, который может использовать преимущества экосистемы C / C ++ без существенных компромиссов в производительности.

Мне нравятся сферы интересов C / C ++, но не язык.

1 Ответ

1 голос
/ 07 ноября 2019

Существует пересечение C и C ++, которое является подмножеством обоих языков. Объявления функций, написанные в этом подмножестве, могут вызываться с любого языка.

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

Из-за высокой степени поддержки интерфейсов C в C ++ эту совместимость обычно можно принятьПреимущество в C ++, но интерфейс ограничен функциями в общем подмножестве.

Вы упомянули Java специально. Это пример языка, который имеет уровень взаимодействия с C.


Все языки, которые поддерживают общее межпроцессное взаимодействие (например, сокеты), как правило, взаимодействуют через это взаимодействие с другими процессами, написанными налюбой язык.


Могу ли я использовать библиотеку C ++ из Java ...

Если у библиотеки есть интерфейс, написанный в совместимом подмножестве C, то да,Интерфейс-обертка может быть написан, если он еще не существует.

... и ожидать, что будет иметь ту же производительность, что и в C / C ++?

Интерфейс иностранного языка может иметь некоторые накладные расходы, а сама сторона Java может включать накладные расходы, которых нет при естественном использовании библиотеки. Являются ли эти издержки значительными, вы можете узнать, измерив. Я ожидаю, что он будет меньше, чем издержки на сокетную связь, например.

Кроме того, межпроцедурная оптимизация, вероятно, будет невозможна. В этом отношении это похоже на использование разделяемой библиотеки на родном C или C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...