Perl 6 language and compiler development 2.0 | Logs at irclog.perlgeek.de/perl6-dev/today | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
Set by moderator on 5 May 2018.
00:33 cog_ joined 01:55 Tison joined 01:58 ilbot3 joined
moderator Perl 6 language and compiler development 2.0 | Logs at irclog.perlgeek.de/perl6-dev/today | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
02:40 ufobat_ joined 03:53 cog_ joined 04:46 nebuchadnezzar joined 04:49 awwaiid joined
lizmat Files=1239, Tests=76314, 316 wallclock secs (15.89 usr 5.63 sys + 2178.12 cusr 218.05 csys = 2417.69 CPU) 06:21
07:14 cog_ joined 07:25 robertle joined
nine .tell jnthn In NQP classes keep track of the order of their methods but roles do not. I find this odd. Does method order matter or not? 09:02
yoleaux nine: I'll pass your message to jnthn.
09:17 brrt joined
gfldex lizmat: I golfed my BOOTStr surprise and filed it as github.com/rakudo/rakudo/issues/1800 09:27
09:39 yoleaux joined
Geth roast: 2ca210bfe0 | usev6++ | S02-types/num.t
[JVM] Unfudge passing (sub-)test
09:53
[Tux] Rakudo version 2018.04.1-38-gede507b73 - MoarVM version 2018.04.1-54-g6899b0a17
csv-ip5xs0.866 - 0.889
csv-ip5xs-208.579 - 8.652
csv-parser37.472 - 39.471
csv-test-xs-200.423 - 0.467
test8.680 - 9.315
test-t2.379 - 2.396
test-t --race1.009 - 1.032
test-t-2043.943 - 44.215
test-t-20 --race15.199 - 15.270
10:25
10:33 cog_ joined
samcv m: say so "\\r" ~~ /\\n/ 10:37
camelia True
samcv is this supposed to happen?
nine samcv: if you read smartmatch as "kinda matches", it makes some sense ;) 10:51
llfourn m: say so "\\r" ~~ /"\\n"/ 11:00
camelia False
Geth nqp: d2a708a9ec | (Stefan Seifert)++ | 3 files
Always generate closure taking code in the same order

Fixes one source of reproducible build issues.
11:04
nqp: 9049e8ef66 | (Stefan Seifert)++ | src/NQP/Actions.nqp
Codegen block handlers in a predictable order

Hashes are iterated in random order. Better to iterate over a sorted list of keys so we will always produce the same code on rebuilds.
11:08 ufobat_ joined
Geth nqp: f26b822f3f | (Stefan Seifert)++ | src/NQP/Optimizer.nqp
Generate predictable local names when lowering lexicals in optimizer

Hashes are iterated in random order. Better to iterate over a sorted list of keys so we will always produce the same code on rebuilds.
11:11
nqp: d6b69836d8 | (Stefan Seifert)++ | src/NQP/World.nqp
Import symbols in a predictable order.

Hashes are iterated in random order. Better to iterate over a sorted list of keys so we will always produce the same code on rebuilds.
nqp: 7c27ff252a | (Stefan Seifert)++ | src/NQP/World.nqp
Generate bind ops for symbols used in BEGIN blocks in predictable order

Hashes are iterated in random order. Better to iterate over a sorted list of keys so we will always produce the same code on rebuilds.
nqp: 003f502dfa | (Stefan Seifert)++ | 2 files
Keep order of methods in roles

We already keep the order of methods in classes. If it's significant there, chances are that we want to keep order in roles, too. And it helps with making builds reproducible.
11:21
nqp: 51972803c8 | (Stefan Seifert)++ | src/how/NQPParametricRoleHOW.nqp
Keep order of methods when specializing a parametric role

This ought to help us generate identical code on rebuilds.
nqp: 65aff6df8b | (Stefan Seifert)++ | src/how/RoleToRoleApplier.nqp
Add methods in order of their definition when applying roles to roles

This ought to help us generate identical code on rebuilds.
nqp: 7a980a6e4f | (Stefan Seifert)++ | 10 files
Rebootstrap to get the reproducibility fixes for NQP itself
11:33
nqp: 707eb7713f | (Stefan Seifert)++ | src/QAST/Node.nqp
Dump annotations in predictable order

