Простой, высокопроизводительный, простой в обслуживании способ взаимодействия между Java и современным C++

Я ищу лучший подход для вызова современного кода C++ 11/14 из java (с обратными вызовами из C++ обратно в java). Каков наилучший/самый простой/быстрый способ обеспечения взаимодействия между java и С++ 11/14? Я некоторое время программировал на Python и C++ и стал зависеть от pybind11. Я ищу что-то похожее (или лучше) pybind11 для java.

Я осознаю джни и джна. Но jni слишком низкоуровневый, утомительный и подверженный ошибкам. Согласно этой записи в блоге «JNA значительно медленнее, чем JNI». В этом сообщении в блоге используется bridj, но за три года, прошедшие с момента написания этой статьи, bridj, похоже, превратился из «относительно молодого проекта» в проект, в котором есть только два коммита с тех пор.

Я также знаю о swig, но, по крайней мере, для python я предпочитаю прямую обертку, которую предлагает pybind11, а не подход генератора обертки swig. Я наткнулся на jni.hpp и javacpp. jni.hpp, кажется, больше всего похож на pybind11, но он выглядит незрелым и не широко используется в сообществе Java. Является ли javacpp ближайшим java/С++ эквивалентом pybind11 для python/С++?

Я ценю любое руководство.

(Для тех, кто закрыл этот вопрос как дубликат вопроса более чем 7-летней давности Как позвонить C++ из Java?, мой вопрос касается лучшей на данный момент библиотеки, которая поддерживает совместимость java/c++ с использованием новейших улучшений языка C++, которые произошли с 2011 года. Пожалуйста, откройте заново.)


person Phil    schedule 20.03.2019    source источник
comment
Мне кажется, что запрос ресурсов не по теме. Кроме того, мне нравятся zeromq и буферы протокола.   -  person Elliott Frisch    schedule 20.03.2019
comment
@ElliottFrisch: OP спрашивал не о конкретном программном обеспечении, а о том, как достичь X.   -  person einpoklum    schedule 20.03.2019
comment
Нет, я не ищу сообщения. Мне нужно сделать прямые вызовы функций из java в С++. У меня есть высокопроизводительные функции обработки изображений, реализованные на C++, и я буду писать пользовательский интерфейс на java. Изображения будут принадлежать jvm, а указатели на блоки памяти будут переданы C++. Мне нужно, чтобы все это было в процессе, вызовы функций. Я не собираюсь обмениваться сериализованными сообщениями. Если это не тот форум, где можно задать этот вопрос, то что?   -  person Phil    schedule 20.03.2019
comment
@einpoklum Я ищу что-то похожее (или лучше) pybind11 для Java.   -  person Elliott Frisch    schedule 20.03.2019
comment
SWIG позволит вам выполнять обратные вызовы с C++ на Java. Это может быть сложно настроить, но он будет делать то, что вы хотите. Между прочим, значительно медленнее не обязательно имеет значение, если вы не делаете много частых звонков. См. также stackoverflow.com/questions/7593334/ как вызвать-c-из-java   -  person Andy Thomas    schedule 21.03.2019
comment
Я использую github.com/jnr/jnr-ffi, который быстрее, чем JNA, и проще, чем SWIG. .   -  person Peter Lawrey    schedule 21.03.2019
comment
Спасибо. Есть ли какая-либо документация для jnr-ffi, кроме исходного кода? Вы пробовали javacpp? Если да, то как бы вы сравнили jnr-ffi с javacpp?   -  person Phil    schedule 21.03.2019
comment
У вас возникли проблемы с использованием JavaCPP? Если да, то задайте такой вопрос.   -  person Samuel Audet    schedule 31.03.2019
comment
Еще нет. Из того, что я видел, javacpp - это ответ на мой вопрос. Кажется, это java-эквивалент того, что pybind11 для java. Когда я начну его использовать, я опубликую конкретные вопросы. Спасибо.   -  person Phil    schedule 01.04.2019
comment
Это не похоже на pybind11 в том смысле, что он не заставляет пользователя делать все на C++, но это практически единственный инструмент, доступный для Java.   -  person Samuel Audet    schedule 03.04.2019
comment
Спасибо за ваш комментарий. Я буду использовать javacpp для обеспечения совместимости между java и c++.   -  person Phil    schedule 03.04.2019