Я видел несколько потоков, которые касаются программирования графического интерфейса пользователя в OCaml, но я не чувствую, что они явно приводят к четкому решению, когда требуется интерфейс графического интерфейса.
Мой вопрос, если быть более конкретным, заключается в следующем: какой подход является наиболее эффективным (и его легко понять) при программировании графического интерфейса для программного обеспечения OCaml? Кто-нибудь сталкивался с простыми и эффективными модулями графического интерфейса в самом OCaml или нашел эффективный язык или бесплатный программный пакет, в котором это можно сделать и который хорошо взаимодействует / работает с OCaml?
Я написал интерпретатор на OCaml, поэтому мой лексер, синтаксический анализатор, основные функции интерпретатора и т. Д. Являются модулями OCaml. В настоящее время у меня есть решение для командной строки («main.ml»), которое позволяет пользователю взаимодействовать с интерпретатором, вводя выражения в командную строку и получая распечатанный вывод терминала, который показывает проанализированное и сокращенное выражение и т. Д. Однако решение для командной строки предназначено только для тестирования. Я хочу, чтобы пользователи взаимодействовали через графический интерфейс, это может быть просто (фреймы Java приходят в голову много веков назад), но необходимо каким-то образом взаимодействовать с модулями OCaml, которые я закодировал. В OCaml я нашел одну библиотеку: http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual042.html. Кто-нибудь знает, эффективно ли это и полезно? (Думаю, я поймал негативные отзывы об этой библиотеке)
Если бы я решил запрограммировать графический интерфейс на более оптимальном языке, взаимодействие с программным обеспечением было бы следующим: напишите графический интерфейс на подходящем языке (возможно, C ++, Python и т. Д.), Затем скомпилируйте письменный интерпретатор OCaml в исполняемый файл, а затем каким-то образом подключите графический интерфейс к исполняемый файл? Меня не интересуют какие-то слабо связанные или странные решения через каналы (я все время думаю о межпроцессном взаимодействии для них, например, о том, что связано с дизайном операционной системы) или сокетах (я склонен думать об этом для сетевого программирования), я представьте, что должен быть какой-то способ "разместить" мой интерпретатор, кодируемый OCaml, в коде графического интерфейса другого языка, если не в самом OCaml. Есть мысли, рекомендации или предложения?
РЕДАКТИРОВАТЬ: Я был бы счастлив, если бы смог получить графический интерфейс для Linux-подобной операционной системы (например, Linux RedHat). Если бы я мог заставить графический интерфейс работать в Windows, это было бы здорово, но как минимум я стремлюсь к Linux.
РЕДАКТИРОВАТЬ 2: Только что нашел, есть ли у кого-нибудь мысли по поводу «OCaml-Java»? http://ocamljava.x9c.fr/ Звучит довольно интересно, так как "... возможность запускать Objective Caml исходники, которые были скомпилированы с использованием ocamlc; во-вторых, возможность компилировать исходные коды Objective Caml в исполняемые файлы jar ". Меня беспокоит то, что мне никогда не приходило в голову, что Java - лучший способ получить быстрый, но полезный графический интерфейс ...
ТЕКУЩЕЕ РЕШЕНИЕ: изучив различные варианты в сообщении о решении, которое @Jeffrey Scofield изложил ниже, я решил в настоящее время глубже изучить LablGtk (что позволило бы мне оставаться в рамках OCaml). Следующим многообещающим вариантом для тех, кто просматривает этот пост, будет изучение взаимодействия на иностранном языке с C, поскольку C и OCaml уже имеют отношения для начала. Похоже, существуют способы вызова кода C в OCaml и OCaml внутри C (хотя это может быть действительно сложно, поскольку вы, по сути, завершаете вызовы функций OCaml несколько сложными функциями-оболочками, которые будут более специфичными для типа функций, которые вы вызываете из внутри OCaml -> т.е. вам придется иметь дело с «отображением» каждой функции OCaml и ее аргументов в пределах C). Взгляните на: http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html для получения дополнительной информации. Первоначально OCaml-Java казалась отличной идеей, учитывая, что мне было комфортно программировать GUI на Java, но взаимодействие между двумя языками было не таким прямым, как с C и OCaml, к тому же документация для этого оказалась тонкой (и с использованием OCaml -Java - это не то, что вы просто берете и получаете доступ к материалам графического интерфейса Java ...). OCaml-JavaScript выглядел интересно, но имейте в виду, что вам, скорее всего, придется потратить время на хорошую настройку кодирования HTML 5 в дополнение к некоторому JavaScript, если вы выберете этот путь. В качестве альтернативы, здесь, в SO, есть несколько сообщений, в которых говорится о каналах и сокетах, которые являются допустимыми методами создания серверной системы с графическим интерфейсом пользователя. Однако это хорошая идея, если вы не возражаете против того, чтобы ваша программная система / продукт была «слабо связанной». Я обновлю это решение, как только разберусь с LablGtk и гарантирую, что оно дает приемлемый интерфейс GUI для моего внутреннего кода OCaml.