[DBIx-Class-Devel] Branch cleanup

Peter Rabbitson rabbit+dbic at rabbit.us
Fri Dec 14 15:49:01 GMT 2012


On Fri, Dec 14, 2012 at 10:14:13AM -0500, Brendan Byrd wrote:
> On Fri, Dec 14, 2012 at 9:25 AM, Peter Rabbitson <rabbit+dbic at rabbit.us> wrote:
> >
> > pod/result_class had some stuff you said you will look into incorporating
> > (2nd paragraph in [1]). I pushed the branch back as pod/resultclass_leftovers
> > If you changed your mind (i.e. it does not look as a good idea) - re-delete
> > it.
> 
> Are you talking about the stuff in INITIALIZATION METHODS?  I dunno if
> this is the right form for this stuff.  There's table_class and table
> method descriptions that are pretty much the same as the ones in the
> individual documents.

Not... exactly. But fair enough, we don't really need to document the
travesty, since it is *about* to go away. See *currently* before you
call ->table your source instance does not really exist, and some of the
methods are *not in the symbol table yet*. Hence why at the time I
wrote the blurb in question. Since then I have an almost-working
replacement for the logic which is still backwards compatible (which
makes it hieniously complex, but at least it's absrtracted). This gives
me a kick to revisit and finish it.

> Like I said in a follow-up email, it would probably look better just
> to have a full example as a reference.

Aye, please kill the branch.

> 
> > Btw the use of parent there is silly - parent when used in a project
> > alongside base actually makes things slower, not faster (yes, I did time it).
> > Furthermore once parent.pm shipped base.pm was optimised to work quickly in
> > most common cases. So the current state of parent.pm is like like that of
> > local $_ - cute but useless idea ;)
> 
> See, this is the sh!t that pisses me off about Perl.  First, we are
> told to use @ISA.  Then we are told that it's old and we should use
> "base".  Then we are told that we should use "parent" because base is
> bloated.  Now, we are NOT told that parent is actually slower than
> base.  And frankly, all of this BS shouldn't have started in the first
> place.  Base should have been fixed, and parent should have never been
> created.  For that matter, @ISA should have never been recommended,
> either.
> 
> How the ^@#$ is a Perl programmer supposed to get some work done
> without having a close ear to the #p5p dev team?

This is a direct result of a "meh, this cruft is too complex, I can do
better" attitude. It is not just specific to perl the core, it is
endemic to CPAN as well. 

<rant>

Since this is a pet-peeve of mine, I shall give you one exhaustive 
example for posterity: Take for example a seemingly simple problem - 
testing of exceptions as strings.

Initially we had Test::Exception, which *happened* to appreciate the
potential pitfalls[1], and worked around them. However the workaround
turned out to be buggy, and it took a while to fix - specifically [2].

So now Test::Exception just works - great! Except in the meantime we
got Text::Exception::LessClever [3] motivated as per [4], and then
we got Text::Fatal [5].

T::E::LessClever specifically undid what Test::Exception took care
of and my repeated attempts to take this module off CPAN went
nowhere [6], [7].

Test::Fatal was "cleverer" - it sidestepped the issue by not
providing a throws_ok, just a lives_ok/dies_ok. I asked rjbs twice
to document "if you want throws_ok - use Test::Exception" - he did
not find it to be worth the trouble.

To illustrate - here is a throws_ok that appears to work but
does not:
perl -MTest::Fatal=exception -MCarp=confess -MTest::More=no_plan -e '
  sub throws_ok (&$;$) {
    like(&exception($_[0]), $_[1], $_[2]||() )
  }
  throws_ok { confess "unrelated crap" } qr/expected_exception/, "all seems ok..."
'

Yes, the synopsis of Test::Fatal does work, but have you seen a perl
programmer *not* trying to be clever? :)
perl -MTest::Fatal=exception -MCarp=confess -MTest::More=no_plan -e '
like(
  exception { confess "unrelated crap" },
  qr/expected_exception/,
  "all seems ok..." 
)'

And this is just one module
</rant>

P.S. For bonus points -
Q: Why doesn't Test::Warn support multi-line warnings?
A: Because this is how the author figured he'll work around the stacktrace
problem (tripple facepalm)

Cheers

[1] https://github.com/adrianh/test-exception/commit/23e5d844
[2] https://github.com/adrianh/test-exception/commit/2f6200a0
[3] https://metacpan.org/module/Test::Exception::LessClever
[4] https://metacpan.org/module/Test::Exception::LessClever#WHY-REWRITE-TEST-EXCEPTION
[5] https://metacpan.org/module/Test::Fatal
[6] https://rt.cpan.org/Public/Bug/Display.html?id=61863
[7] https://github.com/exodist/Test-Exception-LessClever/pull/1



More information about the DBIx-Class-Devel mailing list