問題タブ [erlang-nif]

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.

0 投票する
1 に答える
382 参照

erlang - erlang はソケットの代わりに名前付きパイプを使用できますか?

NGINX およびその他のサーバーは、名前付きパイプ (mkfifo) を使用するオプションを提供します。

erlang は、nif の相互作用のためにポートの代わりにこれらを使用できますか。NIF に 70,000 の接続を確立したい場合はどうでしょうか (判断しないでください)。

0 投票する
2 に答える
473 参照

c - NIF が Erlang を呼び出した後に変化するバイナリの値

Erlang でコーディングする予定のアプリの NIF を使用してバイナリを操作するつもりです。NIF の cpp ファイルと erl ファイルへの gist リンクを以下に示します。

[Erl Gist リンク] https://gist.github.com/abhijitiitr/3a5bc97184d6dd32f97b

[C++ Gist リンク] https://gist.github.com/abhijitiitr/24d2b780f2cdacebfb07

基本的に私は簡単なテストをしようとしています。NIF 呼び出し間でバイナリを共有し、連続する NIF 呼び出しでそれらを正常に操作します。

erlang REPL でコードをテストすると、

バイナリは、NIF 呼び出しの間に変更を保存しました。3 番目のコマンドの REPL 出力は次のとおりです。

<<1>>初期化フェーズでパスしました。なぜに変わったの<<60>>ですか?ここで何が起こっているのか理解できません。誰かがエラーを指摘できますか?

C++ コンパイル命令

私のMacで。

また、NIF で共有リソースを操作する並行プロセスについても質問したいと思いました。それは可能ですか、それとも単一の Erlang プロセスで NIF にアクセスする必要があるという規則がありますか。

0 投票する
3 に答える
1112 参照

c - Erlang: C NIF 呼び出しの動作をブロックする

C NIF が多くの Erlang プロセスによって同時に呼び出されたときに、それらのブロック動作を観察しました。ノンブロッキングにすることはできますか?私がmutex理解できないことがここで働いていますか?

PS基本的な「Hello world」NIFは、特定の呼び出しの場合にsleep100を作成することでテストできます。NIF を呼び出している他の PID は、スリープが実行されるのを待ってから実行されることがわかります。microsecondsPID

非ブロッキング動作は、並行性が問題を引き起こさない可能性がある場合 (配列のプッシュ、カウンターのインクリメントなど) に役立ちます。

spawnerconc_nif_callerおよびniftestモジュールでそれぞれ構成される 4 つの要点へのリンクを共有しています。の値をいじってみましたが、Val実際に非ブロッキング動作を観察しました。これは、関数に大きな整数パラメーターを割り当てることによって確認されspawn_multiple_nif_callersます。

spawner.erl 、conc_nif_caller.erlniftest.erl、最後にniftest.cをリンクします。

以下の行は、私の Mac の Erlang REPL によって出力されます。

0 投票する
1 に答える
77 参照

erlang - Erlang: 64 ビット VM で 32 ビット NIF を使用する

(Windows で) 64 ビット Erlang から 32 ビット NIF を使用する方法はありますか?

不可能に思えますが、これを達成する方法はありますか?

0 投票する
1 に答える
317 参照

erlang - Erlang: NIF とダイアライザーの警告

NIF を実装するとき、Dialyzer は私に

関数 crc16/1 にはローカル リターンがありません

おそらく、.erlモジュールで終了するためです(公式ドキュメントが推奨するように):

そして一般的に、exit/1常に使用するとDialyzerがこのメッセージに文句を言うようになります(-spec .. -> no_return()助けにはなりません)。

これはどのように修正できますか?

0 投票する
1 に答える
437 参照

c - Erlang NIF: スレッドのロック

NIF 実装は、通常の C/C++ スレッド ロック プリミティブを使用できますか、または NIF API を使用する必要があります (enif_mutex_lock(..), enif_mutex_create(..),など)。

0 投票する
1 に答える
1111 参照

macos - Elixir NIF - x64 Mac OSX での Hello World の例

こんにちは、Erlang NIF (ネイティブ実装関数) のHello Worldの例を取得しようとしています http://www.erlang.org/doc/man/erl_nif.htmlに示され ている OSX 64 ビットの Elixir から動作します。

まず、C コードを作成します。

gcc次に、ここで提案されているように、64ビットアーキテクチャ を使用してコンパイルに成功しましたErlang NIF Test -- OS X Lion

niftest.soこれにより、 Erlang/Elixir からインターフェイスできるようにするために必要なファイルが生成されます。私の Elixir (niftest.ex) は次のようになります (ここで報告されているより複雑な例に触発されています):

同じディレクトリにある niftest.so と niftest.ex を使用して、エリクサーを起動しiexて入力するNiftest.helloと、「NIF ライブラリがロードされていません」というメッセージが返されます。

私は重要なステップを逃していますか?- 助けてください!