Ich habe ein paar Threads gesehen, die GUI-Programmierung in OCaml betreffen, aber ich glaube nicht, dass sie eindeutig zu einer klaren Lösung führen, wenn eine GUI-Schnittstelle benötigt wird.OCaml: Effektiver Pfad zur GUI-Programmierung?
Meine Frage, um genauer zu sein, ist wie folgt: Was ist der effektivste (und leicht zu erlernen) Ansatz bei der Programmierung einer GUI für OCaml-Software? Hat jemand mit einfachen und effektiven GUI-Modulen in OCaml selbst Kontakt aufgenommen oder eine effektive Sprache oder ein kostenloses Softwarepaket gefunden, in dem dies möglich ist und das gut mit OCaml kommuniziert/spielt?
Ich habe einen Interpreter in OCaml geschrieben, also sind meine Lexer, Parser, Kern-Interpreter-Funktionen usw. OCaml-Module. Gegenwärtig habe ich eine Befehlszeilenlösung (eine "main.ml"), die dem Benutzer erlaubt, mit dem Interpreter zu interagieren, indem er Ausdrücke in die Befehlszeile eingibt und eine gedruckte Terminalausgabe empfängt, die den analysierten und reduzierten Ausdruck usw. anzeigt. Die Befehlszeilenlösung dient nur zu Testzwecken. Ich möchte, dass Benutzer über eine grafische Benutzeroberfläche interagieren, es kann einfach sein (Java-Frames kommen mir schon seit Äonen vor), muss aber irgendwie mit den von mir codierten OCaml-Modulen interagieren. Es gibt eine Bibliothek in OCaml, die ich bisher gefunden habe: http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual042.html. Weiß jemand, ob dies effektiv und nützlich ist? (Ich glaube, ich habe negative Kommentare über diese Bibliothek gefangen)
Wenn ich die GUI in einer optimaleren Sprache programmieren würde, wäre die Software-Interaktion: schreiben GUI in geeigneter Sprache (vielleicht C++, Python, etc.) , kompilieren Sie dann den OCaml geschriebenen Interpreter in eine ausführbare Datei, verbinden Sie dann die GUI irgendwie mit der ausführbaren Datei? Ich interessiere mich nicht für eine lose zusammenhängende oder seltsame Lösung, über Pipes (ich denke immer an die Interprozesskommunikation für diese, was beim Betriebssystem-Design ist) oder an Sockets (ich denke an diese für die Netzwerkprogrammierung), Ich stelle mir vor, dass es einen Weg gibt, meinen OCaml-codierten Interpreter in den GUI-Code einer anderen Sprache zu "unterbringen", wenn nicht OCaml selbst. Irgendwelche Gedanken, Anleitungen oder Vorschläge?
EDIT: Ich würde mich freuen, wenn ich eine GUI für ein Linux-ähnliches Betriebssystem (d. H. Linux RedHat) bekommen könnte. Wenn ich die GUI unter Windows zum Laufen bringen könnte, wäre das großartig, aber zumindest ziele ich auf Linux ab.
EDIT 2: Nur gefunden, hat jemand Gedanken zu "OCaml-Java"? http://ocamljava.x9c.fr/ Es klingt ziemlich interessant, wie es, "... die Fähigkeit, Objective Caml Quellen, die mit ocamlc kompiliert worden sind, zu laufen; zweitens die Fähigkeit, Objective Caml Quellen in ausführbare jar-Dateien zu kompilieren." Meine Sorge ist, dass es mir nie auffiel, dass Java der beste Weg wäre, um eine schnelle, aber nützliche GUI zu bekommen ...
AKTUELLE LÖSUNG: Nach der Untersuchung der verschiedenen Optionen in der Lösung Post, die @ Jeffrey Scofield unten setzen Ich habe mich entschieden, LablGtk jetzt genauer zu untersuchen (was mir erlauben würde, innerhalb von OCaml zu bleiben). Die nächste vielversprechende Option für diejenigen, die sich diesen Beitrag ansehen, wäre, in Fremdsprachen zu schauen, die mit C interagieren, da C und OCaml bereits eine Beziehung haben, um damit zu beginnen. Es scheint Möglichkeiten zu geben, C-Code innerhalb von OCaml und OCaml innerhalb von C aufzurufen (obwohl dies sehr schwierig sein kann, da OCaml-Funktionsaufrufe im Wesentlichen mit etwas komplexeren Wrapper-Funktionen verpackt werden, die spezifischer für die Art von Funktionen sind, von denen aus aufgerufen wird innerhalb von OCaml -> dh Sie müssen sich mit dem "Mapping" jeder OCaml-Funktion und ihrer Argumente innerhalb von C befassen. Werfen Sie einen Blick auf: http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html, für weitere Informationen. OCaml-Java sah ursprünglich wie eine großartige Idee aus, da ich mit Java GUI-Programmierung vertraut war, aber die Interaktion zwischen den beiden Sprachen war nicht so direkt wie bei C und OCaml, und die Dokumentation dafür schien schlank zu sein (und OCaml zu verwenden) -Java war nicht etwas, das du einfach aufnimmst und zum Java-GUI-Zeug gehst ...). OCaml-JavaScript sah interessant aus, aber denken Sie daran, dass Sie wahrscheinlich zusätzlich zu etwas JavaScript Zeit in gutes HTML 5 Coding-Setup investieren müssen, wenn Sie diesen Pfad wählen. Alternativ gibt es hier in SO mehrere Beiträge, in denen über Pipes und Sockets gesprochen wird. Dies sind gültige Methoden zum Erstellen eines GUI-Backend-Systems.Dies ist jedoch eine gute Idee, wenn es Ihnen nichts ausmacht, dass Ihr Programmsystem/Produkt "lose gekoppelt" ist. Ich werde diese Lösung aktualisieren, sobald ich LablGtk herausgefunden habe und sicherstellen, dass es ein akzeptables GUI-Frontend für meinen OCaml-Backend-Code liefert.
Es wäre hilfreich zu wissen, was Ihre Zielplattform oder Plattformen sind. Für das, was es wert ist, ist es durchaus sinnvoll, Sockets in einem einzigen Host zu verwenden. Wenn Sie auf einem Unix-ähnlichen System arbeiten, gibt es "Unix Domain Sockets". –
Ich habe gerade meinen Beitrag mit Informationen zur Zielplattform aktualisiert. Weiter, @ JeffreyScofield, während Sie Recht haben, dass Sockets möglicherweise nicht etwas auszuschließen sind, würde ich sehr interessiert sein, wenn es eine Art Lösung gibt, wo ich die GUI und Interpreter (in OCaml geschrieben) in einer Art von Programm/Executable, aber wenn das kein möglicher Pfad ist, dann können Sockets der richtige Weg sein ... aber das ist ein lockerer gekoppeltes System. Ich denke, wenn ich die Dinge enger zusammenhalten könnte, wäre das ideal! – 9codeMan9