Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes.
Set by lizmat on 24 May 2021.
00:07 reportable6 left 01:09 reportable6 joined 02:09 evalable6 left, linkable6 left 03:11 evalable6 joined 04:24 evalable6 left 05:12 linkable6 joined 06:07 reportable6 left 06:10 reportable6 joined 06:27 evalable6 joined 08:47 linkable6 left, evalable6 left 08:48 evalable6 joined, linkable6 joined
patrickb good * 09:42
m: my int8 $x = 2**7 - 1; say $x; say $x++; say $x 09:43
camelia 127
moon-child m: my int8 $x = 2**7 - 1; say WHAT $x++ 09:44
camelia (Int)
patrickb I'm pondering on this a bit. Without looking at any code, the only way I can imagine the -129 to appear is Raku first doing the increment, and then undoing it again for the return value, but then missing the wrap around. 09:45
moon-child m: my int8 $x = -(2**7); say $x; say $x--; say $x 09:47
camelia -128
moon-child that is consistent 09:48
patrickb Thinking even more, there are probably other ways that could go wrong and have this outcome. Bugs tend to go wrong in ways we don't anticipate. :-p
10:57 evalable6 left, linkable6 left 11:00 evalable6 joined 12:07 reportable6 left 12:58 linkable6 joined 13:09 reportable6 joined 13:46 kjp left
lizmat and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2022/02/07/2022-06-basicly/ 13:55
13:59 discord-raku-bot left, discord-raku-bot joined 14:09 Altai-man joined 14:14 linkable6 left, evalable6 left, linkable6 joined, evalable6 joined 14:59 kjp joined
jnthnwrthngtn MasterDuke: There is no .? operator in NQP 15:21
And that bit of code is NQP
15:22 sena_kun_ joined 15:26 Altai-man left 15:30 Merfont left 15:31 Merfont joined 15:59 discord-raku-bot left 16:00 discord-raku-bot joined 16:29 japhb left 16:31 japhb joined 17:54 kjp left, kjp joined 18:07 reportable6 left 18:26 sena_kun_ left
MasterDuke nqp: class A { has $!a; method a() { try self.b; $!a } }; my int $i := 0; my $a := A.new(a => nqp::time); my $b; my $s := nqp::time; while $i++ < 1_000_000 { $b := $a.a }; say(nqp::div_n(nqp::time - $s, 1000000000e0)); say($b) 19:32
camelia 1.925171353
MasterDuke nqp: class A { has $!a; method a() { if nqp::can(self, "b") { self.b; }; $!a } }; my int $i := 0; my $a := A.new(a => nqp::time); my $b; my $s := nqp::time; while $i++ < 1_000_000 { $b := $a.a }; say(nqp::div_n(nqp::time - $s, 1000000000e0)); say($b)
camelia 0.007804591
MasterDuke it looks like if all we're using the try for is checking the existence of a method, explicitly using nqp::can is quite a bit faster 19:33
lizmat MasterDuke++ # good catch!
19:46 AlexDaniel left, psydroid left
MasterDuke nqp: my $a := $*DOES-NOT-EXIST     # there are a couple of these assignments with a `try` in nqp, but it seems like the `try` isn't necessary (anymore at least) 19:48
camelia ( no output )
[Coke] jvm vs. moar? 19:49
MasterDuke nqp-jvm: my $a := $*DOES-NOT-EXIST     # dunno
camelia sudo: /home/camelia/rakudo-j-inst/bin/nqp-j: command not found
[Coke] oops 19:54
MasterDuke just built it locally, same behavior
[Coke] nqp-js: my $a := $*DOES-NOT-EXIST
camelia sudo: /home/camelia/nqp-js: command not found
MasterDuke the original commits adding some to nqp are 8+ years old, so i doubt JS is a factor 19:55
20:29 AlexDaniel joined
nine m: my int8 $x = 2**7 - 1; say $x++ 20:50
camelia -129
nine But! > ./rakudo-m --optimize=1 -e 'my int8 $x = 2**7 - 1; say $x++'
There is a optimize-post-pre-inc-dec-ops method in the optimizer which rewrites ++ on native int/num into pairs of add_* sub_* ops 20:52
MasterDuke man, seems like there have been an abnormally high number of things recently that have been caused by or just had interactions with static optimizer
21:10 reportable6 joined 21:28 psydroid joined 21:35 psydroid left, AlexDaniel left 21:37 AlexDaniel joined
MasterDuke does `find_symbol` have to throw? could it instead return some not-found sentinel? then all the `try`s in nqp/rakudo just for calling `find_symbol` could be a much cheaper check 21:46
21:46 psydroid joined
nine I would like that 21:48
Would also make breaking on MVM_exception_throw_adhoc more useful :)
And exceptions can really be quite expensive due to the need to keep the backtrace
MasterDuke exactly what's prompted this exploration
Voldenet if you want to just return error codes, maybe consider exceptions without stack trace 21:50
MasterDuke the backstory is i saw a couple fails in t/spec/S07-hyperrace/basics.t, but there are tons of "legitimate" exceptions, so breaking on MVM_exception_throw_adhoc was quite annoying 21:51
nqp::(expire|pass_on|left_us|passed|keel_over|extinguish) instead of nqp::die? 21:52
Voldenet nqp::error 21:55
or something similar
nine Oooh...that optimize-post-pre-inc-dec-ops bug gave me the idea to have the static optimizer lower my uint @a; @a[0]++ to nqp::bindpos_u(@a, 0, nqp::atpos_u(@a, 0) + 1). 21:56
21:56 timo left
nine With this, sieve.raku is down to 1.46s (~1.8s before, 3.38s on master). Perl is at 0.43s 21:57
MasterDuke very cool
nine sieve.raku is from that open issue that a sieve implementation was 40x slower in Raku
None of my changes is anywhere ready for merge (much less this side of the release). But all of them should be on the sane side and possible to finish. 21:59
MasterDuke good deal
istr asking this a long while ago, but is there a reason `$a += 2` is so much slower than `$a = $a + 2`? 22:06