AlexDaniel Zoffix: I just glanced over github.com/perl6/doc/commit/67cadad365 and generally it's an improvement in some way, but I think it's slightly incorrect. You say “the behaviour is a lot more predictable and avoidable than the prose suggests”, but I don't think that it is. Previously it said “You should always expect the C<LEAVE> phaser to be executed before I<anything> else in the block.” and that's a very clear rule of th 02:23
easy to understand and it's right, even if apocalyptic. Instead you're describing one specific case in detail, which is great but not as useful IMO. Here's an example:
m: die; my $x = 42; LEAVE say $x.Int
camelia No such method 'Int' for invocant of type 'Any'
in block <unit> at <tmp> line 1
AlexDaniel even if we assume that there's a block, there's still no visible dispatch or anything like that, and all that is irrelevant anyway 02:24
yes it will die anyway, but it dies on calling .Int on Any 02:25
IMO this awesome prose about param binding and stuff belongs to the multidispatch section somewhere else in the docs, we can link to it 02:26
or maybe I'm wrong? 02:27
like, is code like `my $x = some-large-sub(); LEAVE say $x.Int` part of that trap? 02:29
if we say no, then we just call that section `LEAVE and Paremeter Binding`, and it'll be correct 02:30
… and then add another LEAVE trap reminding that things can be undefined at that point
m: my $x = 42; LEAVE say $x.Int; INIT die 02:31
camelia No such method 'Int' for invocant of type 'Any'
in block <unit> at <tmp> line 1
AlexDaniel ok that's more like it, but still too magical 02:32
anyway, judge yourself if my sleep-deprived ramblings make sense or not
Zoffix AlexDaniel: no, they don't make too much sense to me, considering they're implying the user doesn't understand at all how LEAVE phaser works, where the trap, as I see it documents the not-so-obvious case where the LEAVE phaser is run *despite param binding failure*. A user even suspected it was a bug on the original Issue: github.com/perl6/doc/issues/1539#i...-328120984 02:40
AlexDaniel hmm 02:41
greppable6: LEAVE
Zoffix And "You should always expect …"... Why should I always expect? That's not true. It depends on the code I'm executing.
greppable6 AlexDaniel, 481 lines, 88 modules: gist.github.com/f340052ce09d5bf0a1...7283b38636
Zoffix While it makes it sound that LEAVE can run willy-nilly at any time
AlexDaniel hehe 02:42
okay then 02:55
Zoffix ZofBot: alrighty, then! 03:02
ZofBot Zoffix, AlexDaniel`, Deleted alert ID 5
AlexDaniel scary
Zoffix It's getting sentient 03:03
AlexDaniel ZofBot: robots that are too smart will be deleted also. 03:06
ZofBot AlexDaniel, or just slightly above it, at least for me
Zoffix
.oO( saying things like that is what gets you killed in the robocalypse )
03:25
nine Thanks for the weekly lizmat++ 06:38
Am I the only one who regularly has these "Wait, I did what? Oh, yes, now I remember..." moments reading the weekly? 06:39
lizmat sometimes :-) 07:07
Geth rakudo: 8ad7eb398a | (Stefan Seifert)++ | tools/build/Makefile-common-macros.in
Fix parallel initial build failing

tools/build/check-nqp-version.pl did run and produced a correct nqp-version file, but at that point it was already too late. While it was running, make tried to check the dependency for other parts and gen/nqp-version was not available yet and there was no explicit recipe for creating it either.
Mark the Makefile as .NOTPARALLEL, which gets rid of the whole issue. This is a GNU extension however, so the issue may still remain for other makes.
Fix GH #1654
07:13
synopsebot RAKUDO#1654 [open]: github.com/rakudo/rakudo/issues/1654 [build][⚠ blocker ⚠] Fresh-clone builds fail with "No rule to make target `gen/nqp-version', needed by `blib/Perl6/ModuleLoader.moarvm'."
nine Can we please get rid of support for nmake from the stone age? Working around its limitations is the least productive time ever. I've already had a perfectly working implementation that avoided the above issue while retaining _all_ the benefits, but can't use it due to nmake. 07:15
[Tux] Rakudo version 2018.03-93-g8ad7eb398 - MoarVM version 2018.03-31-gfdb5e4d6b
csv-ip5xs0.904 - 0.918
csv-ip5xs-208.752 - 9.103
csv-parser37.450 - 38.024
csv-test-xs-200.446 - 0.447
test9.206 - 9.293
test-t2.547 - 2.583
test-t --race1.060 - 1.247
test-t-2044.446 - 45.915
test-t-20 --race15.255 - 15.529
07:29
Geth rakudo: 9d784dd0b9 | (Elizabeth Mattijsen)++ | src/core/Iterator.pm6
Streamline the basic Iterator.push-exactly

