Recently in Grants Category

Please join me in welcoming John SJ Anderson (genehack) as the newest voting member of The Perl Foundation's Grants Committee. John has helped organize several recent YAPCs, given talks and training at YAPCs, and maintains several modules on CPAN.

Additionally, as Makoto Nozaki is transitioning to the secretary of the TPF Board, he is vacating the position of GC Secretary, and I have been selected to to fill the role.

My apologies for the delays in the transition. Look for a posting shortly about the March call for proposals.

This is a monthly report by Dave Mitchell on his grant under Perl 5 Core Maintenance Fund. We thank the TPF sponsors to make this grant possible.

The main things I did last month were:

Firstly, fixing various issues with scopes in regexes. In particular,
(RT #126697), code blocks sometimes failed to undo localisations when
backtracking. For example the $s below wasn't always being restored when
the B part of the match failed and it backtracked to try another A - where
A represents something complex like (\w+\s+)* which can match in multiple

    /A(?{ local $s = ...})B/

As part of that work, non-greedy matching of complex sub-expressions with
captures and repeated backtracking was made more efficient under some
circumstances; for example the following now runs about 25% faster:

    $s = ("a" x 1000);
    $s =~ /^(?:(.)(.))*?[XY]/ for 1..10_000;

Secondly, improving 't/TEST -deparse'.

The -deparse option to t/TEST causes it to run all the core's test
scripts, but after running them through the deparser first. Many of these
modified scripts are currently known to fail, and there is an exclusion
file, Porting/deparse-skips.txt, which is supposed to list the known
failures. However, over time, new failures have appeared which are not in
the exclusion list. Last August I did some work on and managed
to reduce some of the expected and unexpected failures, but since then
more failures have crept in.

My recent work includes: modifying t/TEST so that it distinguishes
between expected failures and unexpected passes, and warning of unknown
files in Porting/deparse-skips.txt; purging Porting/deparse-skips.txt to
account for files that have been renamed or are no longer in the core, and
to reflect the current state of things; and fixing to:
    * better handle 'BEGIN { use_ok() }';
    * better handle 'BEGIN { require expr }' (as opposed to require Bareword);
    * deparse lexical var attributes, e.g. 'my $foo :bar(baz)';
    * avoid a 'deep recursion' warning;
    * handle an escaped literal tab char in a pattern, e.g
        /.....\ ..../x where the whitespace char following the backslash is
        actually a tab; previously the deparse failed to emit the backslash;
    * handle declarations with multiple lexical vars within a pattern code
      block, e.g. /(?{ my ($x, $y) = @a; })/

Because we're currently in code freeze, this as been pushed as
smoke-me/davem/deparse and will be merged in 5.27.x.

Thirdly, reviewing and fixing tickets in the security queue. There's quite
a lot of tickets in the security queue due to fuzzing, where if the fuzzer
detects a use-after-free or buffer overrun for example, the reporter
submits it to the security queue rather than the normal queue. Once
examined, 95% of the time it will be found to be harmless or
non-exploitable, but until someone has assessed and fixed it, it lingers
as an open security ticket.

This is a monthly report by Tony Cook on his grant under Perl 5 Core Maintenance Fund. We thank the TPF sponsors to make this grant possible.

Approximately 38 tickets were reviewed, and 8 patches were

[Hours]         [Activity]
 13.82          #122490 (sec) more merge conflicts
                #122490 (sec) more merge conflicts, track down warning
                #122490 (sec) track down warning sources, start merging
                test changes
                #122490 (sec) more test merging, testing, debugging
                #122490 (sec) debugging
                #122490 (sec) debugging
  0.97          #126228 build testing, apply to blead
 16.08          #127663 testing, apply hash seed env suppression patch,
                back to in-place changes
                #127663 work on chdir test, testing, debugging, make
                mg_freeext() API and fix docs
                #127663 cleanup, threads handling, threads test
                #127663 more threads testing, try to make it fail with
                #127663 more try to make it fail with fork and succeed,
                work on fix, code polish
                #127663 hoist some work back up, testing
                #127663 uncombine thread/fork child handling which I
                combined by accident, work on more tests and find a couple
                of cleanup issues
                #127663 more tests
                #127663 post patch to ticket
  0.22          #128528 (sec) review and comment
  0.88          #128998 track down when it was fixed, ticket management
  0.30          #129012 make public, comment and close
  1.88          #129024 review, make public, check fix backports to 5.24,
                non-trivial backport to 5.22, comment
  1.30          #129125 check, testing, apply to blead
  1.65          #129149 apply patch, test #130557 case, testing, make
                public apply to blead, comment on #130557
  0.08          #129187 check and merge into #129149
  0.95          #129190 rebase with some conflicts, testing, make public,
                apply to blead
  0.17          #129199 make public, comment and close
  2.62          #129274 (sec) try to find an alternative attack
                #129274 more trying to break it, write regression test,
                testing, make public, apply to blead
  2.12          #129292 review code, debugging, make public and comment
  1.77          #129298 review patches, research, consider whether changes
                improve perl
                #129298 more consideration, ask khw
  4.32          #129340 (sec) review code, think about solutions
                #129340 (sec) work on a solution, testing
                #129340 (sec) write a regression test, testing
                #129340 (sec) suggested changes, testing
                #129340 (sec) research, comment with updated patch
  0.50          #129342 (sec) test provided patch, create a test case and
  0.45          #129377 (sec) review patch, look for similar issues,
  1.32          #129840 (sec) review, testing
                #129840 get it to test, merge into 129377
  0.40          #129848 review and make public
  1.53          #129861 (sec) debugging
  0.42          #129887 (sec) review and comment
  0.82          #129963 research, make public and link to stack-not-
                refcounted meta ticket
  0.92          #129975 debugging, make public and link to stack-not-
                refcounted meta ticket
  0.28          #130100 make public and point at list discussion on
  0.73          #130256 debugging, make public and link to stack-not-
                refcounted meta ticket
  1.67          #130262 apply patch with noise, test #130558 case,
                testing, make public, push to blead, comment on #130558
  0.18          #130321 (sec) debugging
  0.68          #130504 review, testing, apply to blead
  0.43          #130560 comment
  0.90          #130567 reproduce, suspect 94749a5ed was bad, ask khw on
                #130567 irc discussion
  1.35          #130569 (sec) comment
  2.85          #130578 debugging
                #130578 debugging, comment
  0.58          #130591 review discussion and comment
  0.33          #130614 research and comment
  1.57          #130635 review changes, check memory use, testing, comment
                #130635 comment
  1.55          #130675 debugging, #p5p discussion
                #130675 debugging, #p5p comment, ticket comment on #130679
  0.42          comment on deprecations thread
 69.01 hours total

Dave Mitchell writes:

There are two main things I did in December (along with the usual
day-to-day stuff).

First I sorted out infrastructure for ops which are called in boolean

Currently PADHV and RV2HV ops are flagged specially if they are not only
used in scalar context, but where the result they return will only
ever be used as a boolean value; for example 'if (%h) {...}'

This was originally done since a hash in scalar context returned a bucket
usage ratio, which became expensive to calculate when we no longer
stored the bucket occupancy count with each hash.

In 5.25.x we've changed it so that in scalar context it now only returns a
key count, which is always known and doesn't need to be calculated on the
fly. But it can still be quicker to return just a boolean value in
these cases rather than an integer.

My work took this special-case boolean context detection code in the
peephole optimiser, and improved it so that:

 * it fixes a bunch of bugs - e.g. if (!%h) {...} wasn't recognised as
 * it expands the number of situations that are recognised as boolean
   context, such as grep:  e.g. grep %$_, @AoH;
 * it adds a reasonably comprehensive set of tests for checking that ops
   have been flagged as boolean under various boolean scenarios;
 * it allows other ops to be easily added to the boolean detection in the
   optimiser; and to the test suite.

I've also tweaked RV2HV so that in the negative case it just returns
&PL_sv_no rather than sv_2mortal(newSViv(0)))

