This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Data::Dumper: refactor XS implementation
authorAaron Crane <arc@cpan.org>
Tue, 8 Dec 2015 11:31:43 +0000 (11:31 +0000)
committerAaron Crane <arc@cpan.org>
Tue, 15 Dec 2015 23:55:34 +0000 (23:55 +0000)
commit920781c4c51c3b89db8e989bd1be78e1b3d38274
tree3c09873ceb80b83d1103e8dc94bf384b5feb4284
parent273b29a4563651754921c31131406bdba9175f46
Data::Dumper: refactor XS implementation

There are over a dozen variables that control the details of how Data::Dumper
generates output, almost all of which remain unchanged while dumping a single
set of objects. The previous implementation passed each of those control
variables as a separate argument to the recursive DD_dump() function, which
meant that DD_dump() took over two dozen parameters. This is already far
beyond what seems reasonable, and the problem will only get worse in future
as Data::Dumper acquires more features.

This refactoring therefore extracts most of those style variables into a
struct, and passes it to the recursive calls as a pointer-to-const. This is
clearly of huge benefit for maintainability. In addition, it seems plausible
that it will make dumping slightly faster, especially for deeply-nested data
structures: requiring every recursive call to have its own copy of
them on the stack meant that every call frame would take up more than a
single cache line of stack space even on 32-bit platforms. Putting them all
in a single struct means that this space is used only once per dump instead.

"If you have a procedure with 10 parameters, you probably missed some."
—Alan Perlis, Epigrams on Programming, ACM SIGPLAN Notices 17 (9), September
1982, pp. 7–13. http://pu.inf.uni-tuebingen.de/users/klaeren/epigrams.html
dist/Data-Dumper/Dumper.pm
dist/Data-Dumper/Dumper.xs