作者: Bruce.
日時: 2007/9/21(12:21)
Bruce.です。

閑舎 writes:

> "Bruce." <kbk@...> さん wrote.
> 
> > いえいえ、こういう機会でもないとソース眺めたりはしないですから。
> > PHPのソースも大概な読みづらさですが、Perlに比べればまだまだ(笑)
> 
> そうなんですか。Perl は開発歴が長く、いろんな人が関与し、スタイルが統一
> されてないからそうなるんですかね。それとも、Perl はスクリプトも病的で読
> みにくいとされるけど、ソースも……という、要するに作者さんのコーディング
> ポリシーみたいなものに由来するんでしょうか?

いえ、Perlが読みにくいのは、コーディングスタイルがどうのとか言う
問題ではなく、Cのマクロを使いまくっているのでソースの字面で処理を
追いかけるのがとても面倒ということによります。

PerlIOが入った辺りで関数ポインタも駆使するようになっているので
余計に…(笑)

たとえば組み込み関数の chomp がどう実装されているかというのを
知りたいと思ったとすると、

doop.c:1012:Perl_do_chomp(pTHX_ register SV *sv)

実際はこれが本体になるわけですが、

embed.h:214:#define do_chomp		Perl_do_chomp
embed.h:1780:#define pp_chomp		Perl_pp_chomp
embed.h:2016:#define pp_schomp		Perl_pp_schomp
embed.h:2270:#define do_chomp(a)		Perl_do_chomp(aTHX_ a)
embed.h:3822:#define pp_chomp()		Perl_pp_chomp(aTHX)
embed.h:4058:#define pp_schomp()		Perl_pp_schomp(aTHX)
lib/CORE/embed.h:214:#define do_chomp		Perl_do_chomp
lib/CORE/embed.h:1780:#define pp_chomp		Perl_pp_chomp
lib/CORE/embed.h:2016:#define pp_schomp		Perl_pp_schomp
lib/CORE/embed.h:2270:#define do_chomp(a)		Perl_do_chomp(aTHX_ a)
lib/CORE/embed.h:3822:#define pp_chomp()		Perl_pp_chomp(aTHX)
lib/CORE/embed.h:4058:#define pp_schomp()		Perl_pp_schomp(aTHX)

lib/CORE/opcode.h:797:	MEMBER_TO_FPTR(Perl_pp_chomp),
lib/CORE/opcode.h:798:	MEMBER_TO_FPTR(Perl_pp_schomp),
opcode.h:797:	MEMBER_TO_FPTR(Perl_pp_chomp),
opcode.h:798:	MEMBER_TO_FPTR(Perl_pp_schomp),

pp.c:722:PP(pp_schomp)
pp.c:725:    SETi(do_chomp(TOPs));
pp.c:729:PP(pp_chomp)
pp.c:735:	count += do_chomp(POPs);
pp_proto.h:88:PERL_PPDEF(Perl_pp_chomp)
pp_proto.h:89:PERL_PPDEF(Perl_pp_schomp)


のようなマクロやマクロを使った定義が複数あるのでどれが該当するのか
辿っていかなければならないわけです。


Perlのメンテナは尊敬に値しますよ。ええ。

いじょ。