Существует пересечение C и C ++, которое является подмножеством обоих языков. Объявления функций, написанные в этом подмножестве, могут вызываться с любого языка.
C является де-факто языком взаимодействия, и в дополнение к C ++ большинство других языков высокого уровня, которые поддерживают совместимость языков вообще, поддерживают C, в частности. И взаимодействие языков, отличных от C, с языками, отличными от C, часто проходит через этот интерфейс C обоих языков.
Из-за высокой степени поддержки интерфейсов C в C ++ эту совместимость обычно можно принятьПреимущество в C ++, но интерфейс ограничен функциями в общем подмножестве.
Вы упомянули Java специально. Это пример языка, который имеет уровень взаимодействия с C.
Все языки, которые поддерживают общее межпроцессное взаимодействие (например, сокеты), как правило, взаимодействуют через это взаимодействие с другими процессами, написанными налюбой язык.
Могу ли я использовать библиотеку C ++ из Java ...
Если у библиотеки есть интерфейс, написанный в совместимом подмножестве C, то да,Интерфейс-обертка может быть написан, если он еще не существует.
... и ожидать, что будет иметь ту же производительность, что и в C / C ++?
Интерфейс иностранного языка может иметь некоторые накладные расходы, а сама сторона Java может включать накладные расходы, которых нет при естественном использовании библиотеки. Являются ли эти издержки значительными, вы можете узнать, измерив. Я ожидаю, что он будет меньше, чем издержки на сокетную связь, например.
Кроме того, межпроцедурная оптимизация, вероятно, будет невозможна. В этом отношении это похоже на использование разделяемой библиотеки на родном C или C ++.