Прекрасное (о взаимодействии языков)

в 12:43, , рубрики: java, jni, tcl, Я негодую, метки: , ,

Наш проект мы пишем с индусами.

Общую архитектуру я задал как архитектор проекта — Java, Spring и т.д.
Но в тех областях, в которых им надо было писать они сами решали что и как будет.
А привыкли они всё делать на C/C++.

В итоге родился такой монстр:

У нашей программы есть command line клиент.
Он работает с командами и скриптами на Tcl (потому что так привыкли клиенты).
Используется native Tcl Interpreter (а не JTcl) (потому что так решили наши индусы).
Команды реализованы на Java, но часть команд обращается к коду на C++ (legacy code)
Однако же система сообщений об ошибках и предупреждениях реализована на Java.
Индусы писали используя JNI, а я связь Java с С делал на JNA

Как выглядит работа команды набранной в коммандной строке?

Java command line (jline) читает строку,
вызывает C (чтобы вызвать TCL Interpreter) через JNI
TCL обрабатывает строку, исполняет если это его команда или
Вызывает C (если команда реализована нами), чтобы вызвать Java
C вызывает Java через JNI
Исполняется команда на Java, если надо она
Вызывает C через JNI, если есть предупреждение о неверных данных, он
Вызывает Java через JNA

Теперь код от индусов передали нам и в следующей версии заменим Tcl на JTcl (который в системе и так есть и работает)

Автор: javax

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js