実際のソートルーチンを変更してPerlを実験したいと思います。 grep
を元にして、名前パターンがsort
であるファイルを検索しようとしましたが、関連するものが見つかりませんでした。Perlソースコードでは、ソートルーチンの実装はどこにありますか?
ソートの実装がどのファイルに含まれているかを教えてください。
実際のソートルーチンを変更してPerlを実験したいと思います。 grep
を元にして、名前パターンがsort
であるファイルを検索しようとしましたが、関連するものが見つかりませんでした。Perlソースコードでは、ソートルーチンの実装はどこにありますか?
ソートの実装がどのファイルに含まれているかを教えてください。
あなたはBを使用してコードによって生成されたオペコードを見つけることができます::簡潔に:
$ perl -MO=Concise -e'sort'
5 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 1 -e:1) v:{ ->3
4 <@> sort vK ->5
3 <0> pushmark s ->4
-e syntax OK
sort
オペレータのオペコードの名前はsort
です。 (これは、オペコードの名前がオペレータの名前と同じでない場合は、明らかに最も有用です;例えば、スカラ代入演算子=
のオペコードはsassign
です)。
オペコードはさまざまです。 cファイルをPerlソースディレクトリの最上位に配置します。 pp_sort.c
:sort
オペコードは実際に独自のファイルに住んで、この場合は
grep pp_sort /path/to/perl/source/*.c
:オペコードfoo
の定義は、通常*次のようになります。だから、
PP(pp_foo) {
// implementation
}
。
※いくつかの例外があります。 opcode.hにこのラインで示されるように、例えばkeys
オペコードは実際に、Perl_do_kv
に実装されています。
#define Perl_pp_keys Perl_do_kv
あなたは所与のオペコードのためpp_foo
を見つけることができない場合は、opcode.hに確認してください。
私はhttps://github.com/Perl/perl5/search?q=sortに行きました。
最初の検索ヒットはsort.pm
で、ヒントのようでした。そのモジュールは検索自体を定義していないので、途中で助けてくれるキーワードを探しました。私は_quicksort
と_mergesort
を選びました。
https://github.com/Perl/perl5/search?q=_quicksortは、関連する結果を表示していませんでしたので、私はちょうどquicksort
を試しました。
それは私にpp_sort.c
を与え、そこに行く。ほぼ2000行の並べ替えでいっぱいです。
Perlの内部構造を変更する予定がある場合は、Perlが内部的にどのように動作するかについてかなりの量を知る必要があります。まず、perlhack
のマンページを読んで、いくつかの(かなり長い!)マニュアルページへのポインタに従ってください。
ありがとうございます!見てみましょう。 – coderodde
*ソートする方法を男に教えてください、彼らは自分自身を分類するでしょう - 外令* – reinierpost