Хороший межплатформенный функциональный язык для использования библиотеки в приложении С++?
Каковы мои возможности с точки зрения быстрого функционального языка для использования библиотеки в кросс-платформенном приложении 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 может быть хорошим выбором для рассмотрения.