問題タブ [ocaml-lwt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - OCaml/Node.JS の Lwt.async と Lwt_main.run の違いは何ですか?
私はjs_of_ocaml
node.jsを試しています。ご存知のように、node.js はコールバックを多用して、明示的なスレッドを導入することなく非同期リクエストを実装します。
OCaml には、非常に便利な構文拡張機能を備えた非常に優れたスレッド ライブラリ Lwt があります。ノード ライブラリ (AWS S3 クライアント) にバインドするプロトタイプを作成し、lwt っぽいレイヤーを追加してコールバックを非表示にしました。
Lwt_main
for node.jsへのバインドがないため、コードを で実行する必要がありましたLwt.async
。Lwt.async
コードを withではなくwith で実行することの違いは何Lwt_main.run
ですか?後者は node.js に存在しませんか? 終了する前に非同期スレッドが完了するまでプログラムが待機することが保証されていますか、それともこれは私のコードの幸運ではあるがランダムな動作ですか?
subprocess - サブプロセスとの LWT の単純な相互作用
Unix
モジュールを使用してサブプロセスと対話する簡単なプログラムを次に示します。シェル コマンドを起動cat
し、文字列を送信して読み返すだけです。
最近ライブラリの勉強を始めてLwt
、同じ機能を再現したいと思っていました。私は、以下はまったく同じ結果になるはずだと思いました:
しかし、期待どおりに動作しません。明らかに、空の文字列を読み取ってから出力します。
どのように機能すべきかについて根本的な混乱があると思いますLwt
が、理解できません。を使用してサブプロセスと通信する方法を誰かに教えてもらえますかLwt
?
user-interface - GTK と Lwt の統合
lablgtk と lwt を使用したいプログラムに取り組んでいます。lwt スレッドでデータをフェッチする関数があり、lablgtk を使用して GUI にデータを表示したいと考えています。lwt フレームワークへの lablgtk の統合に苦労しています。以下は、GUI を起動できるという私の問題を示す要約バージョンですが、他には何も起こりません。どんな助けでも大歓迎です。
私はコンパイルしていますocamlfind ocamlc -g -package lwt,lwt.syntax,lwt.unix,lablgtk2 -linkpkg gtk_and_lwt.ml -o GtkAndLwt
webserver - エラー: Unbound レコード フィールド Server.callback - Ocaml
lwt
とを使用して OCaml で簡単な Web サーバーを作成する方法を説明するチュートリアルに従っていますCohttp
。
以下を_tags
含むファイルがあります。
そしてwebserver.ml
:
次に、ocamlbuild -use-ocamlfind webserver.native
次のエラーをトリガーします。
次のように変更すると、次のServer.create { callback; conn_closed }
ようにもトリガーされます。
これを解決する方法がわからないので、事前に調べていただきありがとうございます。
ocaml - Lwt と Cohttp: `致命的なエラー: 例外 Unix.Unix_error(Unix.ECONNRESET, "read", "")`
Ocaml に Cohttp と Lwt を使用した単純な HTTP サーバーがあります。アプリケーションを実行すると、終了wrk
するとすぐに約 50% の確率でクラッシュします。wrk
クラッシュは、予期しない接続の切断によって引き起こされると思います。
コンソールに次のエラーが表示されます。
これを防ぐ方法はありますか?
私の完全なソースコードは次のとおりです。
ありがとう!
ocaml - Ocaml lwt 終わりのないループ
Lwt で端末アプリケーションを作成しようとしています。基本的に、アプリが実行されている限り、Lwt_io.read_line でターミナルの入力を監視する必要があります。
プログラムの実行中に何らかのループを実現するために、次の (疑似コード) よりも良い方法はありますか?
これが正しい方法かどうかはわかりません。my_application からのすべてのスレッドが終了するたびに、Lwt_main.run が何度も何度も呼び出されます...
Lwt でこれを処理する他の方法またはより良い方法はありますか?
ocaml - Ocaml lwt が他のプロセスから stdout を読み取る
端末ベースのアプリケーション用に Ocaml で新しいフロントエンドを構築しようとしています。主なアイデアは、Lwt を使用して新しいプロセスを生成することです。
その後、プロセスの標準入力に何かを書き込んで、外部アプリでコマンドを実行します。
コマンドからの結果を読み取ると、Lwt_io.read_line_opt
. 行がなくなるまで読むにはどうすればよいですか?私が直面している問題は、プログラムが特定の時点でハングすることです。で読むとread_line_opt
、最後に到達したときに、プロセスが新しい出力をリダイレクトするのを待っているようです。
どうすればこれにアプローチできますか?
私がやろうとしていることの具体例: (端末ベースのアプリケーションは ocamldebug です)
プログラムのソース コード:
通常は で実行するocamldebug
とtest.d.byte
、端末に次のように表示されます。
上記のプログラムを実行すると、次のように表示されます。
そして、ここでハングアップします...、私のプログラムは終了しません。端末で Ctrl-c/Ctrl-c を実行しても、アクティブな ocamlrun プロセスがあります。ただし、端末は応答します。
ここで明らかな何かが欠けていますか?