GUI в Java, бэкэнд в SML? - PullRequest
       27

GUI в Java, бэкэнд в SML?

6 голосов
/ 29 июля 2011

Я большой поклонник функциональных языков программирования (а именно, Standard ML и его диалектов), главным образом из-за их выразительности, которая допускает очень сжатый, чистый код.Я могу решить многие проблемы значительно быстрее с ML, чем, скажем, с Java.

Тем не менее, Java действительно хорош, когда дело доходит до программирования GUI (-> SWT).Я определенно не хочу делать это на функциональном языке.

Это подводит нас к моему актуальному вопросу: Есть ли хороший способ написать программу на ML, а затем обернуть ее графическим интерфейсом, написанным на Java??

До сих пор я придумал следующее:

  • Скомпилируйте программу ML (например, с MLton или Poly ML) и выполните двоичный файл как внешнийпрограмма из Java (http://www.rgagnon.com/javadetails/java-0014.html).
    Проблема: Единственный способ взаимодействия Frontend / Backend - через строки. Это может потребовать тонны (трудного) кодирования / декодирования.
  • ИспользованиеJNI / JNA. Из того, что я прочитал, это позволит вам передавать целые числа, массивы и т. Д. Я думаю, что внешние программы должны быть написаны на C / C ++, чтобы это работало. С MLton's Интерфейс внешних функций Iможет написать интерфейс к моей функциональной программе на C и статически связать все это.
    Проблема: Очевидно, это работает только с динамическими библиотеками, то есть с dll в Windows. Однако MLtonПозвольте мне только скомпилировать программу ML / C в исполняемый файлПри попытке создать dll я получаю целую кучу ошибок.

У кого-нибудь есть опыт с этим?Есть ли лучший способ сделать это?
Заранее спасибо!-Steffen

РЕДАКТИРОВАТЬ: я знаю о Scala, которая пытается перенести концепции из функционального программирования в Java.Я пробовал это, но я не думаю, что это может конкурировать с реальным функциональным языком программирования (с точки зрения выразительности)

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Это не совсем точный ответ, но есть функциональный язык, который очень ориентирован на мл для JVM: Yeti

Так что если вам нравится кодирование на ML, то это, вероятно, в настоящее времязакрывает, вы можете получить на JVM, и он, конечно, очень хорошо интегрируется со всеми API Java.

0 голосов
/ 06 марта 2013

Есть ли хороший способ написать программу на ML, а затем обернуть ее графическим интерфейсом, написанным на Java?

Я не знаю, является ли это хорошим способом для небольших приложений, но это определенно способ, который подходит для больших вещей в стиле IDE: Изабель / ML против Изабель / Scala / JVM. Это приложение интерактивного доказательства теорем, но в некотором смысле это простое программирование на SML.

Таким образом, вы можете написать базовый код Isabelle / ML, который генерирует некоторые сообщения в виде старомодного REPL, но вывод может интерпретироваться компонентами GUI на стороне JVM. Isabelle / jEdit обычно делает это для красивой печати цветного текста с небольшим количеством расширенного текста (подстрочный / верхний индекс и жирный шрифт).

Относительно явного перекодирования функциональных значений по каналам / сокетам в виде строк: в Isabelle / ML / Scala это получается довольно просто из-за некоторой имитации способа, которым SML будет представлять типизированные значения в нетипизированной памяти, но с использованием здесь нетипизированных деревьев XML вместо битов. Синтаксис передачи XML специфичен для простоты: YXML вместо официального квази-удобочитаемого XML. Все это вписывается в ок. 8000 байт источника SML - мне хочется публиковать здесь источники, но лучше поискать в Интернете «Изабель YXML» или «YXML PIDE».

Поскольку только Scala / JVM упоминается как отдельная альтернатива: она определенно работает, Scala также очень мощная и гибкая в имитации многих стилей программирования (ориентированных на функциональные объекты более высокого порядка), но для сложных символических приложений, таких как доказательство теорем, это просто не достигнет чистоты и стабильности SML. (Обратите внимание, что базовой платформой SML здесь является Poly / ML.)

...