@yary

Thanks for your answer. I've done it too and saw the same kind of result. But then I thought I've read it somewhere that programs are not compiled, only modules. So I must write a module to check it.

But if anyone knows, it would be faster ;-)

Regards,

marcel

On 20-10-2019 22:59, yary wrote:
Seems like we can answer "Is it also true when compiling?" by putting the REPL code into a file!

$ cat order-execution.raku
class Y { method  y (Int $y) {note $y}}
my Y $y .= new;

sub b (Int $i --> Int) { note "about to increment i above $i"; $i + 10 }

say b(10);

say $y.?y(b(11));

say $y.?undef(b(12));

$ perl6 order-execution.raku
about to increment i above 10
20
about to increment i above 11
21
True
about to increment i above 12
Nil

$ perl6 --version
/This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03 //implementing Perl 6.d./

Yes Rakudo is executing the args for something that it doesn't end up calling. Seems overly-eager for a language that is properly lazy by design. I'd be interested in seeing documentation for this order-of-operations if it exists.

By the way I had to look up .? - https://docs.perl6.org/language/operators#index-entry-methodop_.%3F


        methodop |.?| <https://docs.perl6.org/language/operators#___top>

    Safe call operator. |$invocant.?method| calls method |method| on
    |$invocant| if it has a method of such name. Otherwise it returns
    Nil <https://docs.perl6.org/type/Nil>.

    Technically, not a real operator; it's syntax special-cased in the
    compiler.


    -y



On Sun, Oct 20, 2019 at 10:12 AM Marcel Timmerman <mt1...@gmail.com <mailto:mt1...@gmail.com>> wrote:

    Hello all,

    I've a small question where I want to know what is processed first in
    the following line


    $my-object.?"my-method"(some-complex-argument-calculation())


    Will the sub 'some-complex-argument-calculation()' always be run even
    when 'my-method' is not available because the sub must be executed
    before the method is called.


    In the REPL the sub is called despite a method is not defined. Is it
    also true when compiling?


     > class Y { method  y (Int $y) {note $y}}
    (Y)

     > my Y $y .= new
    Y.new

     >sub b (Int $i --> Int) { note "$i"; $i + 10 }
    &b

     > b(10)
    10
    20

     > $y.?y(b(10))
    10
    20
    True

     > $y.?undef(b(10))
    10
    Nil


    Regards
    Marcel

Reply via email to