問題タブ [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.
erlang - erlang はソケットの代わりに名前付きパイプを使用できますか?
NGINX およびその他のサーバーは、名前付きパイプ (mkfifo) を使用するオプションを提供します。
erlang は、nif の相互作用のためにポートの代わりにこれらを使用できますか。NIF に 70,000 の接続を確立したい場合はどうでしょうか (判断しないでください)。
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 にアクセスする必要があるという規則がありますか。
c - Erlang: C NIF 呼び出しの動作をブロックする
C NIF が多くの Erlang プロセスによって同時に呼び出されたときに、それらのブロック動作を観察しました。ノンブロッキングにすることはできますか?私がmutex
理解できないことがここで働いていますか?
PS基本的な「Hello world」NIFは、特定の呼び出しの場合にsleep
100を作成することでテストできます。NIF を呼び出している他の PID は、スリープが実行されるのを待ってから実行されることがわかります。microseconds
PID
非ブロッキング動作は、並行性が問題を引き起こさない可能性がある場合 (配列のプッシュ、カウンターのインクリメントなど) に役立ちます。
spawner
、conc_nif_caller
およびniftest
モジュールでそれぞれ構成される 4 つの要点へのリンクを共有しています。の値をいじってみましたが、Val
実際に非ブロッキング動作を観察しました。これは、関数に大きな整数パラメーターを割り当てることによって確認されspawn_multiple_nif_callers
ます。
spawner.erl 、conc_nif_caller.erl、niftest.erl、最後にniftest.cをリンクします。
以下の行は、私の Mac の Erlang REPL によって出力されます。
erlang - Erlang: 64 ビット VM で 32 ビット NIF を使用する
(Windows で) 64 ビット Erlang から 32 ビット NIF を使用する方法はありますか?
不可能に思えますが、これを達成する方法はありますか?
erlang - Erlang: NIF とダイアライザーの警告
NIF を実装するとき、Dialyzer は私に
関数 crc16/1 にはローカル リターンがありません
おそらく、.erlモジュールで終了するためです(公式ドキュメントが推奨するように):
そして一般的に、exit/1
常に使用するとDialyzerがこのメッセージに文句を言うようになります(-spec .. -> no_return()
助けにはなりません)。
これはどのように修正できますか?
c - Erlang NIF: スレッドのロック
NIF 実装は、通常の C/C++ スレッド ロック プリミティブを使用できますか、または NIF API を使用する必要があります (enif_mutex_lock(..), enif_mutex_create(..),
など)。
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 ライブラリがロードされていません」というメッセージが返されます。
私は重要なステップを逃していますか?- 助けてください!