Should help with finding actual differences in QAST dumps
nine With this, there's just a single difference in Perl6/BOOTSTRAP.moarvm that can occure between rebuilds. It's "z^@<84>^D<8b>^B<9b>^Fy" vs "y^@<84>^D<8b>^B<9b>^Fz". If there's a difference, it's always z and y switching places. No difference in the moarvm --dump output though. 11:39
jnthn samcv: Yes, \\n in the regex language is a (carefully optimized) [\\n|\\r|\\r\\n] 11:43
nine I really wonder where this very last hash order issue could probably hide 11:53
12:00 zostay joined 12:02 squashable6 joined 12:04 squashable6 joined 12:06 squashable6 joined 12:42 BenGoldberg joined 13:51 AlexDaniel joined
timotimo nine: have you considered instrumenting (for example with a gdb script) the (de)serializer to see what piece of code is active when it reaches that position in the file? 13:57
actually, it's probably easier to use rr and just step forwards and backwards in ever smaller increments to find where exactly that is written 13:58
nine: what's the byte offset for that difference? 14:19
0000d970 it seems like 14:28
ah, i can't just use that number because the portions are memcpy'd together into one big blob at the end 14:34
OK, it's in the bytecode section which starts at e0b0 14:45
hm, something's wrong about my calculations or debug output 14:51
i'm apparently not finding the data in the segment that i was expecting 14:59
found the thing (variant B) in section objects data at offset 26a8 15:26
^- this is from inside concatenate_outputs
found an object near the thing: NQPArray; offset was 26a4 before. 15:34
26ac is the next object
that is the location of the 9b06 right before the z or y that switches around 15:35
so it really is the one at 26a4 that has the first value that swaps 15:36
15:36 SmokeMachine joined
timotimo it's a three-element array with a BOOTInt, a Proxy, and a BOOTStr 15:42
the string is an empty string 15:43
a 64bit integer with the value 10 15:45
dump_p6opaque crashes with it 15:47
nine: is this helping?
the other objects near that array are also interesting, i bet. after the array in question comes a Perl6::Metamodel::ContainerDescriptor 15:48
i do believe the ContainerDescriptor is where the other byte that flops between the two positions lives 15:49
Scalar.new(#`(from Scalar) $!descriptor=Perl6::Metamodel::ContainerDescriptor.new(#`(from Perl6::Metamodel::ContainerDescriptor) $!of=int.new(), $!rwThis representation (P6int) cannot unbox to a native string (for type int) 15:51
oh dump_p6opaque, you're funny
samcv AlexDaniel: just got your message 15:53
AlexDaniel :) 15:54
samcv AlexDaniel: also i believe say uniprop ‘♹’, ‘na’ works totally in nqp. doing uniname... so i'd think that wouldn't fail. but then again 16:00
gonna investigate and see how wrong things are
timotimo OK, that's the container descriptor for $!arity in one case 16:01
samcv AlexDaniel: that's because uniprop-str doesn't support 'na' 16:02
AlexDaniel m: say uniprop-str ‘♹’, ‘na’ 16:03
camelia 3.2
AlexDaniel then it shouldn't give any value?
samcv well it's not specced
or in the docs
it basically just calls nqp::uniprop_foo directly 16:04
so it's expected to give incorrect results if you query it for the wrong type
though it may be true we should do that logic in moarvm... but regardless it is known to be like that 16:05
nine timotimo: dump_p6opaque crashing is no surprise. I only implemented the cases I needed to dump whatever I wanted to dump back then. 16:07
timotimo :) 16:08
nine: got an idea why this could be going wrong here? 16:10
not the dump crash
nine How can stuff in that array be depending on hash order? 16:12
16:13 skids joined
timotimo well, there could be two almost identical arrays that are placed in a different order due to a hash somewhere 16:14
nine Finding where a Proxy ends up in an array in BOOTSTRAP should be easy 16:15
timotimo we need a "dump this, whatever it is" function for debugging ... i mean, the debugserver has that, but attaching a debug remote to a program suspended under gdb seems tricky 16:19
BOOTSTRAPATTR makes the p6 dump explode, too 16:20
samcv AlexDaniel: github.com/perl6/doc/issues/1045#i...-386891027 this comment should hopefully provide more info on this
AlexDaniel samcv: so do we even need uniprop-* subs? 16:22
samcv i don't think they're used anywhere?
AlexDaniel user-facing that is
grep: uniprop-str
samcv yeah nobody should be using them
greppable6 AlexDaniel, 2 lines, 2 modules: gist.github.com/0882ef530bd85fbc24...3e3f9a5be2
AlexDaniel grep: uniprop-int
greppable6 AlexDaniel, 2 lines, 2 modules: gist.github.com/7486c252e2f3cf67e3...f914398228
AlexDaniel grep: uniprop-bool
greppable6 AlexDaniel, 4 lines, 2 modules: gist.github.com/4744ca831b38470ff1...2c1a953046
samcv and if they are, they should switch to calling the nqp ops since at least that's more explicit about the output not be guarenteed to be "ok"
and not portable 16:23
i'd be more for maybe an option to .uniprop to specify you want an int back. since it's only useful for one property. (and two if you count version number. though version number isn't specced by unicode)
though i guess we could return a Nil or return a rumber/perl6 version type thing? yeah. that's not specified 16:24
timotimo somehow the object body of the object in question starts with 0xffffffff00000008, which somehow is treated as the real_data pointer 16:26
nine That's....not a pointer 16:27
timotimo yeah
nine Should be easy but I have no idea what 3 element array would contain a Proxy 16:28
timotimo maybe it'll be easier to trip it with a conditional breakpoint when deserializing 16:29
rather than figuring it out on the serializing end
i've got a couple backtraces for you, nine 16:35
gist.github.com/timo/f003e678c4e85...b2b5670c1b - nine
oh, duh 16:36
the pointer is like that if it's not a concrete object, i bet
yeah, there isn't "a proxy" in there, it's quite likely the proxy type object 16:39
nine There are not that many lines even referencing Proxy 16:44
timotimo right, but we're creating that class somewhere in bootstrap, aren't we?
nine Of all the classes created in bootstrap, what's so special about Proxy? 16:45
timotimo *shrug* 16:46
i'll end my involvement here, though i'll commit a few fixes to the p6opaque dumper 16:54
nine The Proxy.HOW.compose_repr call is kinda useless 16:55
The BUILD plan! 16:57
nqp::push(@plan,[10, $obj, $_.key]);
That is depending on hash order, is a 3 element array and got an integer and a string besides
timotimo aha! 16:58
i mean ... every object we have has a build plan, how come only Proxy actually changes based on hash ordering? 17:00
nine Many thanks timotimo! Without your help, I'd have had barely a chance of finding this
timotimo \\o/
17:05 Ben_Goldberg joined
Geth rakudo: 39227d5456 | (Stefan Seifert)++ | src/Perl6/Metamodel/BUILDPLAN.nqp
Make build of BOOTSTRAP.moarvm reproducible

The build plan ends up in the compiled code and therefor should not depend on random hash order. Many thanks to timotimo++ for helping uncover this.
17:05
17:13 lizmat joined
b2gills nine++; timotimo++; 17:44
samcv releasable6: status 17:45
releasable6 samcv, Next release in ≈13 days and ≈1 hour. 1 blocker. 0 out of 39 commits logged
samcv, Details: gist.github.com/f82560f7bc2003c9fc...afba6e7461
nine Trouble is, it somehow breaks the last test in S14-traits/routines.t 17:53
MasterDuke is the test faulty? 18:09
nine nope
testing a fix
samcv nine: not sure how far you are with your work on getting builds reproducible. We can always revert the hash randomization if needed before release and then reapply it 18:10
Geth rakudo: 56c03572a0 | (Stefan Seifert)++ | src/Perl6/Metamodel/BUILDPLAN.nqp
Fix brown paper bag regression by commit 39227d5456723bcfc2eae526716932e19afda9be

The hash is used as a set without values, so an existskey is the right check.
18:11
nine samcv: it is....done :)
samcv oh :) awesome
nine++++
MasterDuke nine++
"brown paper bag regression"? never heard that before 18:12
nine catb.org/jargon/html/B/brown-paper-bag-bug.html 18:14
MasterDuke ha, not where i was going with that. trying to figure out how hiding a bottle of alcohol out in public was related... 18:15
lizmat m: class A { method a() { } }; dd A.can("a")[0].signature # I think this signature is LTA 18:21
camelia :(A $: *%_)
lizmat I think it should just say ":(A: *%_)" 18:22
which would be less confusing and just as correct
or am I missing something
m: use MONKEY; dd ':(A: *%_)'.EVAL 18:23
camelia 5===SORRY!5=== Error while compiling /home/camelia/EVAL_0
Invalid typename 'A' in parameter declaration.
at /home/camelia/EVAL_0:1
------> 3:(A7⏏5: *%_)
lizmat m: use MONKEY; dd 'class A {}; :(A: *%_)'.EVAL
camelia :(A $: *%_)
19:03 travis-ci joined
travis-ci Rakudo build failed. Stefan Seifert 'Fix brown paper bag regression by commit 39227d5456723bcfc2eae526716932e19afda9be 19:03
travis-ci.org/rakudo/rakudo/builds/375602822 github.com/rakudo/rakudo/compare/3...c03572a0e1
19:03 travis-ci left
buggable [travis build above] ☠ All failures are due to: failed make test (1 failure). Across all jobs, only t/04-nativecall/09-nativecast.t test file failed. 19:03
Geth rakudo: 71159bedd7 | (Elizabeth Mattijsen)++ | src/core/Signature.pm6
Simplify Signature.perl/gist for unnamed invocants

