Perl 6 language and compiler development | Logs at colabti.org/irclogger/irclogger_log/perl6-dev | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
Set by Zoffix on 27 July 2018.
vrurg .tell patrickb It's been totally crazy last two weeks for me. Will try to find some time over the weekend. 01:46
yoleaux vrurg: I'll pass your message to patrickb.
02:15 MasterDuke left
vrurg Hm, looks like I've got CORE setting loading and binding on dynamic/chained pseudo stashes... 02:32
03:56 BeastieBot left 04:16 BeastieBot joined 06:07 lizmat left 06:39 lizmat joined 07:01 lizmat left 07:12 MasterDuke joined 07:26 vrurg left 09:44 Kaiepi left 09:45 Kaiepi joined 10:01 Kaiepi left 10:05 Kaiepi joined 10:21 Kaiepi left, Kaiepi joined 10:38 Kaiepi left 10:39 Kaiepi joined
AlexDaniel squashable6: status 11:15
squashable6 AlexDaniel, 🍕🍕 SQUASHathon is in progress! The end of the event in 1 day and ≈2 hours. See github.com/rakudo/rakudo/wiki/Mont...Squash-Day
11:34 |Tux| joined 12:14 |Tux| left, |Tux| joined
AlexDaniel .tell lizmat another weird bug: github.com/ajs/perl6-Math-Sequences/issues/47 12:23
yoleaux AlexDaniel: I'll pass your message to lizmat.
AlexDaniel .tell lizmat (with the same code)
yoleaux AlexDaniel: I'll pass your message to lizmat.
Kaiepi bastille% perl6 test.p6 13:08
Converting 😂 to a wide string...
4 wide characters
4 elements after converting
slowly getting there...
that should be 2 though
i feel like i'm missing bits and pieces in moar and rakudo
13:12 Tux__ joined, |Tux| left 13:52 Tux__ left 13:54 Tux__ joined
timotimo i wonder what exactly makes my code cause the scheduler to kick its heuristic deadlock detection into high gear and asplode to perhaps maximum thread count in just a few moments 14:09
Kaiepi i was right about stuff missing, i'm missing code to deal with passing wide strings to nativecall and handle encoding them properly with it 14:10
MasterDuke maybe one of the heuristics is '$username.contains("timo")'? 14:11
Kaiepi how much work would be involved in writing that?
timotimo nah, it stops
Kaiepi sorry if i interrupted
timotimo i mean it stops adding more workers before RAKUDO_MAX_THREADS is reached 14:12
if that's even what that variable is called
Kaiepi it is 14:13
14:13 Tux__ left
timotimo massively parallelizing work with nested promises and hypers; maybe not the greatest approach 14:16
14:16 Tux__ joined
timotimo i guess i probably don't need a hyper splitter and joiner task to parallelize over four or six rather heavy tasks 14:16
might as well try to await do for ... start
14:19 HarmtH_ left, HarmtH_ joined 14:21 HarmtH_ is now known as HarmtH
timotimo Kaiepi: i'm not sure where code like that would actually go 14:23
Kaiepi i need to be able to transcode between c strings, wide strings, and MVMString 14:24
timotimo i mean, rakudo already has a thing for when it passes a Str to a native sub and it causes an encoding to happen 14:25
Kaiepi it does, but the problem is it uses MVMString to accomplish that 14:26
transcoding between c strings and wide strings is simple enough but idk about MVMStrings
14:27 vrurg joined
timotimo for MVMString it's just an encoding step, no? 14:28
since MVMString doesn't care about wide/narrow
it's all in the signature of the native sub
14:41 [TuxCM] left
timotimo bleh, the work needed for the references is so much slower that it dictates the total run time of the task :| 14:43
14:49 [TuxCM] joined
timotimo huh. 3/4 of the time, but about 25% less cpu used. what did i do, lol 14:51
AlexDaniel squashable6: status 15:19
squashable6 AlexDaniel, 🍕🍕 SQUASHathon is in progress! The end of the event in ≈22 hours. See github.com/rakudo/rakudo/wiki/Mont...Squash-Day
AlexDaniel Now with an issue tracker! github.com/ajs/perl6-Math-Sequences/issues
timotimo ha! 27s as compared to the 1:10 it sometimes was before 15:49
and it's below a gigabyte of ram usage, too 15:50
MasterDuke nice 15:53
[Tux] Rakudo version 2019.03.1-673-gcf6f6d926 - MoarVM version 2019.05-99-g729303de7
csv-ip5xs0.700 - 0.705
csv-ip5xs-205.279 - 5.374
csv-parser34.673 - 35.603
csv-test-xs-200.432 - 0.438
test7.509 - 7.535
test-t1.862 - 1.867
test-t --race0.856 - 0.921
test-t-2029.590 - 29.849
test-t-20 --race9.467 - 9.681
16:14
TreyHarris Since "die" at the top-level of a program is no longer really congruent with Perl 5's, and it lacks the behavior of a newline at the end of the message string suppressing the backtrace, should there be sugar for "-> $msg { $msg.note and exit 1}" ? 18:46
For communicating human-interaction errors? 18:47
vrurg m: say MY::NoExists 18:49
camelia Nil
TreyHarris Seems like a discussion topic, I'll throw it into a problem-solving issue
vrurg In roast MY::NotExists is exppected to throw. I just made it conform to roast and got broken build. 18:50
I wonder how many modules rely on current behavior? 18:51
18:53 robertle joined
vrurg Great, ForeignCode doesn't conform to roast. ;) 18:58
18:59 lizmat joined
vrurg m: module Foo { }; say Foo::<NotExists> 19:19
camelia (Any)
vrurg m: say MY::<NotExists>
camelia Nil
vrurg I'm lost. 19:20
TreyHarris That's weird... did you bisect? 19:27
vrurg TreyHarris: No, but I suspect it always was this way. 19:29
vrurg is creating a problem-solving case for this.
TreyHarris I just created github.com/perl6/problem-solving/issues/59 for the die-with-newline question. 19:45
ugexe CATCH { default { try { ::("Rakudo::Internals").?LL-EXCEPTION } ?? .rethrow !! .message.&note; &*EXIT(1) } } 19:50
thats what im using atm
Geth ¦ problem-solving: AlexDaniel assigned to jnthn Issue Need a substitute for Perl 5 die with newline for raising end-user errors? github.com/perl6/problem-solving/issues/59 19:51
TreyHarris ugexe: Yes, I actually considered changing die's example to something like that before submitting the problem-solving issue. I like the special exception class the best, though; if other do, I'm happy to write up a proposed class spec 19:52
But "Rakudo::Internals" is exactly correct, but also not something we mention in the Perl6 docs
Er, no... nearly correct. Correct for CPAN modules. Not quite correct for executables. 19:53
ugexe its not required, it just puts the backtrace back in if --ll-exception is used
timotimo how about "quietly die 'oh no'" :P 19:54
ugexe die :no-backtrace 'too much typing' 19:55
throw a comma in there
timotimo m: sub bloop { say %_; say @_ }; bloop "oh no" :no-backtrace 19:56
camelia 5===SORRY!5=== Error while compiling <tmp>
You can't adverb "oh no"
at <tmp>:1
------> 3_; say @_ }; bloop "oh no" :no-backtrace7⏏5<EOL>
expecting any of:
pair value
timotimo m: sub bloop { say %_; say @_ }; bloop :no-backtrace "oh no"
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3 { say %_; say @_ }; bloop :no-backtrace7⏏5 "oh no"
expecting any of:
infix
infix stopper
postfix
statement…
timotimo m: sub bloop { say %_; say @_ }; bloop("oh no"):no-backtrace
camelia {no-backtrace => True}
[oh no]
lizmat
.oO( exit 1, :message<Goodbye> }
19:57
TreyHarris that's one of the things right there, though: user-oriented errors shouldn't be handled with say.
lizmat: yes, could work except that you may want it to be catchable and you may not want to abort finalizers
lizmat exit doesn't abort finaloizers, afaik 19:58
TreyHarris lizmat: oh? the exit docs say it does
I didn't test it
timotimo finalizers are not guaranteed to run
but that's not the same as END blocks
lizmat END blocks will be run with exit
ugexe well, if you want it to be catchable then using plain `die` seems silly
timotimo i actually wouldn't expect LEAVE blocks to be run from exit
lizmat m: END say "goodbye"; exit 1
camelia goodbye
TreyHarris user-oriented errors should at the very least go to $*ERR, but mentioning $*ERR explicitly is kinda wrong too since you may want to intercept it for things like GUI's. 19:59
lizmat m: LEAVE say "goodbye"; exit 1
camelia ( no output )
lizmat perhaps: "exit 1, :note<Foo Bar>" for message on STDERR 20:00
and "exit 1, :say<Too Bad>" for message on STDOUT
TreyHarris Well, exit is supposed to be extraordinary, I think... Saying, "erm, I can't write to that directory you told me to write to" isn't really extraordinary, it's just exceptional 20:01
timotimo exitraordinary
TreyHarris One can't inject a top-level CATCH from another module, can one? After rejecting changing the docs but before going to problem-solving, I'd considered just writing an "X::UserError" module to throw up on CPAN but I couldn't figure out how to avoid requiring the CATCH in the caller. 20:04
ugexe since you want it to be catchable then let the user remove the backtrace. otherwise anyone catching this has to handle detecting/acting-on this switch
timotimo let's introduce a differentiation like php has. it has fatal errors, errors, exceptions, crashes, and something else 20:05
lizmat perhaps docs.perl6.org/language/variables#&*EXIT could be of use ?
TreyHarris Do they? I don't think so. I would think that library code should never encounter such an exception?
ugexe then you, the sole consumer of this, is the user 20:06
TreyHarris I feel like there should be a way that doesn't involve an explicit top-level CATCH block, because it's too easy (especially in a case like this where one is doing selective action) to make a mistake. The very example in the docs doesn't work right 20:09
ugexe but one would argue thats pushing the dev to do the right thing and use typed exceptions in the first place 20:10
TreyHarris I did note that that would be one side-effect. If the answer to, "how do I get the perl5 die-with-newline behavior?" is, "used typed exceptions for those cases at least", that doesn't feel like a huge burden. 20:11
ugexe the example i showed before was only needed because 1) i liked the backtrace but others thought it was too much 2) i was too lazy to refactor using typed exceptions.
TreyHarris So the die-with-newline was correct in one way: the place in the code where one is die'ing is the correct place to signal that this is an error that needs no debug information because it's a "normal exception". The problem was that the mechanism was unacceptably fugly and hard to generalize. 20:14
Having to deal with this in two places, both where the error is discovered and at the top level, seems like an avoidable burden
ugexe if die could default to no backtrace, and add a backtrace option i might be more inclined. or make a `trace` that dies with a backtrace. but as it exists now... i'm not sure any new options feel right 20:15
TreyHarris Maybe exit with a non-Int could be hijacked for the purpose. 20:17
`exit "Can't write to directory $d";` or `exit X::UserError::DirectoryAccess(:dir($d));` 20:18
exit's already a multi, so that's doable in CPAN now
ugexe i expect that i can recover from die, not exit 20:19
TreyHarris er, my syntax was some other language's there, but I think it's clear what I meant...
ugexe: right. I'm not sure one does want to catch such cases... I think you're being too clever by half if you do, like, "oh, there's no directory by that name and I just learned that by catching the DirectoryNoExisty exception, so I'll create it and retry" or whatever 20:21
The main reason to "catch" them is to hijack the output when not running on standard I/O, and as lizmat pointed out, &*EXIT appears to exist for that very purpose 20:22
ugexe i used &*EXIT in my example :P
although not in a very fancy way 20:23
TreyHarris I know, I said your CATCH was the sort of thing that should be made implicit for a class different from Rakudo::Internals
But that was wrong anyway: &*EXIT is just for the exiting step (what right now is exit(Int:D $)), so it can't affect error output before it was called 20:25
a different exit multi that got the output, like I outlined before, _could_ do that. So maybe I should just do that as a CPAN module and see how it feels 20:26
ugexe sure it can
it can print \b a bunch of times
TreyHarris :UP
er, very big nosed version of :-P
ugexe .tell patrickb I imagine we'll drop travis-ci and just use circle-ci eventually, but right now the familiarity of travis is still helpful to have around. as for testing e.g. reloc, names-with-spaces, etc these can probably be done with circle-ci using cron jobs that run specific jobs, but i dont think appveyor has anything beyond "run default branch nightly" 20:37
yoleaux ugexe: I'll pass your message to patrickb.
20:45 lizmat_ joined 20:49 lizmat left 20:53 lizmat_ is now known as lizmat