問題タブ [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 に答える
146 参照

c++ - C++ 例外が Perl スクリプトをクラッシュさせないようにする

おそらくxsを使用してラップされているC++ライブラリを使用するPerlスクリプトがあります。ライブラリが例外をスローすると、内部から呼び出された場合でも Perl スクリプトがクラッシュしますeval。例外をスキップして、スクリプトがクラッシュしないようにするにはどうすればよいですか?

Perl のバージョンは v5.12.4 です

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

c - Perl XS での構造体の使用

Perl XS は初めてで、C 関数を Perl サブルーチンに変換しようとしています。

次のC関数があります

このparse関数は、へのポインタstruct parser、文字列、および文字列の長さを受け入れます。struct parserは次のように定義されています。

関数はその結果をresult引数に格納します。

この関数を Perl XS に変換したいと考えています。私がやっていることは次のようなものです:

parse_xsこのようなPerlコードで実行するように上記のコードを変更するにはどうすればよいですか

はC 関数$resultの結果です。parse

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

multithreading - メインスレッド外で SV/HV/AV を使用/作成/変更することは可能ですか?

pthread_create() で作成した新しいスレッドで、newSVpvn() で SV を作成しようとしています。この時点で、私のプログラムはクラッシュします。クラッシュが発生するC関数はこんな感じ

そしてXSUB

テスト例

完全なコードはこちらにあります: https://github.com/olegwtf/p5-Net-DNS-Native/blob/fbc57dbe9e6832afed8d46cd369db6930bbd53bc/Native.xs

それで、私がやりたいことをすることは可能ですか?

0 投票する
0 に答える
143 参照

perl - NO_XSLOCKS を #define する必要がある場合

NO_XSLOCKSと組み合わせると、XS コードで一部のエラー チェック マクロを使用できます#include XSUB.h。しかし、その使用はそれを超えているようです。ActiveState perl との互換性を向上させるために、XS ファイルに追加することが最近提案されました。この問題は例として示されています。

他に何をし#define NO_XSLOCKSますか? XS コードでいつ使用する必要がありますか?

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

perl - Perl/XS の手続き型およびオブジェクト指向インターフェース

私は現在、最初の XS モジュール (C math-library の単なるラッパー) を作成しており、まあまあの成功を収めています。最大の問題は、ドキュメントが非常に理解しにくい、または不完全であることです。

XS でコンストラクターを作成し、ライブラリーからいくつかの関数をメソッド呼び出しとして実装することに成功しました。それはうまくいきます。

今度は、手続き型インターフェイスも実装したいと考えています。このため、メソッド呼び出しかどうかを知る必要があります。メソッド呼び出しの場合は、関数で計算する数値がインスタンスに格納されます。関数の手続き呼び出しの場合は、最初の引数として指定された数値です。これは、コサイン関数の現在のコードです。

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

perl - sv_catpv() と sv_catpvs() の違いは何ですか?

perlapiによると、次のようにsv_catpv()動作します。

NULで終わる文字列を、SV にある文字列の末尾に連結します。SV に UTF-8 ステータスが設定されている場合、追加されるバイトは有効な UTF-8 である必要があります。「get」マジックは処理しますが、「set」マジックは処理しません。

void sv_catpv(SV *const sv, const char* ptr)

私が見つけたほとんどの XS チュートリアルでは、次のように使用さsv_catpvs()れています。

と同様sv_catpvnですが、文字列/長さのペアの代わりにリテラル文字列を取ります。

void sv_catpvs(SV* sv, const char* s)

それはあまり役に立たないので、sv_catpvn()次を見てみましょう。

SV にある文字列の末尾に文字列を連結します。はlen、コピーするバイト数を示します。SV に UTF-8 ステータスが設定されている場合、追加されるバイトは有効な UTF-8 である必要があります。「get」マジックは処理しますが、「set」マジックは処理しません。

void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

したがって、sv_catpvnsv_catpv、文字列の長さを別のパラメーターとして受け取ることを除いてsv_catpvsと同じsv_catpvnことを行い、リテラル文字列を受け取ることを除いて と同じです。

sv_catpvと の間に微妙な違いがありますかsv_catpvs、それとも同じことを行うための2つの方法にすぎませんか?

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

c++ - Perl コードから C++ プログラムを呼び出す

サブモジュールを何千万回も呼び出す perl コードを書いています。サブモジュールは計算集約的であり、その実行時間は非常に遅いです。サブモジュールとまったく同じことを行う C++ プログラムを見つけたので、サブモジュールを C++ プログラムに置き換えたいと思います。プログラムに接続するために XS コードを作成する必要があるかどうか疑問に思っています。perlコードで「system」コマンドを使用してC++プログラムを直接呼び出すと、パフォーマンスが大幅に低下しますか? ありがとう!

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

c - perl 関数 newSVpv() を呼び出すと C プログラムがクラッシュし続ける

perl データ構造を使用しようとしています (部分的には C で連想配列をサポートする方法として) が、次のプログラムがクラッシュし続けます。正常にコンパイルされますが、newSVpv() の行でクラッシュします。理由がわからない。

それをコンパイルする行は

私が持っている perl は、Ubuntu 12.04.4 LTS で実行されている 5.14.2 です。

ヒントをありがとう!

更新: gdb トレースを追加しました。質問してくれてありがとう。gdb トレース: