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

perl - B::Hooks を使用して perl パーサーを操作する方法

私はperlパーサー操作で遊んでみたいと思っています。さまざまなB::Hooksモジュールが人々が使用しているようです。私は考えていた:

  1. XS(まだ)経験のない人が始めるのに最適な場所です。関連するブログ投稿はありますか?

  2. 新しいオペレーターの作成に必要な作業量。たとえば、次のようになります。

    $a~>one~>two~>three

~>のように動作->しますが、呼び出そうとせずundef、代わりに単にundefLHS に戻ります。

ソース フィルターも機能しますが、より深いレベルでパーサーを操作する方法に興味があります。

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

perl - コピーなしのポインタからのPerl SV値

コピーなしでヌル終了文字列から SV 値を作成するにはどうすればよいですか? 似newSVpv(const char*, STRLEN)ていますが、コピーはなく、所有権を Perl に移動します (したがって、Perl はその文字列メモリを解放する必要があります)。巨大なメモリ割り当てとコピーを避けるためにこれが必要です。

次の例を見つけました:

しかし、私は XS の内部について深い知識がなく、いくつか疑問があります。

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

c - Perl XS での 64 ビット整数の使用

64 ビット整数を使用する C 関数を Perl コードに移植したいと考えています。そのために、Perl XS を使用します。

私の問題は、Perl XS 型 (U32、U16、および U8 のみ) に 64 ビット整数がないことです。

では、Perl XS コードで 64 ビット整数を使用する最良の方法は何ですか?

これが私がやりたいことのコード例です:

foo() には C プロトタイプがあります。

perlxs のドキュメントと stackoverflow.com には、役に立つ情報は何も見つかりませんでした。

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

perl - Makefile.PL は、ソース ディレクトリが見つかったかどうかを確認します

ExtUtils::MakeMaker を使用して Makefile.PL を作成しています ソース ディレクトリが存在するかどうかを確認するために、makefile.PL に次の関数を追加しました

perl MakeFile.pl --source=/opt/srcを実行すると、すべて問題ありません

しかし、その後、make / dmakeを実行するとすべてが正常にコンパイルされますが、常に「ディレクトリが見つかりません」というメッセージと「エラーコード255」が表示されます。 .PL 上記のコードを削除すると、コンパイルが成功して終了します。

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

perl - 文字列の Perl XS メモリ処理

次のような XSUB があります。

しかし、これは valgrind の New() でメモリ リークとして表示され、ループで実行すると、常駐メモリが増加し続けます。

これも使用すると、同じことが得られます。

次のようにして、リークとメモリサイズの増加を防ぐことができます。

しかし、このソリューションの問題は、-Werror でコンパイルすると、次の警告/エラーが発生することです。

c ファイルは、未使用の RETVAL でビルドされます。

では、XS で割り当てられた文字列の戻りを処理するより良い方法はありますか? RETVAL を使用して文字列を返し、メモリを解放する方法はありますか? 助けていただければ幸いです。

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

perl - Perl ビルド スクリプトでの LibreSSL のテスト

Net::NSCAng::Client少し前にリリースしましたが、OpenBSD で多くのテストの失敗が発生しています。その理由は、NSCAng プロトコルが事前共有鍵モード (RFC4279) で OpenSSL を使用するためです。これは、LibreSSL (現在の OpenBSD のデフォルト) の人々が切り出したものです。しかし、彼らはこれを最も不透明な方法で行うことに必死だったようです。インクルード ファイルにはすべての関数が定義されており、共有ライブラリには対応するシンボルが欠けているだけなので、コンパイルは正常に機能しますが、テストは失敗します。

OpenBSD には eopenssl と呼ばれる互換パッケージがあり、最初に Makefile.PL でこれをテストすることにより (を使用して) 、互換ライブラリがインストールされている場合ExtUtils::PkgConfigに動作させることができます。そうでない場合でも、物事は失敗します。

CPP シンボル OPENSSL_NO_PSK を確認できましたが、インクルードは常に LibreSSL から取得されるため、eopenssl とのリンクが正常に機能する場合でも、これは失敗します。私が残した唯一のアイデアは、autoconf が行うように、コンパイル段階の一部としてテスト プログラムを実行することです。ExtUtils::MakeMakerそれは(または他の何か-必要に応じてビルドシステムを切り替えてもかまいません)でも可能ですか?

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

perl - 「…/auto/List/Util/Util.so: undefined symbol: PL_stack_sp at …/XSLoader.pm」は、Travis CI で CGI::Test _and_ を使用してテスト スイートを実行している場合のみ

CGI::Github::Webhookと呼ばれる Perl モジュールがあり、そのテスト スイートは今のところブランチ master の Travis CI で正常に動作します。しかし、これは CGI スクリプトを作成するためのモジュールであるため、CGI::Testでテストしたいと考えていました。

しかし、ブランチで実行されたすべての Travis CI はcgi-testこれまでのところ失敗しています。Perl 5.24 以降での実行を除いて、失敗したすべての実行には次の行が含まれていましたが、パス内の Perl バージョン番号が異なっていました。

Perl 5.22 での現在の最新の実行からの例。Perl 5.24 の症状は多かれ少なかれ同じですが、最初のエラー メッセージの表現が異なっているようです。

ここで何がうまくいかないのか誰にもわかりませんか?これを修正する機会さえありますか?私にはバグのように見えます。しかし、どのモジュールで?CGI-TestScalar-List-Utils、またはXSLoaderに対する一致するバグ レポートは見つかりませんでしたが、新しい問題ではないように思われるため、そのような問題は既に報告されていると予想していました。(最初に気づいたのは数ヶ月前)

ただし、Debian Unstable (現在の Perl バージョン 5.22) でシステム提供の Perl および Perl モジュールを使用してそのテスト スイートを実行しても失敗しないため、ローカルで問題を実際に再現することはできません。