00:42 evalable6 left, notable6 left, tellable6 left, bisectable6 left, unicodable6 left, nativecallable6 left, bloatable6 left, squashable6 left, committable6 left, shareable6 left, releasable6 left, greppable6 left, statisfiable6 left, sourceable6 left, benchable6 left, coverable6 left, quotable6 left, linkable6 left, reportable6 left, evalable6 joined, nativecallable6 joined, committable6 joined, releasable6 joined, reportable6 joined 00:43 unicodable6 joined, tellable6 joined, statisfiable6 joined, quotable6 joined, squashable6 joined 00:44 bisectable6 joined, bloatable6 joined, linkable6 joined, shareable6 joined, greppable6 joined 00:45 coverable6 joined, notable6 joined, benchable6 joined, sourceable6 joined 02:15 AlexDani` left 02:16 AlexDani` joined 03:31 MasterDuke left 04:37 Kaiepi left 04:47 Kaiepi joined 06:44 MasterDuke joined 08:12 shareable6 left, notable6 left, evalable6 left, releasable6 left, nativecallable6 left, benchable6 left, tellable6 left, statisfiable6 left, greppable6 left, bisectable6 left, unicodable6 left, quotable6 left, committable6 left, reportable6 left, squashable6 left, linkable6 left, sourceable6 left, bloatable6 left, coverable6 left 08:13 releasable6 joined, bisectable6 joined, nativecallable6 joined, notable6 joined, unicodable6 joined, statisfiable6 joined, linkable6 joined 08:14 coverable6 joined, quotable6 joined, sourceable6 joined, tellable6 joined, benchable6 joined, evalable6 joined, squashable6 joined 08:15 shareable6 joined, bloatable6 joined, greppable6 joined, reportable6 joined, committable6 joined 08:43 Summertime left 08:45 Summertime joined
lizmat Files=1306, Tests=111230, 223 wallclock secs (29.02 usr 8.37 sys + 3028.17 cusr 279.57 csys = 3345.13 CPU) 08:52
hmmm.. 50 CPU secs more than the last time 08:53
09:15 sena_kun joined
MasterDuke the new tests you added running in parallel with existing tests, so same wallclock, but more cpu? 09:50
lizmat you mean the new ... tests ? they are not part of make spectest yet 09:57
wallclock is 11 more than yesterday
MasterDuke huh. i just ran one and the numbers didn't look crazy, but i reset yesterday so i don't have any scrollback to actually compare to 10:01
10:13 Kaiepi left 10:14 Kaiepi joined 10:39 Altai-man_ joined 10:41 sena_kun left 10:44 Kaiepi left, Kaiepi joined 11:22 AlexDani` is now known as AlexDaniel, AlexDaniel left, AlexDaniel joined
AlexDaniel tellable6: Xliff 11:27
tellable6 AlexDaniel, I saw Xliff 2020-04-07T23:45:41Z in #raku-dev: <Xliff> Hmm....
AlexDaniel hmmm
11:41 Xliff joined
Xliff \o 11:41
m: my $a = '%s is rw'; my $start = now; for ^10000 { for <loop hah dur feta> { my $b - $a.sprintf($_); ); LAST say now - $start; }; 11:42
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing block
at <tmp>:1
------> 3hah dur feta> { my $b - $a.sprintf($_); 7⏏5); LAST say now - $start; };
Xliff m: my $a = '%s is rw'; my $start = now; for ^10000 { for <loop hah dur feta> { my $b - $a.sprintf($_); }; LAST say now - $start; };
camelia WARNINGS for <tmp>:
Useless use of "-" in expression "my $b - $a.sprintf($_)" in sink context (line 1)
Use of uninitialized value of type Any in numeric context
in block at <tmp> line 1
Cannot convert string to number: base-10 number must b…
Xliff m: my $a = '%s is rw'; my $start = now; for ^10000 { for <loop hah dur feta> { my $b = $a.sprintf($_); }; LAST say now - $start; };
camelia 4.5798884
Xliff Is it just me, or is that awfully slow? (It's even slower on repl.it/languages/perl6) 11:43
11:45 Kaiepi left
MasterDuke Xliff: sprintf is know to be very slow. lizmat is/was working on a faster reimplementation 11:46
lizmat it's on the back burner atm 11:47
the problem with sprintf is that it uses a grammar
and *every* call to sprintf parses the format string with the grammar, and the associated actions build the result string 11:48
my approach would let the grammar parse the format string once, build a piece of code, EVAL that and cache that
problem with that approach is that the EVAL overhead is only cancelled out after about 100 runs of the same format string 11:49
before that, my approach is slower
am now thinking of building AST's to prevent the expensive EVAL step 11:50
and hoping that jnthn's work on macros will make that a lot easier
jnthn Speaking of which, just published the talk slides and a video about that: twitter.com/jnthnwrthngtn/status/1...0666461185
11:51 Kaiepi joined
Geth_ rakudo: b9105f1a8b | (Elizabeth Mattijsen)++ | 3 files
Show that the Supply class is spread over 3 files

Should fix R#3615
linkable6 R#3615 [open]: github.com/rakudo/rakudo/issues/3615 Closing curly brace missing?
jnthn Why is it spread over 3 files, btw? I never know where to look any more. :P 11:52
(Though `git grep` to the rescue)
11:53 Kaiepi left 11:54 Kaiepi joined
lizmat I guess for the same reason we have an Any.pm6 and a Any-iterable.pm6 ? 11:54
I split it up because I was adding quite a few methods, and it already had a separation in core / factories / coercers sort of 11:55
jnthn: if you want it merged again, I can do that 11:56
jnthn Don't worry for now, I don't really work on CORE.setting
So it's not that important what I think :)
nine jnthn: it's kinda nice that with the video, you can actually stand in front of the nice background instead of just showing a pretty picture on the projector :) 11:59
11:59 Kaiepi left 12:00 Kaiepi joined
nine That's something that one could take further....a lot further... like speaking in front of a pretty mountain top, some nice woods, a jungle... 12:00
Somehow I end up with a very Bear Grylls like into with jnthn in a helicopter next to the open door over some waterfall "Hi folks, let's talk about object models" 12:01
jnthn :D 12:02
AlexDaniel lizmat: I just realized that you can use … with multiple values and it's a bugnest of its own 12:09
m: .say for 1…5.5
camelia 1
lizmat it is :-)
AlexDaniel m: .say for 1…3…5.5
camelia 1
AlexDaniel should be the same I think 12:10
lizmat agree
AlexDaniel and this I don't even know how it's supposed to behave:
m: .say for 1…5.5…1
camelia 1
AlexDaniel lizmat: at least you can't do that with …^, that's nice 12:11
m: .say for 1^…^3^…^5.5
camelia 2
AlexDaniel I mean… um… whatever… 12:12
and you know what? 12:13
you can also do that with strings, because of course we have that special case
m: .say for "ac"^…^"cc"^…^"ac" 12:14
camelia bc
AlexDaniel not that it works any better without ^…^
m: .say for "ac"…"cc"…"ac"
camelia ac
AlexDaniel and you'd think that it'd work better with the generic .succ/.pred case 12:17
jnthn If I'd had to guess, I'd have thought ... was non-assoc...
AlexDaniel m: .say for "a".IO…"c".IO…"c".I
camelia No such method 'I' for invocant of type 'Str'. Did you mean 'IO'?
in block <unit> at <tmp> line 1
AlexDaniel jnthn: if I had to guess I'd have thought that … uses .succ/.pred instead of doing magic 12:18
jnthn AlexDaniel: I tend to consider ... as the thing that *does* to magic (e.g. deducing sequences) as opposed to Range (which is far simpler because all the magic was put into ...). 12:19
AlexDaniel then we end up with both ops doing magic :)
m: .say for "a".IO…"c".IO…"c".IO 12:20
camelia "a".IO
Cannot get sequence start value from an empty list
in block <unit> at <tmp> line 1

jnthn I don't know that .. is especially magical?
I mean, for strings it knows unicode ranges, and I'm not sure those are actually part of the Unicode spec, which is arguably magical 12:21
AlexDaniel jnthn: unicode ranges? You mean pattern generation? 12:22
like, this is far from being a range: 12:23
m: .say for ‘aa’..‘ca’
camelia aa
AlexDaniel and this is more like a range:
m: .say for ‘aa’.IO..‘ca’.IO
camelia "aa".IO
lizmat the default is to use .succ
jnthn Oh wait, that's actaully derived from .succ behavior :)
So the "magic" is just there
So what *does* ... do on Str? :) 12:24
AlexDaniel same as .. some sort of string generation based on the patterns you give
jnthn m: say "a", "c" ... "x" 12:25
camelia (a c d e f g h i j k l m n o p q r s t u v w x)
AlexDaniel pfffft
jnthn Arguably that should be "a", "c", "e", though maybe that's asking for trouble :P
.oO( coming up: geometric string ranges )
jnthn I'm not convinced it's actually very useful :)
lizmat I think in the specs, TimToady said to only do that magic on numerics
jnthn Yeah 12:27
AlexDaniel I mean, sequences, but you get the point :)
jnthn I mean, even dice faces, but by the time you specified 2, 4, and 6 you've written the full list of them :P
12:27 Kaeipi joined, Kaiepi left
lizmat also, 'a' ... 'c' will do codepoint increment if both endpoints are 1 codepoint 12:27
jnthn So yeah, I'd agree with TimToady to keep deduction just to numerics 12:28
lizmat otherwise it will do .succ
jnthn Hmm, why?
lizmat jnthn: ask TimToady ?
jnthn haha :) 12:29
lizmat but basically, anything that knows how to do .succ should work
m: dd Date.today ... Date.new(2020,5,1)
camelia (Date.new(2020,4,11), Date.new(2020,4,12), Date.new(2020,4,13), Date.new(2020,4,14), Date.new(2020,4,15), Date.new(2020,4,16), Date.new(2020,4,17), Date.new(2020,4,18), Date.new(2020,4,19), Date.new(2020,4,20), Date.new(2020,4,21), Date.new(2020,4,22)…
jnthn Yes, that makes sense, I'm just not sure why single codepoints are different, and wondering if it was just optimization or something else.
lizmat I don't think it's an optimization, it's to allow things like this to work: 12:30
AlexDaniel jnthn: dunno if you read my thoughts on it some time ago, but even if we do remove special casing for Strs and just let it .succ then we'll still have this issue:
m: .say for (‘-5’..*)[^10]
camelia -5
AlexDaniel which is kinda bad in its own way
lizmat m: dd "█" ... "▁"
camelia ("█", "▇", "▆", "▅", "▄", "▃", "▂", "▁").Seq
AlexDaniel uniprop: █ 12:32
unidump: █
unicodable6 AlexDaniel, gist.github.com/301a4a59a858070344...d72b7db42d
12:40 sena_kun joined 12:41 Altai-man_ left
nine I've just looked through our HTML templating modules and none of them, not even Cro::WebApp::Template does the right thing and puts a compiled result into a precomp store :( 13:02
Xliff nine++: I was wondering about that.
nine: What do you think... Templates compile down to a QAST? 13:03
nine Xliff: well Cro::WebApp::Template for example compiles the template into Raku and EVALs that. 13:06
The precomp store and the precompilation repository would provide lots of very useful functionality for such a used case, e.g. all the up-to-date checking 13:07
lizmat jnthn: just having watched your excellent presentation... looking forward to the initial release and applying my sprintf work on it
13:07 Kaeipi left
lizmat jnthn: one question, re LessVM: have you considered going for something like LLVM as a base ? And if not, why not :-) 13:08
jnthn nine: I tried to do some kind of precomp for template modules (e.g. where you have a distribution just for templates) and ran into trouble. 13:09
nine: And didn't have time to debug it (actually needed to work on the project we were meant to be delivering :))
Xliff nine: Ahh. Yeah. It would be nice take said Raku and get it rendered into a QAST. Then we can take that to bytecode.
13:11 Kaiepi joined
jnthn nine: On templates at development time, though, I'd like an option to reload the on any change without restarting the process during development, because it's a bit of a waste to restart the whole process just for a template tweak (especially when doing visual/layout tweaks) 13:11
nine true, true 13:12
jnthn lizmat: Well, the whole joke there is largely that "less is moar" - e.g. it's evolution rather than revolution. :) There are numerous articles out there on the downsides of LLVM for a dynamic language JIT from those who have tried it, however. 13:13
Well, maybe numerous overstates it, but they exist.
13:14 Kaiepi left, Kaiepi joined
sena_kun oh, there is a talk released? link pls? 13:14
lizmat twitter.com/jnthnwrthngtn/status/1...0666461185 13:15
sena_kun yay, thanks! will watch after $dayjob... 13:16
13:38 Kaiepi left 13:44 Kaiepi joined
MasterDuke jnthn++ very interesting 13:56
14:06 Kaeipi joined
nine is quite proud that he thought of the bootstrap issue and that the variable is gonna need a block to live in bevore jnthn said it :) 14:06
14:07 Kaiepi left
nine Sounds like in the end, the mbc backend I wrote in NQP will be somewhat beneficial for the RakuAST and maybe even for migrating spesh into the higher levels :) 14:38
14:39 Altai-man_ joined 14:42 sena_kun left
Kaeipi the rakuast stuff is really exciting, macros are something i've wanted to be usable for a long time 14:57
Xliff Same here 15:10
15:51 patrickb joined
Geth_ nqp: acf41ba617 | Coke++ | docs/ops.markdown
Add substr3 doc
[Coke] going through docs, I see a lot of VM specific opcodes. Should we be working towards unifying the opcode set? 16:27
e.g. : 'rindexfromend' in the JVM backend only. it's only used to supply the 2 arg version of rindex 16:28
(I see that they're tagged as "Internal" in the docs (need to update the doc test to understand that), but that's just advisory. 16:29
16:40 sena_kun joined 16:41 Altai-man_ left
Geth_ nqp: 6ad50effff | Coke++ | t/docs/opcodes.t
allow VM overrides at the opcode level...

  ... not just for the heading row. Follows what the
existing markdown was already doing, improves test reporting
nqp: f6906e4678 | Coke++ | docs/ops.markdown
Update VM marks
nqp: 1c3a49def5 | Coke++ | docs/ops.markdown
Treat JS-specific NFG opcodes as variants
nqp: 9074950e41 | Coke++ | docs/ops.markdown
treat substr2/3 as variants
nqp: f9df3f1cab | Coke++ | docs/ops.markdown
add substr variants
[Coke] wonders why the opcode is 'falsey' and not 'not' 17:51
Geth_ nqp: 8ce2ce4cc6 | Coke++ | docs/ops.markdown
document falsey
nqp: a7bb66ddac | Coke++ | docs/ops.markdown
add some variants
18:09 AlexDaniel left
Geth_ nqp: 70520fb5f7 | Coke++ | t/docs/opcodes.t
Find a few more op definitions in JS VM
[Coke] (326 fails left) 18:11
Geth_ nqp: coke self-assigned Bunch of things undocumented github.com/Raku/nqp/issues/293
d06ab4ee3e | (Stefan Seifert)++ | src/vm/moar/HLL/Backend.nqp

Seems like sqlite3 deals badly with insert statements containing a large number of data records. A generated profile with lines that are several 100 MB long, sqlite3 can use 10s of GB of memory to process. Use the already existing batching infrastructure to split those lines into multiple insert statements for call data.
18:39 Altai-man_ joined 18:42 sena_kun left
lizmat m: use nqp; say nqp::falsey(42) 19:00
camelia ===SORRY!===
No registered operation handler for 'falsey'
lizmat [Coke] ^^^ ??
[Coke] Whoops. 19:01
maybe it's QAST only?
was just pulling them out of the source, wasn't actually testing they were usable. :)
lizmat I only see it in nqp, nowhere in the Raku sources 19:02
maybe it's an old name of nqp::isfalse ?
[Coke] both moar & jvm nqp have: $ops.add_hll_op for it.
and js has a slightly different variant. 19:03
nqp: nqp::say(3)
camelia 3
[Coke] nqp: nqp::say(nqp::falsey(0));
camelia 1
[Coke] No clue why it isn't mapped in rakudo. 19:04
lizmat well, for the functionality documented, I use nqp::isfalse in Rakudo 19:05
[Coke] Maybe we can kill it. 19:06
worth opening a ticket for "why do we have both of these" - if there is a difference, we should document it.
lizmat nine++ 19:08
nine With this sqlite3 tops out at ~ 4G of RSS versus running out of memory with > 44G available...
I think splitting allocations would be quite beneficial as well. Alas, rakudo probably will run out of memory before being able to write a profile that large 19:09
dogbert17 m: my int $i = -(2**63); say $i; say abs($i) # ? 19:39
camelia -9223372036854775808
20:10 AlexDaniel joined, AlexDaniel left, AlexDaniel joined 20:34 AlexDaniel left 20:40 sena_kun joined 20:41 Altai-man_ left 21:10 AlexDaniel joined, AlexDaniel left, AlexDaniel joined 21:18 Kaeipi left 21:19 Kaeipi joined 21:22 AlexDaniel left 21:24 AlexDaniel joined 21:28 AlexDaniel left 21:40 AlexDaniel joined, AlexDaniel left, AlexDaniel joined
AlexDaniel sourceable6: &[…]((1, 2, 4), ∞) 22:29
sourceable6 AlexDaniel, github.com/rakudo/rakudo/blob/b910...s.pm6#L129
AlexDaniel hmm 22:30
sourceable6: Seq.new(SEQUENCE((1, 2, 4), ∞))
sourceable6 AlexDaniel, github.com/rakudo/rakudo/blob/b910...eq.pm6#L10
AlexDaniel sourceable6: SEQUENCE((1, 2, 4), ∞) 22:31
sourceable6 AlexDaniel, github.com/rakudo/rakudo/blob/b910...NCE.pm6#L1
22:39 Altai-man_ joined 22:42 sena_kun left 22:48 patrickb left
AlexDaniel m: say (1, -1, 1 … -1)[^5] 22:50
camelia (1 -1 Nil Nil Nil)
AlexDaniel hmm
arguably same as this: 22:51
m: say (1, 2, 3 … 2)[^5]
camelia (1 2 Nil Nil Nil)
AlexDaniel kinda makes sense, kinda
23:02 cognominal joined
AlexDaniel lizmat, jnthn: okay that may sound crazy but even geometric sequences are not very justified in my eyes 23:04
as a party trick, maybe
23:05 cognomin_ left
AlexDaniel m: say (-1, -2, -4 … *)[^10] 23:05
camelia (-1 -2 -4 -8 -16 -32 -64 -128 -256 -512)
AlexDaniel m: say (-1, -2, -4 … -16)[^10]
camelia (Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil)
AlexDaniel bug.
probably the first bug I discovered solely by staring at the code :)
like, I think it'd be nice to have a well-defined feature set that we can actualy get right 23:08
and also * × 2 isn't that hard to write anyway 23:10
jnthn Complexity you push out of the standard library will just pop up in non-standard ones. 23:13
AlexDaniel except that nobody is going to implement the absolutely unnecessary logic for geometric sequences or weird string generation 23:14
m: say (-1, {$_ × 2} … -16)[^10] 23:15
camelia (-1 -2 -4 -8 -16 Nil Nil Nil Nil Nil)
jnthn Dunno about the string one; geometric progressions aren't so unusual though.
AlexDaniel look how this just works
it's a bit more complicated if the endpoint is not in the sequence though 23:16
jnthn (For example, in doing back-off when retrying)
AlexDaniel jnthn: if they're so unusual add another operator or function
same for string stuff
how come a single operator has to deal with all of the edge cases 23:17
(and get half of them wrong)
jnthn I said they're *not* unusual
AlexDaniel jnthn: yeah, I read it right but replied wrong. If they're so common add another operator or function 23:18
jnthn I don't really see how that'd help; you'd just have the logic elsewhere. Logic that only comes into play if you don't provide a function to generate the next value. 23:19
AlexDaniel m: say (1,2,4 … 256 … 2)[^10] 23:21
camelia (1 2 4 8 16 32 64 128 256 255)
AlexDaniel so you don't think that separate manageable functionality where all the unneeded stuff is thrown away is easier to maintain?
or that it is easier to document, understand and teach? 23:22
jnthn You're assuming your lack of need reflects everyone elses.
AlexDaniel what's the need we're talking about 23:23
jnthn Anyway, enough.
AlexDaniel I just can't look at this bloat anymore
m: say (1, 2, 4 … 256 … ∞)[^10] 23:29
camelia (1 2 4 8 16 32 64 128 256 257)
AlexDaniel it's kinda cool you can actually reverse it geometrically too 23:31
m: say (1, 2, 4 … 256, 128, 64 … 0)[^20]
camelia (1 2 4 8 16 32 64 128 256 128 64 32 16 8 4 2 1 0.5 0.25 0.125)
AlexDaniel this one is kinda interesting :) 23:46
m: say (-Inf, 0, Inf … Inf)[^20]
camelia (-Inf NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN)
AlexDaniel m: say (-Inf, 0, Inf … 0)[^20]
camelia (-Inf 0 Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil)
AlexDaniel but yeah infs are unfair 23:47
there are other meaningless cases that are weird too, but at least they don't matter as much 23:50
m: say (False, True … False)[^20]
camelia (False 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)
AlexDaniel m: say (False, True … True)[^20] 23:51
camelia (False Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil)
AlexDaniel so both are wrong because of Bool special-casing on the endpoint, but there's probably some reason for it
ah 23:54
finally found something in the most basic code path
m: say (5, 5 … 10)[^20]
camelia (Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil Nil)
AlexDaniel m: say (5, 5 … -10)[^20] 23:55
camelia (5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5)