問題タブ [ruby-c-extension]

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 に答える
515 参照

c - Windowsでruby拡張ライブラリ(c)を使用してrubyアプリケーションを実行するにはどうすればよいですか?

私はこれについての助けに感謝します:私は私のcライブラリに拡張機能を書きたいです。ライブラリlibzmq(C ++で記述)を使用するファイルzmq.cppを作成しました。

ruby extconf.rbを使用してmakefileを作成してから、nmakeを実行します。それはすべてうまくいった。Nmakeで生成されたファイル

これはすべてWindowsXPで行われました。

次に、テストプログラムがあります。最初の行には次のようなものがあります。

を使用してテストプログラムを実行しようとすると

私は得る

ファイルの場所が正しいので、確認しました。

あなたはそれを実行する方法を知っていますか?

注:これはすべてubuntuで行い、正常に機能しました。makefileを作成し、ここと同様のコマンドを使用してテストアプリケーションを実行できました(パスのみが異なります)。

ありがとう

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

c - (U) Ruby 拡張機能: rb_gc_mark() とインスタンス変数

クラスを定義する ruby​​ エクステンションを書いています。Data_Wrap_Struct()のコールバックを実装するために使用する場合rb_define_alloc_func()、インスタンス変数を手動でマークして解放する必要がありますか? それとも、それはまだ私のために処理されていますか?

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

c++ - rdoc が c 拡張機能からメソッド引数を適切に読み取れるようにするにはどうすればよいですか?

すべて、rdoc を使用して、C 拡張を含む Ruby コードのドキュメントを生成していますが、メソッドの引数に問題があります。Rdoc はそれらの名前を正しく解析せず、代わりに p1、p2 などを使用します。

まず、拡張機能は実際には C++ としてコンパイルされるため、次のような関数定義を使用する必要があります。

rdoc は、次のような古いスタイルの「C」定義を想定しているようです。

とにかく私はこれを機能させることができますか?

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

c - ProcをRubyC拡張機能のブロックに変換するにはどうすればよいですか?

procの配列をRubyC拡張機能に格納しているので、各procを調べてinstance_evalする必要があります。問題は、instance_evalがブロックのみを受け入れ、procを受け入れないことです。これは、Rubyでは問題ではありません。

ただし、RubyCAPIを使用してこれを実行する方法がわかりません。

誰かが私がこれを達成する方法について何かアイデアがありますか?

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

c - Ruby C APIで2つのハッシュを効率的にマージするには?

2 つのハッシュをマージする必要がある Ruby の C 拡張機能を作成していますが、Ruby 1.8.6 では rb_hash_merge() 関数は静的です。私は代わりに使用しようとしました:

しかし、これは遅すぎるため、このアプリケーションではパフォーマンスが非常に重要です。

効率とスピードを念頭に置いてこのマージを実行する方法を知っている人はいますか?

(私は単に rb_hash_merge() のソースを見て複製しようとしましたが、他の静的関数でRIDDLEDになっていることに注意してください。それ自体はさらに多くの静的関数でいっぱいになっているため、解きほぐすことはほとんど不可能に思えます...別の方法が必要です)

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

c - Ruby c 拡張機能: StandardErrors ではないものを含め、すべての例外をキャッチするにはどうすればよいですか?

ルビーでは、

のサブクラスではない例外をキャッチしませんStandardError。Cでは、

同じことをします。rescue Exception => eruby C エクステンションから (単に ではなく)どうすればよいrescue => eですか?

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

c - Ruby 1.9.1-p378 C 拡張 rb_block_call 奇妙な点

私はかなり基本的な反復であるべきものを扱っています。Rubyコードでそれを達成できることは理解していますが、すでにC拡張で作業しているので、この関数を残りのコードと一緒にCで保持することをお勧めします問題。

問題は rb_block_call にあります。README.EXT での rb_block_call の説明は次のとおりです。

シンボル mid で指定されたメソッド名で recv のメソッドを呼び出し、ブロックとして func を提供します。func は、yield からの値を最初の引数として、data2 を 2 番目の引数として、argc/argv を 3 番目または 4 番目の引数として受け取ります。

したがって、私の理解では (Ruby の内部を調べて確認しました)、受信関数は次のようになります。

そして、ここで問題にぶつかりました。私の使用例 (以下に含めます) では、rb_yield_value と data2 が期待どおりに渡されます。一方、argc は常に 1 に設定され、argv[ 0 ] は rb_yield_value、argv[ 1 ] は false、argv[ 2 ] は rb_yield_value、argv[ 3 ] は例外をスローします。

argc と argv に何を渡すかは問題ではありません。0 と NULL を渡すと、1 と VALUE を Qtrue に設定した場合と同じ結果になります。argc/argv を使用するものはすべて説明どおりです。

ここに私が取り組んでいるコードがあります:

Ruby の内部では、argc/argv を使用した rb_block_call の例はあまりないようです...せいぜい 1 つまたは 2 つです。それらはすべて、値を使用するのではなく、単に値を内部で中継していると思います。

考え?

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

c - Singleton を使用した Ruby C 拡張機能

C 拡張クラスのインスタンスを 1 つだけ作成できるようにしたかったので、singleton モジュールを含めたいと思いました。

私が理解しているように、その行は と同じですがSingleton.included(MyMouse)、それを呼び出そうとすると、

rb_include_moduleが予想とは異なる動作をするのはなぜですか? また、接線の議論/説明または関連記事も大歓迎です。Ruby初心者です。

また、拡張機能をできるだけシンプルに保ち、後で何らかのインターフェイスをハックして、1 つのインスタンスのみを許可するようにすることもできたようです。または、マウス関連のメソッドをモジュールに入れるだけです...それは意味がありますか?

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

c - Ruby拡張機能でクロススレッド違反を回避するにはどうすればよいですか?

私はC拡張機能を作成しており、Rubyと非同期I/Oライブラリ間のインターフェイスを提供しています。コードに対してテストを実行すると、次のようなエラーが頻繁に発生します(ただしこれらに限定されません)。

非同期IOは、C拡張機能が複数のスレッド(メインのインタープリタースレッドではない)からrubyにメッセージを配信する必要があることを意味します。プロセスでこれらのスレッドセーフ違反を回避するにはどうすればよいですか?

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

c - cを使用するruby拡張機能をコンパイル/作成するにはどうすればよいですか?

cを使用するruby拡張機能を作成したいと思います。しかし、gccでコンパイルすると、次のエラーが発生します。

私はそれを間違えましたか?私のrubyext.cファイルには1行のコードしかありません:

どんな助けでも大歓迎です。