Instead of counting up to the given number, copy the given number and count down with it, which simplifies the end check. Makes it about 8% faster.
07:39
rakudo: 24ddff73b2 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Micro-optimize pull-one for -> $a, $b { PHASER foo } case

Use nqp::isconcrete (which returns 0/1) instead of .DEFINITE (which returns a full-blown Bool)
07:42
lizmat m: m: say Buf.new(1,2,3) ~~ Buf.new(1,2,3) # shouldn't this need to be True ? 07:49
camelia False
Geth rakudo: eefccc1857 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Don't use private methods to create iterators

Prevents the relatively expensive dispatch:<!> runtime lookup
08:05
rakudo: c40f025482 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Streamline grep :kv .pull-one, make it 1.5x as fast

  - use nqp::isconcrete instead of .DEFINITE
  - use nqp::eqaddr instead of =:=
  - use nqp ops more extensively
08:43
pmurias which multi should be choosen: paste.debian.net/1016913/ 09:15
they have the signatures taken from both the export trait for constants and the undefined trait one and the undefined one seems to be choosen here 09:20
Geth rakudo: 5db9ebc457 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Streamline grep :p .pull-one, make it 1.5x as fast

  - use nqp::eqaddr instead of =:=
  - use nqp ops more extensively
  - do the same for .push-all with similar improvements
09:48
jnthn pmurias: Named parameters only play a tie-breaking role, and tie-breaking picks the textually first one 10:03
nine: Which versions of nmake do you consider from the stone age? 10:04
We could probably put a minimum version req on it 10:05
nine jnthn: any nmake :) A make that cannot put the output of shell commands into variables is just not helpful 10:12
The simple and parallelization friendly solution would have been a NQP_VERSION != $(PERL5) tools/build/check-nqp-version.pl 10:13
Variables must be declared before rules are processed, so check-nqp-version.pl would have been called before we fire off parallel workers and everything would have been just fine. 10:14
The way I see it, Windows is the one platform where the default make implementation is so limited. Windows is also the one platform where it's considered normal to download binaries and expect them to run. And there must be make implementations for Windows that provide essential features. 10:24
So I'm back at my suggestion to have our build process on Windows download such a binary and use that for the build. If we install it along our own binaries this could even help module authors as it sets a good minimum feature set that can be relied upon. 10:25
[Coke] nine: (getting rid of old makes) but can we make the build parallel-izable instead? 12:21
[Coke] sees he missed a bunch of discussion after the initial send and goes back to reading 12:22
pmurias jnthn: so why is github.com/rakudo/rakudo/blob/mast...s.pm6#L294 ever taken over github.com/rakudo/rakudo/blob/mast....pm6#L119? 12:28
jnthn: for things that are Routine the positional parameter would take priority? 12:29
jnthn Yes, exact arity match beats slurpy 12:44
Oddly enough, the rules around arity are more complex than those around type 12:46
Geth rakudo: d2c88bcc87 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Streamline squish :as .pull-one, make it 1.5x faster

  - replace =:= by nqp::eqaddr
  - replace prefix ! by nqp::isfalse
  - use only nqp::ops
13:43
rakudo: c41b79c0a0 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Streamline squish() .pull-one, make it 1.6x faster

  - replace =:= by nqp::eqaddr
  - replace prefix ! by nqp::isfalse
  - use only nqp::ops
14:13
rakudo: 0756076b39 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Get rid of =:= in IterateMoreWithPhasers

This is the iterator used for things like:
   for @foo -> $k, $v { PHASER foo }
Should have some positive effect on performance.
14:25
rakudo: e3aef509b1 | (Elizabeth Mattijsen)++ | src/core/Any-iterable-methods.pm6
Streamline grep :k .push-all, make it 1.5x as fast

  - use nqp::eqaddr instead of =:=
  - use nqp ops more extensively
  - do the same for .pull-one with only a 6% improvement