If you don't specify the invocant in the definition of a method, you basically create an unnamed scalar as the invocant. When doing:
   class A { method a() { } }; say A.can("a")[0].signature
you would see '(A $: *%_)'. This commit changes that to '(A: *%_)' which has fewer distractors.
Inspired by stackoverflow.com/questions/502028...signatures
19:16
nqp: d3958afdd9 | usev6++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java
[JVM] Ignore hint for multiple inheritance

This applies an old change for getattr_{i,n,s} to getattr as well -- compare 19877e5042 and 1344f28130.
Makes things like '<0.9>.numerator' work, which looked in the wrong place and evaluated to "0.9" (the string value of the RatStr).
19:21
rakudo: f14dc6bdd4 | (Elizabeth Mattijsen)++ | src/core/Signature.pm6
.chop(2) is so much faster than .substr(0,*-2)
19:57
20:00 Ben_Goldberg joined 20:01 travis-ci joined
travis-ci Rakudo build failed. Elizabeth Mattijsen 'Simplify Signature.perl/gist for unnamed invocants 20:01
travis-ci.org/rakudo/rakudo/builds/375620327 github.com/rakudo/rakudo/compare/5...159bedd7c5
20:01 travis-ci left
buggable [travis build above] ☠ All failures are due to: failed make test (1 failure). Across all jobs, only t/04-nativecall/09-nativecast.t test file failed. 20:01
20:03 brrt joined
Geth roast: 1ff93a9f7d | (Samantha McVey)++ | S15-unicode-information/uniname.t
Add uniname test for reserved characters

Also remove a repeated test.
20:10
lizmat m: sub rand($a) { }; say rand(56) 20:11
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of rand(N); in Perl 6 please use N.rand for Num or (^N).pick for Int result
at <tmp>:1
------> 3sub rand($a) { }; say rand7⏏5(56)
Geth nqp: e77f3306ff | (Samantha McVey)++ | t/nqp/106-unicodenames.t
Fix a minor typo in a test description
20:19
20:50 travis-ci joined
travis-ci Rakudo build failed. Elizabeth Mattijsen '.chop(2) is so much faster than .substr(0,*-2)' 20:50
travis-ci.org/rakudo/rakudo/builds/375630693 github.com/rakudo/rakudo/compare/7...4dc6bdd414
20:50 travis-ci left
buggable [travis build above] ☠ All failures are due to: failed make test (1 failure). Across all jobs, only t/04-nativecall/09-nativecast.t test file failed. 20:50
21:19 quotable6 joined 22:00 ilbot3 joined
moderator Perl 6 language and compiler development 2.0 | Logs at irclog.perlgeek.de/perl6-dev/today | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
22:53 committable6 joined, unicodable6 joined 22:54 undersightable6 joined 23:43 yoleaux joined