user-interface interface ocaml user-interaction

user interface - OCaml: ¿Ruta efectiva a la programación GUI?



user-interface user-interaction (2)

Actualmente, en mi proyecto en mi empleador, estoy usando C ++ y OCaml con Qt, con una parte C añadida a OCaml para interoperabilidad. La parte OCaml es llamada por C ++ como proceso, los dos se comunican con la memoria compartida de Qt. Funciona para nuestro proyecto, pero para el intercambio de datos con mayor frecuencia no será efectivo.

Aquí quizás otra solución, utilizando un transpilador: https://github.com/bloomberg/bucklescript

Este proyecto traduce sus códigos OCaml en JavaScript, por lo que puede hacer GUI en el marco de GUI base HTML5 de esta manera.

El autor principal de este transpilador ha trabajado como colaborador principal para el compilador OCaml durante un tiempo también. El equipo de React también dio muchos comentarios sobre este proyecto.

He visto algunos hilos que tocan la programación de GUI en OCaml, pero no creo que conduzcan claramente a una solución clara cuando se necesita una interfaz de GUI.

Mi pregunta, para ser más específica, es la siguiente: ¿Cuál es el enfoque más efectivo (y fácil de entender) en la programación de una GUI para el software OCaml? ¿Alguien ha entrado en contacto con módulos GUI simples y efectivos en OCaml o ha encontrado un lenguaje efectivo o un paquete de software gratuito en el que se pueda hacer esto y que se comunique / juegue bien con OCaml?

He escrito un intérprete en OCaml, por lo que mi lexer, analizador, funciones de intérprete principal, etc. son módulos OCaml. Actualmente, tengo una solución de línea de comandos (un "main.ml") que le permite al usuario interactuar con el intérprete escribiendo expresiones en la línea de comandos y recibiendo una salida de terminal impresa que muestra la expresión analizada y reducida, etc. Sin embargo, La solución de línea de comando es solo para propósitos de prueba. Quiero que los usuarios interactúen a través de una GUI, puede ser simple (los marcos de Java vienen a la mente desde hace eones), pero necesita interactuar de alguna manera con los módulos OCaml que he codificado. Hay una biblioteca en OCaml que he encontrado hasta ahora: http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual042.html . ¿Alguien sabe si esto es efectivo y útil? (Creo que he captado comentarios negativos sobre esta biblioteca)

Si elijo programar la GUI en un lenguaje más óptimo, la interacción del software sería: escriba la GUI en un lenguaje adecuado (tal vez C ++, Python, etc.), luego compile el intérprete escrito de OCaml en un ejecutable, luego conecte la GUI de alguna manera a el ejecutable? No estoy interesado en alguna solución extraña o extrañamente conectada, a través de tuberías (sigo pensando en la comunicación entre procesos para esto, como en lo que concierne al diseño del sistema operativo) o sockets (tiendo a pensar en esto para la programación en red), Imagínese que debe haber alguna forma de "alojar" a mi intérprete con código OCaml en el código GUI de otro idioma, si no es el propio OCaml. ¿Algún pensamiento, orientación o sugerencia?

EDITAR: Me alegraría si pudiera obtener una GUI para un sistema operativo similar a Linux (es decir, RedHat de Linux). Si pudiera hacer que la GUI funcionara en Windows, sería genial, pero como mínimo estoy apuntando a Linux.

EDIT 2: Acabo de encontrar esto, ¿alguien tiene alguna idea sobre "OCaml-Java"? http://ocamljava.x9c.fr/ Suena bastante interesante, como lo ha hecho, "... la capacidad de ejecutar las fuentes de Objective Caml que se han compilado usando ocamlc; en segundo lugar, la capacidad de compilar las fuentes de Objective Caml en archivos jar ejecutables . " Mi preocupación es que nunca me sorprendió que Java fuera la mejor manera de obtener una GUI rápida pero útil ...

SOLUCIÓN ACTUAL: Después de examinar las diversas opciones en la publicación de la solución que @Jeffrey Scofield dejó a continuación, he optado por profundizar en LablGtk (lo que me permitiría permanecer dentro de OCaml). La siguiente opción prometedora para quienes miran este post sería buscar una interfaz de idioma extranjero con C, ya que C y OCaml ya tienen una relación con la que comenzar. Parece que hay formas de llamar al código C dentro de OCaml y OCaml dentro de C (aunque esto puede ser realmente difícil, ya que esencialmente terminas envolviendo las llamadas de función OCaml con funciones de envoltorios algo complejas que serán más específicas para el tipo de funciones desde las que llamas dentro de OCaml -> es decir, tendrá que lidiar con el "mapeo" de cada función OCaml y sus argumentos dentro de C). Echa un vistazo a: http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html , para obtener más información. OCaml-Java originalmente se veía como una gran idea, dado que me sentía cómodo con la programación GUI de Java, pero la interacción entre los dos lenguajes no era tan directa como con C y OCaml, además, la documentación para esto parecía ser delgada (y usando OCaml -Java no era algo que solo recogías y llegabas a la interfaz gráfica de Java ...). OCaml-JavaScript parecía interesante, pero tenga en cuenta que lo más probable es que tenga que invertir tiempo en una buena configuración de codificación HTML 5 además de JavaScript si elige esta ruta. Alternativamente, hay varias publicaciones aquí en SO que hablan sobre tuberías y sockets, que son métodos válidos para crear un sistema de GUI-back-end. Sin embargo, esta es una buena idea si no le importa que su sistema / producto de programa esté "acoplado libremente". Actualizaré esta solución una vez que descubra LablGtk y me asegure de que proporcione una interfaz de usuario GUI aceptable para mi código de servicio de fondo de OCaml.


Creo que el LablGtk herramientas LablGtk está razonablemente actualizado y se mantiene actualmente. Así que esa sería una opción. Sin embargo, no lo he usado yo mismo.

No es demasiado difícil vincular un conjunto de módulos OCaml a un programa principal escrito en C, C ++ o Objective C. Puede hacer más o menos llamadas directas a sus funciones OCaml y obtener resultados. Para esto necesitas aprender la interfaz de función externa, que no es tan difícil una vez que te metes en la ranura. Luego, puede usar la biblioteca de GUI que desee del lado de la familia C. Si está interesado en este enfoque, puede comenzar con el Capítulo 19 del manual de OCaml.

Puede vincular otros idiomas utilizando un intermediario en C, dependiendo del idioma. Para un lenguaje interpretado, probablemente podría agregar sus funciones OCaml como nuevas primitivas. (En mi experiencia, los intérpretes suelen estar escritos en C o C ++).

Para Java, hay http://ocamljava.x9c.fr/ (como usted menciona). No lo he usado, pero es intrigante. Creo que hay algunas limitaciones impuestas por la JVM, por lo que es posible que tenga que tener un poco más de cuidado en su codificación.

Para una aplicación web, hay js-of-ocaml , que compila OCaml a JavaScript.