Geth nqp: 83ed559f53 | (Zoffix Znet)++ (committed using GitHub Web editor) | tools/build/install-jvm-runner.pl.in
Bump Xmx for nqp-j by another 300MB

It still crashes with out of mem on occasion and 1.2GB is about what it takes to compile MoarVM version rakudo
00:11
MasterDuke Zoffix: ugh, that's what i get for hand-editing the wrong version. added the ` = $*CWD` back in and now it builds and passes a spectest 00:18
Zoffix But does it blend? :) 00:19
Is it slower than before?
MasterDuke haven't tested IO::Path.new yet. tested some similar made up examples, i can show here 00:20
m: sub f(Str:D $a) { "a = $a" }; my $s; for ^1_000_000 { $s = f($_.Str) }; say $s; say now - INIT now 00:21
camelia a = 999999
0.65999187
MasterDuke m: sub f(Cool $a) { "a = $a.Str()" }; my $s; for ^1_000_000 { $s = f($_) }; say $s; say now - INIT now
camelia a = 999999
1.289085959
MasterDuke m: sub f(Str(Cool) $a) { "a = $a" }; my $s; for ^1_000_000 { $s = f($_) }; say $s; say now - INIT now
camelia a = 999999
1.009371
Zoffix Looking at QAST, the coercer gotta be slower, because it first checks for Any type and then does a second check for Str
Would've thought doing Str check first and coercing only if it ain't a Str would've made more sense, 'cause right now you can only coerce from ancestor types, not just from arbitrary types (and you do an extra checks for things that don't need coercing) 00:22
m: sub f(Str $a) { "a = $a" }; my $s; for ^1_000_000 { $s = f($_.Str); Nil }; say $s; say now - INIT now 00:23
camelia a = 999999
0.7226964
Zoffix m: sub f(Str:D $a) { "a = $a" }; my $s; for ^1_000_000 { $s = f($_.Str); Nil }; say $s; say now - INIT now
camelia a = 999999
0.84479403
MasterDuke huh, where does coercing actually happen? think that's an optimization that'll work everywhere? 00:25
Zoffix Well, I'm looking at the fast-past binder, in which case the QAST is right in the param setting code there's also the slow-path binder in BOOTSTRAP.nqp somewhere (method bind or bind-one or something) 00:32
Well, it'll work everywhere, but it changes semantics of how coercers work... so...
(and the fast-past bindder is genned in Actions 00:42
)
ffs... keep getting "Unhandled exception: java.lang.OutOfMemoryError: Java heap space" :| 00:47
Oh, and to make the code go through fast or slow binder just tack on a bunch of nested multies 00:58
-> $ {} # fast-path binder; -> $, :foo(:bar(:ber(:$mer))) {} # slow-path binder
Alright. I reached the point where I'm giving up. 01:11
You ++ed me too early :)
AlexDaniel Zoffix-- 01:33
alright alright, I'm kidding of course :)
Zoffix :)
Geth rakudo: MasterDuke17++ created pull request #1766:
Condense three IO::Path.new multis down to one...
04:02
nine .tell lizmat github.com/ugexe/zef/issues/241#is...-383823558 06:54
yoleaux nine: I'll pass your message to lizmat.
lizmat Files=1239, Tests=76308, 319 wallclock secs (15.73 usr 5.36 sys + 2197.99 cusr 219.21 csys = 2438.29 CPU) 07:38
[Tux] Rakudo version 2018.03-263-gd4a6b92f3 - MoarVM version 2018.03-128-g0ad859add
csv-ip5xs0.888 - 1.007
csv-ip5xs-208.846 - 9.263
csv-parser36.586 - 39.136
csv-test-xs-200.447 - 0.452
test9.562 - 10.173
test-t2.535 - 2.625
test-t --race1.033 - 1.080
test-t-2045.144 - 48.426
test-t-20 --race16.596 - 18.452
08:14
pmurias .tell Zoffix are you still working on the jvm backend fix or should I look into it? 08:56
yoleaux 01:18Z <Zoffix> pmurias: did some initial debugging for JVM issue, but giving up. Maybe it'll help you fix the problem: github.com/rakudo/rakudo/issues/17...-383771805
pmurias: I'll pass your message to Zoffix.
pmurias .tell Zoffix gcx.Associative isn't set ever 08:57
yoleaux pmurias: I'll pass your message to Zoffix.
pmurias is there a way to passed named arguments to traits? 09:36
lizmat pmurias: you can pass a hash to a trait 09:41
m: sub trait_mod:<is>(Variable:D $, :$foo!) { dd $foo }; my $a is foo( a => 42, b => 666) # or a list of paur 09:44
camelia List $foo = $(:a(42), :b(666))
lizmat *pairs
pmurias lizmat: thanks 09:47
and any ways of passing named arguments to infix or prefix ops? 09:51
jnthn Yes, adverb syntax 09:53
m: multi infix:<+>($a, $b, :$double!) { 2 * ($a + $b) }; say 1 + 1 :double 09:54
camelia Unexpected named argument 'double' passed
in block <unit> at <tmp> line 1
jnthn m: multi infix:<+>($a, $b, :$double!) { 2 * ($a + $b) }; say (1 + 1 :double)
camelia Unexpected named argument 'double' passed
in block <unit> at <tmp> line 1
jnthn oh
m: multi infix:<+>(Int $a, Int $b, :$double!) { 2 * ($a + $b) }; say (1 + 1 :double)
camelia 4
jnthn There we go
That's for infix ops, to be clear 09:55
For prefix, no, don't think there's any way
Nor postfix
Oh...uh...or is there
pmurias jnthn: it seems *% in signatures for stuff that is called before Hash is turned into Associative is blowing up on the JVM backend
jnthn Ah yeah, I'm getting confused. Adverbs are parsed as fake infixes, but they can apply to any operator 09:56
pmurias jnthn: does declaring Associative during the bootstrap seem like a sane solution? 09:58
jnthn I don't think we create any roles during BOOTSTRAP, I think it's not very sane. But we could I guess just do a `my class Hash does Associative { ... }` a bit earlier? 10:01
Kaiepi pufferbot now supports Inline::Perl5 for make stresstest! 11:08
might help if i remember to put it in a screen though 11:09
Geth rakudo: 1ae4d2d426 | pmurias++ | 4 files
[jvm] Skip the type check for Associative for slurpy names when compiling the setting

