問題タブ [xs]

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

perl - PerlのXSUBはどのように死ぬことができますか?

約80個の関数で構成されるCライブラリ用のPerlXSラッパーを作成しました。現在、私の一般的な戦略は、C関数からのエラーをで置き換えることでPL_sv_undefあり、呼び出し元のPerlコードは、戻り値がであるかどうかを明示的にチェックする必要がありundefます。HV(一部のC関数では、出力を/に変換し、AV空のリストを使用してエラーを報告するため、より複雑になります。)

そのライブラリを使用してより大きなPerlスクリプトを作成するようになったので、エラー処理を簡素化し、たとえば通常のeval {}/die例外のようなメカニズムを使用してエラーを処理したいと思います。

現時点では、XSの単純なXSUBは次のようになっています。

一部のモジュールには、エラー時に「RaiseError」のようなグローバルフラグが設定されているのを見てきdieましたが、借りることができる例を見つけることができませんでした。.pm私が見つけたいくつかのモジュールは、の内部ではなく、の内部で「RaiseError」フラグを処理.xsするため、Perlのを使用できますdie.pm私の場合、多くの関数が特別なエラーチェックを必要とするため、これを内部に実装するのはかなり困難です。チェックはXS内にすでに存在するため、これもコードの重複につながります。

perlxs/perlgutsドキュメントに関連するものは何も見つかりませんでした。特に、から生成されPerl_croak()たでへの呼び出しを見ましたが、関数のドキュメントを見つけることができませんでした。.c.xs

PerlのXSのアナログは何dieですか?または、XSUBは、関数が失敗し、戻るRETVALがないことをPerlランタイムに報告する方法は他にありますか?正しく設定する方法は$@

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

perl - Perl XS モジュールが黙って pure-perl にフォールバックするのを止める

CPAN のいくつかの (多くの?) モジュールは、XS を使用して部分的に C で実装されているようで、必要に応じて純粋な perl 実装にフォールバックできます。これは賢明ですが、明らかにパフォーマンスが低下する可能性があります。問題を解決できるように、それが発生することを知りたいです。

このタイプのフォールバックを停止または検出する一般的な方法はありますか?

この動作の例については、(非常に便利な) Date::Simple (コード スニペット)をご覧ください。

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

c - perlxstutにnewSVnvの代わりにnewSVuvがあるべきですか?

私はperlxstutnewSVnvを調べているところですが、例5例6で見つけましたが、newSVuvそれがより適切だと思います。不思議なことnewSVnvにも動作します。どうしたの?

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

c - C コードで Perl ハッシュを作成するにはどうすればよいですか?

Perl に C コードを埋め込みたい。この C コードでは、巨大なファイルをメモリに読み込み、変更を加えてハッシュ (カスタム ハッシュ) を作成します。このハッシュを Perl コードからアクセスできるようにしたいと考えています。出来ますか?どうすれば目標に到達できますか?

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

c++ - PERLXSを使用してSTLベクトルを取り込むC++関数を呼び出す方法

私はPerlXSを使用してC++オブジェクトの周りにperlラッパーを記述しています。通常、私のfcnはstring / intなどを取り込んでおり、問題なく作成できます。.xsファイルにこのようなコードを書くだけです

今回; stlベクトルを取り込む関数が必要です

このエラーが発生します:

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

perl - オペコードのリストを含むパッケージに CV を割り当てるにはどうすればよいですか?

私は bleadperl の新しい parse_block 機能で遊んでいます。

いくつかのステートメントを解析して listop にすることができます。これにより、以下のツリーが生成されます。

キーワード プラグインから optree 構造へのポインタを返す必要があります。現時点では、ops のベア リストのみが含まれています。これらの操作をサブルーチン内にラップし、スタッシュ内のシンボルに割り当てたいと考えています。

だから私はこのようなことをしたいと思います:

おそらく、listops の最初と最後に entersub、leavesub を追加する必要がありますが、XS でこれをどのように構築するのかわかりません。また、結果の optree を CV に変換する方法もわかりませんか?

xsub の CV を生成する例を見つけることができますが、optree からはできません。

ご協力いただきありがとうございます。

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

perl - XS から perl オブジェクト (祝福されたハッシュ) に格納された値にアクセスする

このような perl オブジェクト (ハッシュへの祝福された参照) があります。

$o 参照がある XS コードの別の場所で、 の値を取得する必要があります$o->{internal_data}

perl(api|xstut|guts|???) にはおそらくいくつかの章があります。私はそれを見つけることができませんでした。

ヒントをお寄せいただきありがとうございます。

-- kmx

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

perl - Perl XS 拡張から stdout への出力

私は最近、XS を使用して Perl (v5.8.8) 拡張機能を書き始めました。私が書いているメソッドの 1 つは、大量のデータを収集し、それをクライアントにスプラットします。出力に対してアサーションを行う単体テストを書きたいのですが、問題が発生しています。PerlIO メソッドがprint、Perl の呼び出しと同じチャネルを介してデータを渡しているようには見えません。通常、STDOUT ファイル ハンドラーに接続して結果をインターセプトできますが、PerlIO メソッドはこれを完全にバイパスしているようです。

以下に例を貼り付けましたが、私のテストの基本的な要点は次のとおりTieです。これを行うと、ステートメントをキャプチャできますが、モジュールからの呼び出しはキャプチャできません。、、などを使ってみました。サイコロはありません。STDOUTuntieprintPerlIO_*PerlIO_writePerlIO_putsPerlIO_printf

最初から、ここに私がやっていることの最小限の再現があります:

これを に入れますIOTest.xs:

そして、これは次のファイルに入りますtest.pl(興味深い部分は一番下にあり、それ以外はすべて stdout をキャプチャするためのものです):

ビルドとテストは、次の問題だけです。

私が見ている出力は次のとおりです。

明らかに、私は「ブー!」と期待しています。「前」と「後」の間に挟まれているが、それは起こっていないようだ.

何か案は?

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

perl - システム/perlのアップグレード後のlocal::libのトラブルを軽減する方法は?

私たちのシステム管理者は最近私のOSとperlを(5.12.3に)アップグレードしました。local :: lib環境変数をロードすると、xsに依存するものはすべて壊れているように見えます。

これに対する簡単な修正はありますか?

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

perl - PerlXSおよびInline::C

XSとInline::Cモジュールの使用の違いは何ですか?これはこの質問の誰かによって言及され、私は興味をそそられました。