19

OCaml での GUI プログラミングに関係するスレッドをいくつか見たことがありますが、GUI インターフェースが必要な場合に明確な解決策につながるとは思えません。

私の質問は、より具体的には次のとおりです: OCaml ソフトウェアの GUI をプログラミングする上で最も効果的な (そして簡単に理解できる) アプローチは何ですか? OCaml自体のシンプルで効果的なGUIモジュールに触れた人はいますか、またはこれを行うことができ、OCamlとうまく通信/再生する効果的な言語またはフリーソフトウェアパッケージを見つけましたか?

私はOCamlでインタープリターを書いたので、レクサー、パーサー、コアインタープリター関数などはOCamlモジュールです。現在、コマンドラインに式を入力し、解析された表現や簡約された式などを示す印刷された端末出力を受け取ることで、ユーザーがインタープリターと対話できるようにするコマンドラインソリューション (「main.ml」) があります。ただし、コマンド ライン ソリューションは、テストのみを目的としています。ユーザーが GUI を介してやり取りできるようにしたいのですが、それは単純である可能性があります (Java フレームは何十年も前から思い浮かびます) が、私がコーディングした OCaml モジュールと何らかの形でインターフェースする必要があります。私がこれまでに見つけた OCaml には、 http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual042.htmlというライブラリが 1 つあります。これが効果的で有用かどうかは誰にもわかりませんか?(私は思う

より最適な言語で GUI をプログラミングすることを選択した場合、ソフトウェアの相互作用は次のようになります: 適切な言語 (おそらく C++、Python など) で GUI を記述し、OCaml で記述されたインタープリターを実行可能ファイルにコンパイルし、GUI を何らかの方法で接続します。実行可能ファイル?私は、パイプ(オペレーティングシステムの設計に関係するものなど、これらのプロセス間通信を考え続けています)またはソケット(ネットワークプログラミングのためにこれらを考える傾向があります)を介した、疎に接続されたまたは奇妙なソリューションには興味がありません。 OCaml自体ではないにしても、OCamlでコード化されたインタープリターを別の言語のGUIコードに「収容」する方法が必要だと想像してください。考え、ガイダンス、または提案はありますか?

編集: Linux ライクなオペレーティング システム (つまり、Linux RedHat) 用の GUI を入手できれば幸いです。GUI を Windows で動作させることができれば素晴らしいことですが、少なくとも Linux を目指しています。

編集 2: これを見つけたところですが、「OCaml-Java」について考えている人はいますか? http://ocamljava.x9c.fr/ 「... ocamlc を使用してコンパイルされた Objective Caml ソースを実行する機能。次に、Objective Caml ソースを実行可能な jar ファイルにコンパイルする機能." 私の懸念は、すばやく便利な GUI を手に入れるには Java が最善の方法であるとは思いもしなかったことです...

現在の解決策: @Jeffrey Scofield が下に置いた解決策の投稿でさまざまなオプションを調べた後、私は現在、LablGtk をより深く調べることにしました (これにより、OCaml 内にとどまることができます)。C と OCaml はすでに関係を持っているため、この投稿を見ている人にとって次の有望なオプションは、C との外国語インターフェイスを調べることです。OCaml 内で C コードを呼び出す方法と、C 内で OCaml を呼び出す方法があるようです (ただし、呼び出し元の関数のタイプにより固有のやや複雑なラッパー関数で OCaml 関数呼び出しをラップすることになるため、これは非常に難しい場合があります)。 OCaml 内-->つまり、C 内で各 OCaml 関数とその引数の「マッピング」を処理する必要があります)。を見てみましょう: http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html、詳細については。OCaml-Java は当初、私が Java GUI プログラミングに慣れていたので、素晴らしいアイデアのように思えましたが、2 つの言語間の対話は C と OCaml ほど直接的ではなく、さらに、これに関するドキュメントはスリムに見えました (そして OCaml を使用) -Java は、ただ手に取って Java GUI にたどり着くものではありませんでした...)。OCaml-JavaScript は面白そうに見えましたが、この方法を選択した場合、いくつかの JavaScript に加えて、適切な HTML 5 コーディングのセットアップに時間を費やす必要があることに注意してください。または、ここ SO には、GUI バックエンド システムを作成する有効な方法であるパイプとソケットについて説明している投稿がいくつかあります。ただし、プログラムシステム/製品が「疎結合」になることを気にしない場合は、これは良い考えです。

4

2 に答える 2

10

LablGtkツールキットはかなり最新であり、現在維持されていると思います。ということで、ひとつの選択肢になります。ただし、私自身は使用していません。

OCaml モジュールのセットを C、C++、または Objective C で書かれたメイン プログラムにリンクすることはそれほど難しくありません。OCaml 関数を多かれ少なかれ直接呼び出して、結果を返すことができます。このためには、外部関数インターフェイスを学習する必要がありますが、慣れればそれほど難しくありません。次に、C ファミリ側から好きな GUI ライブラリを使用できます。このアプローチに興味がある場合は、OCaml マニュアルの第 19 章から始めることができます。

言語によっては、C 仲介を使用して他の言語をリンクする場合があります。インタープリター言語の場合、おそらく OCaml 関数を新しいプリミティブとして追加できます。(私の経験では、インタプリタは通常 C または C++ で記述されています。)

Javaの場合、OCaml-Javaがあります(あなたが言及したように)。私自身は使用していませんが、興味深いものです。JVM にはいくつかの制限があると思いますので、コーディングには少し注意が必要かもしれません。

Web アプリの場合、OCaml を JavaScript にコンパイルするjs-of-ocamlがあります。

于 2013-03-27T04:16:29.157 に答える
2

現在、私の雇用主のプロジェクトでは、相互運用のために OCaml に C の部分を追加して、Qt で C++ と OCaml を使用しています。OCaml 部分は C++ によってプロセスとして呼び出され、2 つが Qt の共有メモリと通信します。私たちのプロジェクトでは機能しますが、より頻繁なデータ交換には効果的ではありません。

トランスピレーターを使用した別のソリューション: https://github.com/bloomberg/bucklescript

このプロジェクトは OCaml コードを JavaScript に変換するので、この方法で HTML5 ベースの GUI フレームワーク上で GUI を実行できます。

このトランスピラータの主な作者は、しばらくの間、OCaml コンパイラのコア貢献者としても働いていました。React チームは、このプロジェクトについても多くのフィードバックを提供しました。

于 2017-06-11T08:38:55.097 に答える