問題タブ [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 投票する
2 に答える
325 参照

c - Perl API で正規表現をイントロスペクトする方法

私は、正規表現フラグを含む、Perl 正規表現をシリアル化する必要があるいくつかのコードに取り組んでいます。フラグのサブセットのみがサポートされているため、サポートされていないフラグ/uが正規表現オブジェクトに含まれていることを検出する必要があります。

コードの現在のバージョンはこれを行います:

次に、手動でstringchar-by-char を処理してフラグを見つけます。

ここでの問題は、正規表現フラグの文字列化が (Perl 5.14 でだと思いますが) eg(?i-xsm:foo)から(?^i:foo)に変更され、解析が面倒になったことです。

のバージョンを確認しperlたり、両方のケースを処理するパーサーを作成したりすることはできますが、より優れたイントロスペクションの方法が利用可能であることがわかります。

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

c++ - C++呼び出しperlコード-eval_svがスクリプトに引数を渡さない

以下のサンプルプログラムは、引数をPerlスタックにプッシュしてから、「eval_sv」を呼び出します。サンプルのperlステートメントは実行されますが、C++からPerl引数として渡された変数を取得できません。以下のプログラムで私が欠けているものを教えてください

プログラムの出力

こんにちは世界

テスト

100テストが完了しました

この行は$aと$bの値を出力しません

これが私のコードです:

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

c++ - 静的ライブラリと共有ライブラリを混在させる場合のリンカーの依存関係

Linuxでのリンクについて次の質問があります。

Qtを使用するクラスFooがあるとします。このクラスを作成するには、qmakeを使用してMakefileを生成する必要があります。

後で、共有ライブラリであるPerlモジュールにこのクラスFooを使用したいと思います。ただし、それをビルドするには、PerlのMakeMakerを使用して独自のMakefileを生成する必要があります。

私が今やっている方法は、クラスFooを静的ライブラリとしてビルドし、Perlモジュールの共有ライブラリをビルドするときに、Fooの静的ライブラリに対してリンクしていることです。

問題は、Perlモジュールの共有ライブラリを構築するときに、Fooの静的ライブラリがリンクされているすべてのQtライブラリに対してリンクする必要があることです。

したがって、問題は次のとおりです。

  1. このアプローチは意味がありますか?!

  2. Perlモジュールの共有ライブラリを構築するときにすべての依存関係を指定する必要がない方法でFooの静的ライブラリを構築することは可能ですか?(これらすべての依存関係をモジュールのMakefileに追加するのはやや難しいため)

  3. Fooのライブラリが静的ではなく共有されている場合、それは何か違いがありますか?

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

perl - Perl XSコードで疑似ファイルハンドルを操作する方法は?

write(ctx, buffer, count)/read(ctx, buffer, count)インターフェイスを提供するものなら何でも動作できるシリアル化/逆シリアル化ライブラリのXSグルーコードを書き込もうとしています。取得した疑似ファイルハンドルを使用できるようにしたい

したがって、FILE*マッピングの使用は機能しないようです。良いドキュメントが見つからなかったので、遊んで次のXSスニペットにたどり着きました。

それは私が望むことをしているようですが、これはPerlがXSコードのファイルハンドルと見なす可能性のあるすべてを処理する適切な方法ですか?

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

c - サンプル C プログラムは動作するが、既存のマルチスレッド C++ プログラムが Perl 5.16.0 の Perl_sv_upgrade で異常終了する

Perl 5.16.0 では、サンプル C プログラムは動作していますが、既存のマルチスレッド プログラムは で中断していPerl_sv_upgradeます。マルチスレッド プログラムは Perl 5.8.8 で正常に動作します。同じコードは、Perl 5.16.0 を使用する Linux と Solaris で機能します。

svLinux と Hp-PAの引数の値を比較すると、 Hp-PA の場合のsv値ですNULL。誰かが前にこの問題に気づきましたか。私にお知らせください?

デバッグしてsv値を確認した後の Linux スタック トレース:

gdb での中止の分析中に sv 値を確認した後の HP-PA スタック トレース:

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

perl - PerlIO* を返すこの XS コードはなぜリーキーなのですか?

私は、書き込み可能なストリーム インターフェイスとして、ライブラリの一部を Perl コードに公開する XS コードを書き込もうとしています。以下の get_stream関数は、PerlIO オブジェクトを準備して返すコンストラクタであると想定されています。Writeメソッドとメソッドだけが必要だと考えた Closeので、他の関数スロットはすべて空白のままにしました。

このように提供されたインターフェースを使用すると...

...mylib_write関数が呼び出されるので、これまでのところ完全に失敗していません。$fh(debug printf ステートメントを挿入することでこれを確認しました。) しかし、PerlIO オブジェクトがスコープ外になったときに閉じられるようにしたいと思います open。しかし、現時点では、このmylib_close 関数はインタープリターのシャットダウン中にのみ呼び出されます。

直接呼び出すとclose正常に機能しますが、に設定$fhするとundef機能しません。

更新:池上のアドバイスに従って、 と を使用Devel::Peek::Dumpsv_dump たところ、返されたハンドルget_stream関数が を指す「RV」であることがわかりましたSV = PVGV(...)。グロブ ( PVGV) の参照カウンターが 3 に設定されていますが、これは正しくないようです。

追加した

これにより症状が治り ます。ブロックの最後で範囲外になるcloseと、関数が呼び出されます。$fhしかし、私はまだ根本的な問題をよく理解していません。

OUTPUTこれは、セクション用に生成された C コードです。

GV の参照カウントはどのようにして 3 になるのですか?

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

c - perlembed/perlcallの例無制限のメモリ増加-valgrindはリークは不可能だと言っています

すべて。私はしばらくの間これに頭をぶつけてきました...私は基本的にperlembed+perlcallと多かれ少なかれevpsgiからそれを「借りた」例をまとめようとしています。問題は、1000回の反復ごとにサイズが約1MB大きくなることです。これは、長期間有効なプロセスで実行する場合の最大の状況ではありません(これは私が使用しているユースケースです)。

タイトルにあるように、valgrindを使用して実行すると、リークの可能性はないと報告されます。--trace-malloc = yesを指定して実行しましたが、freeは、大量の呼び出しの最後にのみ呼び出されるようです。これはperlのMOかもしれないと理解していますが、少なくともメモリを再利用し、OSがプロセスを終了するまで成長しなかったとしたらいいでしょう。

sv_2mortalのエントリには、バッファが「盗まれる」可能性があることが記載されていますが、コードにsv_2mortalの呼び出しを追加しましたが、変更はありませんでした。

さらに面倒なことはせずに、ここにコードがあります。貨物の扱いはご容赦ください。前もって感謝します!

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

perl - XSコード内の空の参照を祝福しながらリークする

私はこれに相当する XS を実行しようとしています:

この種のコンストラクタは、 として呼び出されたときにそのベースを「自動有効化」するRefTestPP->new()か、 のように指定された参照をベースとして使用することになっていRefTestPP->new({ stuff => 123 });ます。

ただし、説明のつかないリークが発生しています。これが私のRefTest.xsファイルです:

そして、RefTest.tリークを検出するファイル:

(適切なコンパイルに必要な残りのファイルは、によって生成されるデフォルトですh2xs -A -n RefTest)

ポイントは:

  1. コンストラクターにパラメーターとして渡された基本参照は決してリークしません。
  2. XSコードで作成されたベースsv_2mortal(newRV_noinc((SV *) newHV()))もリークしません。
  3. で作成されたベースnewRV_noinc(sv_2mortal((SV *) newHV()))はリークします (そして最終的にはグローバルな破壊中に悪名高いAttempt to free unreferenced scalar: SV 0xdeadbeefメッセージを引き起こします)。

sv_2mortal(newRV_noinc(...))と異なる理由はありますnewRV_noinc(sv_2mortal(...))か?私は単にそれを間違っていますか?

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

perl - Perl XS コードから結ばれたファイルハンドルを使用するにはどうすればよいですか?

次の最小限の例では、ラッパーを定義していますPerlIO_write

を使用しwrite_fhて作成されたファイルハンドルで関数を使用open $fh, '<', \$bufすると、期待どおりに機能します。ただし、次のスニペットを使用して作成された結ばれたファイルハンドルは、PerlIO ハンドルに変換されません:

My::TIEFH必要なメソッドが含まれており、それへの書き込みはprint $fh $str期待どおりに機能します。

XS ランドから結ばれたファイルハンドルに書き込むにはどうすればよいですか?

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

perl - Perl XS ルーチンへの引数として自動有効化されたファイルハンドルをサポート

質問

XS 関数で自動有効化されたファイルハンドル引数をサポートするにはどうすればよいですか?

私はファイル記述子を返す C 関数を XS ラップしています。そのファイル記述子をopen()の方法でperl ファイルハンドル引数として提示したいと思います。例えば、

これまでに行ったこと

現在、XS 関数の上に perl ラッパーを使用しています。

これは Just Fine (tm) で動作しますが、ここでも、実装を完全に XS に移行したいと考えています。

これまでのところsv_2io、 として型マップされた引数を試してみましたSV *が、未定義のスカラーで例外がスローされます。最初の引数をFILE *orPerlIO *オブジェクトにマッピングしようとはしていません。なぜなら、これらのオブジェクトを "fdreopen" する方法がわからないからです。