На работе пришел к немного странному, на первый взгляд, решению: из окемловского приложения вызываю питовский код, который, в свою очередь, вызывает плюсовый. Казалось бы - что за изврат? Ан нет.
Логика игры, которую мы сейчас делаем (равно как и предыдущей игры) пишется на ocaml. Низкоуровневая работа с OSG, OpenGL, OpenAL и пр., ведется на С++. Окемловских байндиногв для OSG нет, есть питоновские. А писать окемловкие байндинги для С++ гимор тот еще.
В итоге, все плюсовые дела через boost::python (очень удобная библиотека, кстати) выводятся в питон. В питоне пишется тонкий слой, переводящий работу с объектами в примитивные функции. А в кемле написан небольшой код на полстранички, который позволяет легко и type-safe-но вытаскивать функцию из питона. Например:
let fun1 = f "module" "fun1"
(type1 **-> type2 **-> ret_type)
благодаря написанному ручками оператору
(**->)
определяет функцию
(f : type1 -> type2 -> ret_type)
Ну где вы еще такое напишите, кроме окемла или хаскела :)
За счет этого, я с минимальными усилиями получаю из ocaml доступ к плюсовому коду.
Так что не бойтесь применения разных языков программирования в одном проекте. Это не так уж сложно и впридачу вы имеете возможность писать то, что надо, на том, на чем надо.