This makes the setting compile
12:28
pmurias the JVM backend should now compile the setting
jnthn pmurias++ 12:30
Geth rakudo: f0522df011 | (Zoffix Znet)++ (committed using GitHub Web editor) | README.md
List setting JAVA_OPTS as an alternative to avoid out-of-mem error

  `export JAVA_OPTS="-Xmx51200000000"` does the trick for me to
get rid of that error that's present even with the runner updated to 1.2GB
12:56
Zoffix pmurias++ # confirming the fix fixed it on my box 12:59
AlexDaniel: ^ all blockers have been fixed now
AlexDaniel this is awesome 13:00
pmurias++ Zoffix++
stmuk yay 13:01
Zoffix spectests bumps 13:02
stresstests 13:03
ZofBot: burnouttests
Geth nqp: ccf98076eb | (Zoffix Znet)++ | tools/build/MOAR_REVISION
[MoarVM Bump] Brings 2 commits

MoarVM bump brought: github.com/MoarVM/MoarVM/compare/2...8-g0ad859a 0ad859a Use an array instead of a big switch for ShiftJIS decoding f2b9b7f [JIT] Measure and report time spent on JIT compilation
13:09
¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...8-g0ad859a
rakudo: 79ed89ba40 | (Zoffix Znet)++ | tools/build/NQP_REVISION
[NQP Bump] Brings 4 commits