14:43
ggoebel nine: horrible awful hack... but... how to get the output of a command when using nmake... (stackoverflow.com/questions/488302...oft-nmake) 14:50
.tell nine how to get the output of a command when using nmake... (stackoverflow.com/questions/488302...oft-nmake) 14:54
yoleaux ggoebel: I'll pass your message to nine.
Geth roast: 71f73c9ea4 | (Elizabeth Mattijsen)++ | S03-operators/buf.t
Prevent worries about variable redefinition
15:45
rakudo: a3da6ac560 | (Elizabeth Mattijsen)++ | 2 files
Change some more =:= to nqp::eqaddr
16:38
rakudo: 9ffb06b224 | (Elizabeth Mattijsen)++ | src/core/Buf.pm6
Streamline Blob/Buf comparisons

A few percent better for eq/ne and about 30% better for lt/le/gt/ge. SAME now returns 0/1 instead of Bool, COMPARE now completely in nqp ops. No explicit returns are used anymore.
Also remove usage of =:= from !push_list;
16:49
[Tux] Rakudo version 2018.03-104-g9ffb06b22 - MoarVM version 2018.03-31-gfdb5e4d6b
csv-ip5xs0.876 - 0.902
csv-ip5xs-208.417 - 8.720
csv-parser36.682 - 37.007
csv-test-xs-200.452 - 0.517
test9.068 - 9.097
test-t2.472 - 2.484
test-t --race1.034 - 1.084
test-t-2043.632 - 43.966
test-t-20 --race15.132 - 15.259
19:02
AlexDaniel o yey, I'm actually progressing in golfing this segfault
≈100 lines and using just Cro::HTTP::Client and Digest::SHA256::Native 19:03
jnthn suspects it'll be an easier find if the former golfs out rather than the latter... :) 19:04
AlexDaniel I don't agree! 19:05
the latter is just a one file module
with a bit of nativecall
but as far as I can see you need both, and working in parallel :| 19:06
jnthn AlexDaniel: By golfs out I meant "goes away from the golf" :) 19:08
Oh, did you get it to segv under perl6-valgrind-m ?
AlexDaniel right! 19:09
as for valgrind, haven't tried anything yet. For now just hoping that the golfing process will get me somewhere
also with valgrind it's slooooooow
jnthn Well, if it's a segv thanks to the sha256 native lib there's a decent change valgrind would show it up 19:11
jnthn bbi30 19:12
AlexDaniel` 6c: gist.githubusercontent.com/AlexDan...egfault.p6 19:26
committable6 AlexDaniel`, Successfully fetched the code from the provided URL.
AlexDaniel`, gist.github.com/8c2fb6e3bebd4de018...fd08acc35b 19:27
AlexDaniel` right… 19:28
Geth rakudo: 637147af41 | (Elizabeth Mattijsen)++ | src/core/ThreadPoolScheduler.pm6
Streamline ThreadPoolScheduler!xxxx-queue a bit

  - nqp::isconcrete instead of .DEFINITE
  - nqp::elems instead of .elems
20:37
AlexDaniel can anybody even reproduce GH#1660 ? 20:41
synopsebot GH#1660 [open]: github.com/rakudo/rakudo/issues/1660 [SEGV] Cro + Digest::SHA256::Native = segfault
Geth rakudo: 04014cf67d | (Elizabeth Mattijsen)++ | src/core/ThreadPoolScheduler.pm6
Make affinity-threshold calculation simpler

By unshifting an element into the constant array with threshold values so that we don't need to do a -1 everytime
20:50
rakudo: e31dd966ff | (Elizabeth Mattijsen)++ | src/core/ThreadPoolScheduler.pm6
Revert "Make affinity-threshold calculation simpler"

This reverts commit 04014cf67d89606c5cbe6b3007b9784c8e8d2407.
This is the wrong way to do it
21:01
pmurias jnthn: if exact match beats slurpy why in that nopaste is |c choosen? 21:26
Geth rakudo: 17ca56b4eb | (Elizabeth Mattijsen)++ | src/core/ThreadPoolScheduler.pm6
Inline !total-workers manually