I've also pushed a branch davem/boolref2 that allows the ref() function to
be optimised in boolean context; so 'if (ref $r) {...}' doesn't have to
generate a temporary string like "Foo=ARRAY(0xc8afd8)". I intend to merge
this after 5.26, and maybe booleanise a few more ops too (like length()).

The other notable thing I did last month was to change the output format
produced by the op_dump() function (and perl -Dx). It now displays an
ASCII-art tree structure, and more low-level information is displayed,
such as each op's address and class.

      3:21 RT #129285 Perl_gv_fullname4 assertion
      0:36 RT #130617 Perl_rpeep: Assertion ....
      0:55 RT #130621 Segfault in Perl_vwarner (util.c:2051)
      0:49 RT #130648 S_pat_upgrade_to_utf8 Assertion ...
      1:17 RT #130651] regcomp.c:6881 Assertion `expr' failed
      1:19 RT #130661 perly.c:341: Perl_yyparse: Assertion failed
      1:03 RT #130667 Perl_sv_clear Assertion `SvTYPE(sv) != ...
      0:52 RT #130669 Perl_sv_2nv_flags: Assertion `SvTYPE(sv) != ...
      5:18 [perl #130198] chop(@x =~ tr///)
      3:00 [perl #130584] Slow pos function in taint mode with \G
     22:53 [perl #78288] ref and other ops are inefficient in boolean context
     12:08 change output format of op_dump()
      3:20 factor out common optree finalisation code
      4:30 general housekeeping
     10:41 process p5p mailbox
      2:51 review security tickets
     74:53 TOTAL (HH::MM)

 172.3 weeks
2376.7 total hours
  13.8 average hours per week

There are 423 hours left on the grant

The Grants Committee has concluded the voting of the January round.

Proposal in this round

ProposerRequested AmountLink to the Details
Standardization, Test Coverage, and Documentation of Perl 6 I/O RoutinesUSD 999Proposal

Voting Results

Standardization, Test Coverage, and Documentation of Perl 6 I/O Routines7035 = 5 + 5 + 5 + 5 + 5 + 5 + 5 + 0 + 0

Definition of the score is found in 3.2 of the rules.


We approve this grant.

This is an area that needs work in Rakudo Perl 6, and Zoffix has a history of delivering tangible improvements to the compiler and the infrastructure in the community.

Our next round will be in March. You can submit proposals now. If you want to help funding, one of the options is Amazon Smile. We appreciate all the donors which made the grant program possible. Also see the press releases for the recent major donations.

Dave Mitchell recently requested an extension of his Maintaining Perl 5 grant.

I'm pleased to announce that the Board of Directors approved extension of another $20,000.

I would like to thank the community members who took time to comment on this grant extension request and our sponsors who made funding the grant possible through our Perl 5 Core Maintenance Fund.

About TPF

The Perl Foundation - supporting the Perl community since 2000. Find out more at

About this Archive

This page is an archive of recent entries in the Grants category.

Conferences is the previous category.

GSoC is the next category.

Find recent content on the main index or look in the archives to find all content.


OpenID accepted here Learn more about OpenID
Powered by Movable Type 6.2.2