NQP bump brought: github.com/perl6/nqp/compare/2018....9-gccf9807 ccf9807 [MoarVM Bump] Brings 2 commits 83ed559 Bump Xmx for nqp-j by another 300MB 05c18bc [JVM] Increase Xmx for nqp-j to 1 GB 6c982a8 This test is now passing on OS X.
MoarVM bump brought: github.com/MoarVM/MoarVM/compare/2...8-g0ad859a 0ad859a Use an array instead of a big switch for ShiftJIS decoding f2b9b7f [JIT] Measure and report time spent on JIT compilation
¦ rakudo: version bump brought these changes: github.com/perl6/nqp/compare/2018....9-gccf9807
Zoffix ZOFVM: Files=1294, Tests=153321, 150 wallclock secs (20.77 usr 3.03 sys + 3196.38 cusr 160.30 csys = 3380.48 CPU)
~1 test per millisecond. Pretty damn good :P 13:10
Zoffix & 13:12
AlexDaniel samcv: ↑ I think we are very ready :) 13:43
I will be afk for a few hours though 14:09
lizmat so: I have a class A and I mix in a role B: is there some magic that I can use to dispatch to original method in class A from the mixed in object ? 14:12
jnthn callsame and friends would do it
lizmat jnthn++ :-) 14:14
Zoffix can also use "fully-qualified" method name or whatever it's called: 14:36
m: class A { method z { say "orig" } }; role B { method z { say "role"; self.A::z } }; (A.new does B).z
camelia role
orig
Zoffix m: class A { method z { say "orig" } }; role B { method z { say "role"; self.+z } }; (A.new does B).z
that looks broken...
camelia (timeout)role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role…
14:37
jnthn It's an infinite recursion, ain't it? 14:38
Zoffix Is it meant to tho?
jnthn .+z is a fresh dispatch
Not a continuation of the current one
Zoffix Ah. doh
m: class A { method z { say "orig" } }; role B { method z { say "role"; self.z } }; (A.new does B).z 14:39
Look this one is broken too! :D
camelia (timeout)role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role
role…
Zoffix m: class A { method z { say "orig" } }; role B { method z { say "role"; self."$(self.^mro.skip.head.^name)::&?ROUTINE.name()"() } }; (A.new does B).z 14:43
camelia role
No such method 'A::z' for invocant of type 'A+{B}'
in method z at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix m: class A { method z { say "orig" } }; role B { method z { say "role"; self.A::z() } }; (A.new does B).z 14:44
camelia role
orig
Zoffix m: class A { method z { say "orig" } }; role B { method z { say "role"; self."A::z"() } }; (A.new does B).z
camelia role
No such method 'A::z' for invocant of type 'A+{B}'
in method z at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix jnthn: do you think the second one should work? ^
jnthn No
Zoffix fully-qualified name in a string
Ah, ok
jnthn If we want that we'd want some syntax like self.::('A::z')() or some such 14:45
Zoffix m: class A { method z { say "orig" } }; role B { method z { say "role"; self.&(::("A").^lookup: "z") } }; (A.new does B).z 14:46
camelia role
orig
Zoffix m: class A { method z { say "orig" } }; role B { method z { say "role"; self.^mro.skip.head.^lookup(&?ROUTINE.name)(self) } }; (A.new does B).z 14:47
camelia role
orig
Zoffix \o/
m: class Z { method z { say "pre-orig" } }; class A is Z { method z { say "orig" } }; role B { method z { say "role"; for self.^mro.skip { $_.^lookup(&?ROUTINE.name) andthen .(self) } } }; (A.new does B).z 14:51
camelia role
orig
pre-orig
Zoffix hm
m: .^lookup("so") andthen .($_).say for ^10
camelia True
True
True
True
True
True
True
True
True
True
Zoffix this works, but this:
m: class A { method z { say "orig" } }; role B { method z { say "role"; $_.^lookup(&?ROUTINE.name) andthen .(self) for self.^mro.skip } }; (A.new does B).z 14:52
camelia role
Zoffix doesn't
m: sub z { dd &?ROUTINE.name for ^10 }; z 14:54
camelia ""
""
""
""
""
""
""
""
""
""
Zoffix m: sub z { for ^10 { dd &?ROUTINE.name } }; z
camelia "z"
"z"
"z"
"z"
"z"
"z"
"z"
"z"
"z"
"z"
Zoffix R#1768 14:56
synopsebot R#1768 [open]: github.com/rakudo/rakudo/issues/1768 Postfix `for`, and possibly others, cause &?ROUTINE to be set to empty string
tony-o nine: i have an extracted version of the zef build ordering i made if you're interested in it - i fixed it up so it's faster than i described 15:22
though i'm not sure it'd help for precomp unless you're able to determine what exactly depends on what else 15:23
nine: github.com/tony-o/p6-Uxmal 15:33
timotimo cool, i've been hoping for something like this for a while! 15:49
oh, it doesn't make graphical graphs 15:50
tony-o timotimo: that's up next 16:03
timotimo you know how to work graphviz?
tony-o was looking for a uml module 16:04
i don't work with charts like that much, i don't know about graphviz
timotimo oh, OK 16:11
graphviz is a super simple description language that dot and friends will turn into graphics of different types 16:12
digraph G { A -> B; B -> C; A -> D; D -> E } is a simple example
do dot -Tpng bloop.dot > foo.png and it'll be rendered
tony-o actually dot format looks simple enough i can play with it on the plane
and i have 11 hours of flying tomorrow
ah, you beat me to it
timotimo wow, 11 hours 16:13
yeah, you'll get loads and loads done in that time
if you want, that is
gotta go AFK
but do have a look at moarvm's tools folder where i have one or two scripts that generate dot files with more advanced features
tony-o usually i sleep on planes but this is relatively interesting 16:14
i'll take a look
timotimo and p6profiler-tools or something on my github which has progress bar like things using gradients
have a safe trip, if we don't talk until you're off :)
tony-o thanks timotimo :-) 19:19
samcv .ask Zoffix so is div_in 14x slower than last release? i see one that says it slows it down by 14x but the denormal fix commit says it increases certain div_In ops? 19:45
yoleaux samcv: I'll pass your message to Zoffix.
Zoffix . 19:49
yoleaux 19:45Z <samcv> Zoffix: so is div_in 14x slower than last release? i see one that says it slows it down by 14x but the denormal fix commit says it increases certain div_In ops?
Zoffix samcv: first commit made stringification of Nums 2x faster for most cases; the div_In fix fixed precision drift in Num -> Str -> Num -> Str roundtrippage, but the price for that was making it 14x slower. 19:50
I'll try to regain some of it during CaR grant. I think we can divide only parts of bignums to get a precise enough number. 19:51
samcv: actually it's not just drift, but because in rakudo we use that op for parsing nums, we used to create nums that aren't the closest representable num to what was written in the string. 19:52
(and that was also the reason for the drift) 19:53
samcv Zoffix: thanks :)
Zoffix in div_In we used to convert both numbers to doubles and THEN divide them, now we first divide them and then convert the result to double. If that makes logging it easier
Kaiepi should CArray have an alloc method or should Buf/Blob be used instead when you need to do that? 20:41
tony-o timotimo: now with dot generation 21:03
timotimo \o/ 21:04
AlexDaniel \o/
tony-o i.imgur.com/VAWq35B.png 21:05
this is the graph it builds on the second test in build-order.t
timotimo cute 21:07
AlexDaniel I love graphviz, especially how well it works with large graphs 21:15
well, as long as you don't have a bunch of nodes on the same level, ha-ha
timotimo in that case you haven't made graphs as big as mine :P
AlexDaniel I guess so, yeah 21:16
well, the largest graphs I've generated were probably from Yosys, but you rarely look at the whole flattened design… 21:17
I should probably try that just to see what happens
by the way, yosys does this nice little trick of using random colors for edges, which AFAIK is not a graphviz option 21:18
but it makes such a big difference really
timotimo pbs.twimg.com/media/DC1zZ1uXkAADNb8.jpg:large 21:19
AlexDaniel pffffffft :D 21:20
D#246 strikes again
synopsebot D#246 [closed]: github.com/perl6/doc/issues/246 [build] Unreadable type graphs
AlexDaniel same issue with a bunch of nodes on the same level 21:21
timotimo mhm
AlexDaniel we “fixed” it by using neato instead, but arguably that's not any better: docs.perl6.org/type/Metamodel::Met...Type_Graph 21:22