# New Ticket Created by  David Warring 
# Please include the string:  [perl #126520]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=126520 >


Consider the following, which should be a simple and conventional use of Perl 6 
Proxy objects:

class C {
    has $!foo;
    method foo is rw {
        say "foo";
        $!foo;
    }

    has $!bar;
    method bar is rw {
        Proxy.new(
            say "proxy new";
            FETCH => sub ($) {
                say "bar fetch";
                $!bar
            },
            STORE => sub ($, $v) {
                say "bar store";
                $!bar = $v;
            },
            );
    }
}

my $c = C.new;
say "FETCHES";
$c.foo;
$c.bar;
say "STORES";
$c.foo++;
$c.bar++;

OUTPUT:

FETCHES
foo
proxy new
bar fetch
bar fetch
bar fetch
STORES
foo
proxy new
bar fetch
bar fetch
bar fetch
bar fetch
bar fetch
bar fetch
bar fetch
bar store

===================
In the above example, the bar proxy is called 10x whereas foo is called twice.

In particular, the proxy FETCH is called 7X to do a simple increment.

I'm raising this because this is the 'hot path' in projects such as 
https://github.com/p6-pdf/perl6-PDF-Tools.

Would like to see this reduced, if possible.

Reply via email to