Should prevent at least one Int allocation for each time.
21:39
lizmat this concludes my hacking for today
timotimo lizmat++ 21:42
AlexDaniel Zoffix: am I the only one who feels a little bit sad when we take features out? :) 21:50
Zoffix timotimo: do you know anything about the sha-256 error on Windows with GTK::Simple? I vaguelly recall you discussing it with someone and there's a user having that problem: www.reddit.com/r/perl6/comments/87..._anything/ 22:13
timotimo yeah 22:14
the powershell impl of sha256 is just in there because Digest was too slow at one point, but we do have Digest::SHA256::Native now
i wonder if that one's easy to install on windows?
Zoffix AlexDaniel: "A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away."—Antoine de Saint-Exupery 22:15
timotimo: hm, on Win10 it said "Building [OK] for Digest::SHA256::Native:ver<0.03>" but then File::Which is failing "This type cannot unbox to a native string: P6opaque, Failure" 22:16
timotimo huh?
Zoffix Same problem on OpenSSL: github.com/sergot/openssl/issues/58
(busted something up in rakudo?) 22:17
This is on 2018.03-107-ge31dd96 on Win10
Output with --ll-exception: github.com/azawawi/perl6-file-which/issues/9 22:21
oh wait, no that's wrong
That's --ll-exception for the "die" that's called when it shows "Aborting due to test failure" 22:22
This one's betterere: github.com/azawawi/perl6-file-whic...-376695635 22:23
" from SETTING::src/core/CompUnit/PrecompilationUnit.pm6:56 (C:\rakudo\install\share/perl6/runtime/CORE.setting.moarvm:is-up-to-date)"
Oh, from "my $current-source-checksum := nqp::sha1($srcIO.slurp(:enc<iso-8859-1>));" 22:25
guess I can stick a debug statement up in there and see what $srcIO is
AlexDaniel Zoffix: I agree, but it's still sad when things are taken away :) 22:36
I mean, :(
Zoffix IO::Path.new("perl#sources\\51E302443A2C8FF185ABC10CA1E5520EFEE885A1", :SPEC(IO::Spec::Win32), :CWD("C:\\Temp\\perl6-file-which")) 22:37
AlexDaniel: why? Are you sad when a disease is taken away? When a tumour is cut off? Some things are good to take away.
AlexDaniel yes but someone has spent their time and love on implementing something 22:38
unlike a tumour or a disease… although some may disagree depending on a religion maybe?
greppable6: toggle 22:39
greppable6 AlexDaniel, 397 lines, 23 modules: gist.github.com/4f0474aefb69fc1c34...30104b22e9
AlexDaniel greppable6: \.toggle\b
greppable6 AlexDaniel, 45 lines, 9 modules: gist.github.com/30fb73dc5e615fe534...3be0291d21
Zoffix AlexDaniel: that's precisely the reason why some software sucks. People are too attached to code to ruthlessly excise all the garbage. It's like I say: "Good code is easy to remove". That applies both technologically and psychologically.
AlexDaniel Zoffix: OK, I guess you're right 22:40
AlexDaniel brings his axe
WHAT'S NEXT?
Zoffix: by the way, what's your opinion on .toggle and things similar to it 22:43
Zoffix unless $srcIO {
return False unless $srcIO.e;
}
That's wrong isn'it? The only way $srcIO.e would run if $srcIO would be false?
AlexDaniel that is, a feature was added fairly recently, and in the docs we don't even mention that it's not part of v6.c? Isn't it weird a bit?
and then, nobody is using it in the ecosystem… “*yet*”? 22:44
don't we want to make this kind of features only available in v6.d.PREVIEW? 22:45
maybe…?
Zoffix Ideally. But we don't have the means to.
IIRC I documented toggle, so in that case it was fine to me.
Was introed in this commit "Replace error-prone file timestamp check by checksum when loading deps" I think I'll just ping nine, because I think there might be a reason why the path is failing even before that conditional 22:47
travis-ci Rakudo build canceled. Elizabeth Mattijsen 'Change some more =:= to nqp::eqaddr' 22:48
travis-ci.org/rakudo/rakudo/builds/358977413 github.com/rakudo/rakudo/compare/e...da6ac56062
buggable [travis build above] ☠ Did not recognize some failures. Check results manually.
Zoffix .tell nine would you be able to take a look at this Issue? Does the path it's trying to slurp look right? with the "perl#sources" stuff in it? github.com/rakudo/rakudo/issues/1662 22:54
yoleaux Zoffix: I'll pass your message to nine.