00:10 Kaiepi left 00:11 Kaiepi joined 00:12 Kaiepi left 00:13 Kaiepi joined, upupbb-user2 joined 00:22 Kaiepi left 00:29 hungrydonkey joined 00:31 Kaiepi joined 00:43 lucasb left 00:51 upupbb-user2 left 00:54 vrurg left 00:56 vrurg joined 01:01 tinmarino joined, vrurg left 01:03 vrurg joined
tinmarino Hi, all. I have a question. I am making a Slang to have varaible without any sigils. additionaly set "no strict" automatically. So I just permit `<?>` in sigil which is fine but some tests fails. I would like `$<sigil>.Str` to return '$' in case "<?>" was matched. 01:05
Here is the [module](github.com/tinmarino/nogil). Arne asked a similar question [here](stackoverflow.com/questions/55079169) 01:07
01:07 vrurg left
tinmarino I know it is 3am in Europe ... maybe you'll find the question tomorrow. Maybe some non-european on the list 01:09
01:27 vrurg joined 01:32 vrurg left 01:33 vrurg joined
tinmarino I described better my problem here : stackoverflow.com/questions/60982963 : I did not want to contaminate Arne post. 01:42
02:06 tinmarino left 02:21 hungrydonkey left 03:10 upupbb-user1 joined 04:09 squashable6 left 04:12 squashable6 joined 05:17 squashable6 left 05:18 squashable6 joined 05:35 tinmarino joined 05:36 tinmarino left 06:14 upupbb-user1 left 06:18 upupbb-user1 joined
tyil jjatria: at a glance it's a good start, I'll need to wake up properly to give actual feedback 06:22
jjatria: if you want to work with an MR, I can push the repo to gitlab 06:23
06:48 [TuxCM] left
AlexDaniel one thing I'll never understand in Raku is the whole is-lazy situation 07:00
for example: 07:01
m: my @a = 1, {last if $_ ≥ 10; $_ + 1} … ∞; say +@a
camelia Cannot .elems a lazy list
in block <unit> at <tmp> line 1
AlexDaniel so for some random reason I cannot even attempt to do certain operations on lists/arrays that are potentially infinite
even if they are in fact not 07:02
and the weird thing is that normally you don't know/don't care if it's lazy or not, you're just writing a sub or method that needs to get the job done 07:04
you can of course spread is-lazy checks all over your code but that's LTA
you can also do `eager` for whatever you get but again that's not as awesome 07:05
or, I don't know, maybe it makes sense?
I guess my point is that in real life most things are not infinite, but many things are is-lazy 07:06
07:29 AlexDaniel` left, unclechu left 07:32 Geth left, Geth joined 07:43 upupbb-user1 left
jjatria tyil: I was going to try the git email thing once this was in better shape, but if you don't mind working on eg. gitlab, then that would certainly be easier for me 07:54
tyil I would prefer to not depend on a centralized, non-free service, but I have a gitlab account regardless
07:57 unclechu joined 08:18 AlexDaniel` joined 08:36 sena_kun joined
lizmat Files=1306, Tests=111227, 224 wallclock secs (28.66 usr 8.28 sys + 3026.75 cusr 281.48 csys = 3345.17 CPU) 08:53
MasterDuke 224 wallclock? 09:01
jjatria tyil: I'll send you the patch on email, I just wanted to have something to show for now 09:02
MasterDuke nine: this is my WIP for writing bytecode on the fly. it's not building, but does it look like i'm on the right track? github.com/MasterDuke17/nqp/commit...6594b27e70 09:05
tyil jjatria: awesome :) 09:08
lizmat MasterDuke: yeah, with about 60 more CPU seconds as well :-(
could be my revert to make native array access faster 09:09
tyil jjatria: I'd put the Dockerfiles in lib/docker, also note that it's bash, not posix sh, so you should use [[ -z $test ]], as opposed to [ -z "$test" ]
MasterDuke or 4221f8225feae173c438b9c726b62898ec4c1e7c ?
linkable6 (2020-04-01) github.com/rakudo/rakudo/commit/4221f8225f Adopt MoarVM-provided value_desc_cont
tyil jjatria: there's a convenience wrapper for mktemp in the project, tmpfile, which will clean up afterwards for you, so you don't need to pay attention to it 09:10
nine lizmat: I'd be a bit surprised if native arrays make up such a large chunk of our spec test time
lizmat yeah, clutching at straws here... :-)
still, it could be a local anomaly
let's see what the next run will bring
MasterDuke ugh, opening a file read+write in nqp dies if it doesn't already exist 09:11
nine MasterDuke: looks sensible. You could write the header last instead of writing and updating single fields later. Do you have any performance numbers yet?
MasterDuke nine: is the header a fixed size? otherwise it'd be moving the file contents around to prepend it 09:12
only artificial benchmarks showing significantly less memory used for only a slight increase in time. but i'm not sure how representative they are 09:13
nine yes, it's a fixed size 09:14
MasterDuke i'm definitely not doing something right, since it currently complains that `Frame has invalid bytecode start point 0 (size 0)`
nine I'd actually be surprised if the memory savings were significant as even the full CORE.setting is just 2.4M in size. 09:15
MasterDuke but if the size are just wrong enough, but may need to resize (i think it defaults to twice the size) just before the last write or so and then there's a lot of wasted space 09:17
and there currently are increases in ssize of 6m during the rakudo compile when i add some logging to asplice 09:18
"increased by: elems = 6038832, start = 0, ssize = 6037504" with a backtrace of write_buf, write_serialized_data, assemble, assemble, assemble_to_file, ... 09:19
maybe heaptrack is getting confused. these are my artificial benchmarks if you want to confirm 09:22
heaptrack ./install/bin/raku --full-cleanup -e 'use nqp; my $a := buf8.new; my int $c = 0; my $f := nqp::open("atatime-reallocate0", "w"); while $c++ < 2_000_000 { $a.write-uint32(nqp::elems($a), $c); if $c %% 100_000 { nqp::writefh($f, $a); $a.reallocate(0) } }; nqp::closefh($f)'
heaptrack ./install/bin/raku --full-cleanup -e 'use nqp; my $a := buf8.new; my int $c = 0; my $f := nqp::open("all", "w"); while $c++ < 2_000_000 { $a.write-uint32(nqp::elems($a), $c) }; nqp::writefh($f, $a); nqp::closefh($f)'
i tried to just use nqp, but heaptrack wouldn't report anything at all 09:23
afk for a bit 09:24
09:35 Ven`` joined
nine I'm not convinced those allocations are a real problem. malloc does not actually reserve or activate the memory you request (memory overcommitment). The kernel will create the mapping, but the actual physical memory is only allocated by 4K page once you access the memory. 09:35
So even if we allocate generously, the actual memory usage may not grow nearly as much 09:36
09:53 upupbb-user1 joined
MasterDuke sure, i'm not saying it's *necessary*. but if it's not appreciably slower than doing the allocations, why not remove the memory pressure? 10:04
nine We usually want to reduce memory pressure because it hurts performance. If the fix turns out to be slower we haven't won but actually lost 10:05
10:06 Altai-man_ joined 10:08 sena_kun left
jjatria tyil: Ah, nice. I'll make those changes you pointed out. Thanks! 10:09
tyil \o/
jjatria One thing that still is not quite right, I think, is that I'm copying only the directory where Raku got installed to keep the image sizes small, but I think this does not include any shared libraries (eg. libreadline) 10:10
tyil jjatria: gitlab.com/tyil/docker-perl6/-/blo...ile/debian might these be of value to you? 10:18
last I checked, those were the smallest docker images with Raku publicly available 10:19
those times may have changed, as I've not been keeping an eye on that
but the dockerfiles remain good nonetheless, and you can see multi-stage builds in action :) 10:20
you can do the "heavy" steps in earlier stages, and in the final stage you only need to copy over the end-results from the earlier stages
so you can freely use apt to your heart's content, and only COPY the relevant library files in the last stage 10:21
jjatria tyil: Nice, yeah, I can use those. I was already doing some multistaging, to allow me to use the sources already fetched by rstar, for example, but it gives me a good model for eg. WORKDIR, etc 11:03
It also seems like we were copying the same bits, so that at least is reassuring 11:04
tyil :> 11:07
multistage builds are highly convenient
they're reasonably easy to understand, and they can make your dockerfile a whole lot cleaner on very big builds 11:08
nine So the docker world slowly rediscovers what the distro world learned in packaging over a couple of decades?
11:09 ufobat_ left, ufobat joined
jnthn There's nothing new under the sun... :) 11:11
tyil nine: its $current-year, it's not hip if you don't reinvent the wheel at least twice and still end up with an inferiour end-product 11:27
Altai-man_ .oO ( Lindy effect ) 11:40
12:07 sena_kun joined 12:08 Altai-man_ left 12:10 Ven`` left
lizmat spend a few hours on trying to make native array[42] access faster again, but gives up 12:15
12:22 Ven`` joined
lizmat is definitely not grokking the native shaped array implementation 12:29
13:09 masak joined, Guest54471 left
Geth rakudo: Kaiepi++ created pull request #3589:
Improve X::Syntax::Variable::MissingInitializer's message
13:19 masak is now known as Guest16689
Geth roast: Kaiepi++ created pull request #632:
Update tests WRT X::Syntax::Variable::MissingInitializer's new msgs
14:06 Altai-man_ joined 14:08 sena_kun left
MasterDuke getting close (i think), now the error is 'Special frame index out of bounds' 14:42
heh, one error condition is `rs->main_frame > rs->expected_frames`. i'm getting an rs->main_frame of 71976 and an rs->expected_frames of 176 14:45
14:52 tinmarino joined 14:55 tinmarino left 15:23 ufobat_ joined 15:27 ufobat left, [Coke] left 15:49 [Coke] joined, [Coke] left, [Coke] joined 16:06 sena_kun joined 16:09 Altai-man_ left 17:25 Ven`` left
nine So, why is my Inline::Perl5 testcase leaking memory? Because it doesn't read a package variable like $TestMemory::idontevenexistbutthatdoesntmatter 17:39
That's the difference between this test case and the existing test file that checks if destructors are called. The latter uses such variables to count destructor calls
Now why that variable access makes a difference? Why indeed 17:40
17:44 upupbb-user1 left
nine And no, that package global doesn't have to be anything related to Perl 5 17:45
So this grows and grows: 17:54
raku -Ilib -e 'use lib:from<Perl5> "t/lib"; use TestMemory:from<Perl5>; loop { { my $tm = TestMemory.new; $tm.noop; }; use nqp; nqp::force_gc; }'
While this doesn't:
raku -Ilib -e 'use lib:from<Perl5> "t/lib"; use TestMemory:from<Perl5>; loop { { my $tm = TestMemory.new; $tm.noop; }; use nqp; nqp::force_gc; $i::j }'
jnthn m: dd $i::j 18:03
camelia Any element{'$j'} = Any
jnthn nine: Is there any difference in how many DESTROY callbacks run between the two? 18:04
nine yes, the version with $i::j clearly runs those DESTROYers 18:05
The other one has been running for 10 minutes now without running a single one 18:06
18:06 Altai-man_ joined
jnthn OK. The thing is, destroy blocks are currently run by setting up a block exit handler. 18:06
I'm wondering if somehow the only place we ever attach that - perhaps thanks to inlining - ends up being the compunit 18:07
And allocations all happen there too
Whereas when we insert `$i::j` we make a Scalar allocation in another block, and that forces collects 18:08
18:08 sena_kun left
jnthn I'm...a little surprised that a real world application would suffer from this given it allocates all over. OTOH, now you mention this, I recall github.com/rakudo/rakudo/issues/28...-492688481 also (which I'd completely forgotten about) 18:09
vrurg jnthn: not sure if this is related, but there is another issue with DESTROYs not been invoked: github.com/rakudo/rakudo/issues/2898 18:10
oops... same link. 18:11
nine jnthn: running DESTROYers in their own thread would be pretty catastrophic for Inline::Perl5...
jnthn I'm...not sure to what degree thread affinity is promised there today, tbh 18:12
Ah, it is 18:13
There's a queue per thread context
I wonder what other mechanism we could find for ensuring this is run more often... 18:14
Well, or doesn't depend on the current frame existing 18:15
nine In our Cro applications we use one Inline::Perl5 interpreter per thread via a role mixed into $*THREAD: gist.github.com/niner/13f6f2160ea6...55e9c7bdb9
I guess we're not keen on nested runloops? 18:16
jnthn No, plus I don't know that you'll be in a good state to invoke 18:17
Just 'cus something is an allocation safepoint doesn't mean anything else will go well.
I'm a bit confused how this happens in a Cro application that is processing requests though; surely the incoming request handler allocates all over the place too 18:18
nine To be clear: I don't say that this is what's causing our leaks in Cro applications. It's just what I came across when trying to get a reduced test case. So far it has yielded one actual leak in Inline::Perl5 and a source of segfaults. 18:19
jnthn OK
I'm still wondering based on #2989 if there's something else dubious going on...
nine Oh, I definitely found another Inline::Perl5 issue. While TestMemory.new.noop is fine, TestMemory.new.self leaks. The latter returns the invocant. This means that when returning we have 2 references to that object, so we won't sever the link from the Perl 5 object to the Raku object as if the Perl 5 object was still in use. But it actually isn't as both references will be from Raku. 18:28
Damn this stuff is complicated
20:07 sena_kun joined 20:08 Altai-man_ left 20:29 maggotbrain left
timotimo you can reference that twice 20:34
Geth ¦ nqp: vrurg self-assigned Building NQP on Windows github.com/Raku/nqp/issues/609 21:03
roast: vrurg++ created pull request #633:
Cover special case of wrapping first multi-candidate
rakudo: vrurg++ created pull request #3590:
Fix for wrapping of parent's first multi-candidate
vrurg .ask AlexDaniel don't you think it actually makes sense to have unified 'dispatching' label instead of specific 'multimethod' in rakudo repo? 21:25
tellable6 vrurg, I'll pass your message to AlexDaniel
AlexDaniel . 21:26
vrurg: change it!
vrurg Ok, didn't want to do it without asking. :)
cognominal Do you think it is possible to extend rakudo to support user defined dotty operators. Like for supporting optional chaining à la javsacript. Yea, dotty user, that's me. developer.mozilla.org/en-US/docs/W...l_chaining 21:33
AlexDaniel cognominal: well… we already have .? :) 21:37
m: say 5.Rat.succ.?nude 21:38
camelia (6 1)
AlexDaniel m: say Int.Rat.succ.?nude
camelia Invocant of method 'Rat' must be an object instance of type 'Int', not a type object of type 'Int'. Did you forget a '.new'?
in block <unit> at <tmp> line 1
AlexDaniel m: say 5.Rat.succ.?nude
camelia (6 1)
AlexDaniel m: say 5.succ.?nude
camelia Nil
AlexDaniel I mean, whatever
it's a bit different though, but it is sometimes useful 21:39
lizmat m: dd Nil.foo
camelia Nil
lizmat cognominal: also note that (almost) any method called on Nil will give Nil 21:40
m: 42.?foo.bar.baz.zippydoodah
camelia ( no output )
lizmat m: dd 42.?foo.bar.baz.zippydoodah
camelia Nil
AlexDaniel and then there's also andthen 21:41
lizmat m: dd 1 ... 5.5
camelia (1, 2, 3, 4, 5).Seq
lizmat m: dd 1 ...^ 5.5 21:42
camelia (1, 2, 3, 4, 5).Seq
lizmat huh? shouldn't that need to be 1,2,3,4 ?
AlexDaniel m: Nil andthen .nude.say
camelia ( no output )
AlexDaniel m: 5.5 andthen .nude.say
camelia (11 2)
AlexDaniel lizmat: why? who said that sequences are int-only?
m: dd 0.5, 1 ...^ 5.5 21:43
camelia (0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0).Seq
lizmat my interpretation is that ...^ should exclude the final element
AlexDaniel it didn't include 5.5 for sure :)
lizmat but that case is clear to me... 21:44
AlexDaniel it's more about the condition
lizmat documentation: "For the ... operator, the final element is included, for the ...^ operator it's excluded." 21:45
AlexDaniel hmmmm
lizmat: actually, you're probably right… 21:47
at first I thought the docs are wrong but now that I look at it it's a bit weird :S
so these are currently identical: 21:48
m: dd 1 ... 5.5
camelia (1, 2, 3, 4, 5).Seq
AlexDaniel m: dd 1 ...^ 5.5
camelia (1, 2, 3, 4, 5).Seq
AlexDaniel lizmat: I guess it's because .. acts the same way? 21:51
lizmat well, I think ... exists because it wants to be different from ..
I don't think this case is tested 21:53
AlexDaniel c: all .say for 1 ...^ 5.5 21:56
22:06 Altai-man_ joined 22:09 sena_kun left
committable6 AlexDaniel, gist.github.com/bef124b41bb65f7606...e6bdf82e10 22:18
AlexDaniel heh gist.githubusercontent.com/Whateve...d3b/result 22:29
23:21 sena_kun joined 23:23 Altai-man_ left
Geth rakudo: 306d87b0df | (Vadim Belman)++ | src/Perl6/Metamodel/Dispatchers.nqp
Fix for wrapping of parent's first multi-candidate

Resolves the problem described by @jnthn in Raku/problem-solving#170. The point of this fix is to make wrapper dispatcher transparent for the wrapped routine. Whatever combination of dispatcher/nextdispatcher the wrapped routine was invoked with – the same combination must be used when invoking the last candidate which is the actual wrapped routine code.
rakudo: 2cbf58372f | (Vadim Belman)++ (committed using GitHub Web editor) | src/Perl6/Metamodel/Dispatchers.nqp
Merge pull request #3590 from vrurg/problem-solving-170

Fix for wrapping of parent's first multi-candidate
roast: d96a5e1eee | (Vadim Belman)++ | S06-advanced/dispatching.t
Cover special case of wrapping first multi-candidate

Solves a problem described by @jnthn in Raku/problem-solving#170. When the first multi-candidate of a method is wrapped on a parent class the control is then returned to the `MethodDispatcher` causing the rest multi-candidates to be skipped.
roast: b3e3ecce95 | (Vadim Belman)++ (committed using GitHub Web editor) | S06-advanced/dispatching.t
Merge pull request #633 from vrurg/problem-solving-170

Cover special case of wrapping first multi-candidate
23:55 upupbb-user2 joined