問題タブ [perl-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.
perl - XS モジュールをゼロから作成する最新の方法は何ですか?
Perl 用の XS モジュールを作成する必要があります。今日、h2xs はほとんど非推奨になっていると理解しています。今日、XS モジュールを開始するための推奨される方法は何ですか? Module::Starter を見ましたが、純粋な Perl モジュールのみを処理します。
perl - XS を Perl 5.10 でコンパイルすると、「undefined reference」エラーが発生するのはなぜですか?
Perl XS を使用して Perl に変換する C++ オブジェクトがあります。このプロセスは、Perl 5.8.5 および 5.8.7 で正常に機能します。しかし、Perl 5.10.0 を使用しようとするとすぐに、多くのコンパイル エラーが発生します。それらのほとんどは、これらの線に沿っています。
これは、何らかの理由で Perl XS が適切にリンクされていないことを示しています。5.8.5 から v5.8.7 に移行したとき、バージョンを変更して再度作成する必要がありました。
任意のヒント?
perl - XS で Perl コンストラクターを作成するにはどうすればよいですか?
Perl 用の新しい XS モジュールを作成しようとしています。XS モジュールの記述手順に従ってテストしたところ、正常に動作しています。
new
XSのメソッドの書き方がわかりません
というパッケージがありますAgent
。私はこのようなことができるようにしたい:
c - XS モジュールと perl ビルドの間の構造定義の競合
OpenSolaris ($^O eq 'solaris'、バージョン 2.11) で、XPGv4v2/Single Unix Spec を使用する XS モジュールを構築しようとしています。の理解struct msghdr
、特に「補助データ」の調査について。
ただし、ネイティブ perl (v5.8.4) は必要な定義なしでビルドされているため、struct msghdr
私の XS ファイル内に表示されるのは古い BSD の種類です::
"正しい" #define
s ( _XOPEN_SOURCE
and _XOPEN_SOURCE_EXTENDED
) を指定すると、ビルドが壊れます。これは、perl が予期していた非常に多くのことが変更されるためです。
XS モジュールに構造定義を使用させるエレガントな方法はありますか?
perl - Perl XS で C 構造体にメンバーがあるかどうかを確認するにはどうすればよいですか?
ExtUtils::*
Ruby のor Module::Build
(または他の) 類似物はありmkmf.have_struct_member
ますか?
私は(ヒント/ファイルのように)次のようなことをしたいと思います:
Config.pm
私が探している特定の情報を追跡しておらず、ExtUtils::FindFunctions
ここではあまり適切ではないようです...
perl - 関数へのすべての呼び出しを一意に識別するにはどうすればよいですか?
caller
関数が呼び出されたファイル名と行番号がわかりますが、文字またはバイトのオフセットを取得するにはどうすればよいですか? そのために XS にドロップダウンしなければならない場合でも問題ありません (関数はいずれにせよ XS になる可能性があります)。
私がやろうとしているのは、関数へのすべての呼び出しを一意に識別することです。そのため、ソース内の場所よりも優れた方法があれば、他のルートを受け入れることができます。
基本的な意図はeach
、同じハッシュを安全に反復できる関数を作成することです。これは、私が考えているものに似た純粋な Perl バージョンです。
perl - XS プロジェクトの構築に役立つツールは何ですか?
私は最近、perlxstutを使用して XS の学習を開始しました。チュートリアルでは、 ExtUtils::MakeMakerベースのプロジェクトを作成するために、古いh2xsツールを使用してモジュールを作成することを提案しています。ただし、純粋な Perl プロジェクトの場合、 h2xs/EUMM はModule::Install、Module::BuildまたはDist::Zillaを支持して長い間好まれていませんでした。
XS プロジェクトを作成するためのより現代的な方法はありますか? Module::Starterは XS プロジェクトを作成できますか? Module::Build または Dist::Zilla は XS プロジェクトをビルドできますか? 彼らのポッドページはこの問題について沈黙しています。
反対に、h2xs/EUMM で平準化された批判は XS プロジェクトにも当てはまりますか? とにかく C コンパイラが必要な場合、make ツールも要求するのは理にかなっていますか?
編集:この質問は、プロジェクトの作成に関する私の質問に答えています。ビルドについて知りたいのですが、EUMM が唯一のオプションですか、それとも Module::Build と Dist::Zilla も XS をビルドできますか?
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ランタイムに報告する方法は他にありますか?正しく設定する方法は$@
?
c - 組み込みCアプリケーション内でPerlからC関数を呼び出す
わかりました。これは非常に興味深い質問であり、これを行う簡単な方法はないかもしれませんが、Perlの変更が私の根本的な答えであると判断する前に、これを捨てるだろうと考えました。
だから私は組み込みの方法でPerlスクリプトを呼び出すCアプリケーションを持っています。これはすべてうまく機能し、ダンディです。情報を出し入れできるのはとても素晴らしいことです。しかし、今度は私の次の征服に移ります。埋め込まれたスクリプトが、元々それを呼び出したCアプリケーション内のいくつかの関数を呼び出せるようにする必要があります。
XSUBでは外部ライブラリである必要があるため、これは重要です。しかし、外部ライブラリにはしたくありません。C関数への直接呼び出しにしたいと思います。たぶんこれはXSUBを介して行うことができ、私はそれを読んで間違って理解してきました。
これが外部ライブラリになれない理由は、アプリケーション内でのみ作成/保存されたデータに依存しているためです。
perl - XS コードを Moose クラス定義ファイルに統合する
C ライブラリ内の関数へのアクセスを提供する XS ベースの Perl モジュールを作成しました。ここでは MyLib_XS と呼びましょう。Moose クラスでメソッドを定義するためにこれらの関数を使用して、ここから先に進みたいと思います。もちろん、use MyLib_XS;
Moose クラス定義モジュール内だけで、クラス メソッド内の関数を呼び出すことができます。すべてが機能します。しかし、もっとうまくできるかどうか知りたい
私の .xs ファイルを Moose ベースのクラスと統合し、中間モジュール MyLib_XS.pm を使用せずにクラス内のメソッドから XS ファイルに実装された関数を呼び出すことは可能ですか?
これを行うCPAN上のモジュールへのポインタも素晴らしいでしょう。ありがとうございました