Хороший межплатформенный функциональный язык для использования библиотеки в приложении С++?

Каковы мои возможности с точки зрения быстрого функционального языка для использования библиотеки в кросс-платформенном приложении Qt С++?

Кажется, что почти все языки (функциональные или нет) имеют способ вызова кода C/С++ простым способом. Я хотел бы пойти наоборот: напишите приложение в Qt, используя С++ для логики бизнес-логики, GUI и т.д., Но выпадайте и используйте функциональный язык для основной библиотеки вычислений.

Какие из них просты в использовании? Может ли, например, OCaml-код быть скомпилирован в статическую библиотеку, а затем использован приложением С++?

Спасибо, Рикард

Ответ 1

У Haskell есть эта возможность, хотя взаимодействие с Qt/qmake и процессом сборки с помощью ghc может занять немного обмана:

http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

Существует также проект под названием HaskellDirect, который похож на вашу цель:

http://www.haskell.org/hdirect/

Ответ 2

AutoCAD использует AutoLisp поэтому мое предложение будет Lisp.

Ответ 3

У меня возникнет соблазн проверить qtHaskell и сделать все это в Haskell. Мое мнение основано на замечательном успехе Дона Стюарта, делающего xmonad в Haskell.

Ответ 4

Lisp и Haskell - отличные функциональные языки, но если мы рассмотрим легкость связывания кода C/С++ вместе с языком, я бы порекомендовал lua.

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

С чисто языковой точки зрения, мета-функция/метапрограммирующий аспект lua (сравнимый с lisp) очень упрощает поддержку всех видов парадигм программирования, хотя я лично считаю, что он лучше всего подходит для функционального программирования. Он чрезвычайно настраиваемый и хорошо подходит для встроенного использования.

Однако, поскольку вы уже используете qt, qtHaskell может быть хорошим выбором для рассмотрения.