00:35
guifa2 left
00:42
guifa2 joined
00:51
guifa2 left
01:03
sena_kun joined
01:05
Altai-man_ left
01:10
Kaiepi joined
01:27
AlexDaniel joined,
AlexDaniel left,
AlexDaniel joined
|
|||||||||||||||||||||||||||||||||||||||
Geth | nqp: 62b3b791d4 | Coke++ | docs/ops.markdown document hllboxtype |
01:28 | |||||||||||||||||||||||||||||||||||||
[Coke] | hlllist and hllhash look like they are supposed to be returning type objects, but appear to be returning instances. Is returning an instance the desired behavior? | 01:30 | |||||||||||||||||||||||||||||||||||||
m: use nqp; dd nqp::hllhash, nqp::hlllist | |||||||||||||||||||||||||||||||||||||||
camelia | Hash element = {} () |
||||||||||||||||||||||||||||||||||||||
[Coke] | also: what is hllboolfor for? (compared to hllbool) | 01:33 | |||||||||||||||||||||||||||||||||||||
01:33
cognomin_ joined
01:37
cognominal left
|
|||||||||||||||||||||||||||||||||||||||
Geth | nqp: 467c158b50 | Coke++ | docs/ops.markdown Document hlllist, hllhash |
01:39 | |||||||||||||||||||||||||||||||||||||
nqp: 0f8e71a07c | Coke++ | docs/ops.markdown whitespace, cleanup |
|||||||||||||||||||||||||||||||||||||||
[Coke] | ^^ below 300 test failures on the ops docs test. | ||||||||||||||||||||||||||||||||||||||
timotimo | isn't it for passing the HLL name? | 01:41 | |||||||||||||||||||||||||||||||||||||
hllboolfor(1, "perl6") vs hllboolfor(1, "nqp") or so? | 01:42 | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: use nqp; dd hllboolfor(1,"nqp") | 01:48 | |||||||||||||||||||||||||||||||||||||
camelia | 5===SORRY!5=== Error while compiling <tmp> Undeclared routine: hllboolfor used at line 1 |
||||||||||||||||||||||||||||||||||||||
[Coke] | m: use nqp; dd nqp::hllboolfor(1,"nqp") | ||||||||||||||||||||||||||||||||||||||
camelia | (signal SEGV) | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: use nqp; dd nqp::hllboolfor(1,"Raku") | ||||||||||||||||||||||||||||||||||||||
camelia | Bool::True | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: use nqp; dd nqp::hllboolfor(1,"tcl") | ||||||||||||||||||||||||||||||||||||||
camelia | (signal SEGV) | ||||||||||||||||||||||||||||||||||||||
[Coke] | that seems bad. :) | 01:49 | |||||||||||||||||||||||||||||||||||||
timotimo: Do they *all* take a name? I couldn't get an arg to do anything, and they seem to work without it. | 01:50 | ||||||||||||||||||||||||||||||||||||||
timotimo | no, only the one with "for", if at all | ||||||||||||||||||||||||||||||||||||||
but yeah, it grabs the HLL for the given string, and pulls the true or false value out of it | 01:51 | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: use nqp; dd nqp::hllboxtype_s, nqp::hllboxtype_i, nqp::hllboxtype_n, nqp::hlllist, nqp::hllhash, nqp::hllbool(0), nqp::hllbool(1) | ||||||||||||||||||||||||||||||||||||||
camelia | Str Int Num () Hash element = {} Bool::False Bool::True |
||||||||||||||||||||||||||||||||||||||
timotimo | hlllist definitely returns a type. if not, it would have one instance that i s shared with everything | ||||||||||||||||||||||||||||||||||||||
m: use nqp; my $a := nqp::hlllist(); $a.push(1); say $a; my $b := nqp::hlllist(); say $b | 01:52 | ||||||||||||||||||||||||||||||||||||||
camelia | Cannot find method 'push' on 'BOOTArray': no method cache and no .^find_method in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
[Coke] | quirk of dd that it looks like List.new instead? | ||||||||||||||||||||||||||||||||||||||
timotimo | m: use nqp; my $a := nqp::hlllist(); nqp::push($a, 1); say $a; my $b := nqp::hlllist(); say $b | ||||||||||||||||||||||||||||||||||||||
camelia | push_o requires a concrete object (got a BOOTArray type object instead) in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
timotimo | perhaps | ||||||||||||||||||||||||||||||||||||||
Geth | nqp: d55e3b70e6 | Coke++ | docs/ops.markdown fix desc for hlllist, hllhash timotimo++ |
01:54 | |||||||||||||||||||||||||||||||||||||
03:02
Altai-man_ joined
03:05
sena_kun left
|
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | sourceable6: Channel.new.send(42) | 03:25 | |||||||||||||||||||||||||||||||||||||
sourceable6 | AlexDaniel, github.com/rakudo/rakudo/blob/ec50...el.pm6#L42 | ||||||||||||||||||||||||||||||||||||||
04:22
hungrydonkey joined
05:03
sena_kun joined
05:04
[Coke] joined,
[Coke] left,
[Coke] joined
05:05
Altai-man_ left
05:55
hungrydonkey left
06:03
guifa2 joined
|
|||||||||||||||||||||||||||||||||||||||
nine | timotimo: I'm super happy with my Kinesis Freestyle 2. Can't imagine using a flat keyboard anymore | 06:27 | |||||||||||||||||||||||||||||||||||||
06:38
lichtkind joined
07:02
Altai-man_ joined
07:05
sena_kun left
07:06
hungrydonkey joined
09:03
sena_kun joined
09:05
Altai-man_ left
09:20
MasterDuke left
|
|||||||||||||||||||||||||||||||||||||||
lizmat | timotimo: :fromend sounds nice | 10:05 | |||||||||||||||||||||||||||||||||||||
10:18
lichtkind_ joined
10:20
lichtkind left
10:24
squashable6 left
10:25
squashable6 joined
|
|||||||||||||||||||||||||||||||||||||||
timotimo | nine: i'm not sure i'd settle for anything that doesn't run qmk; there are ways to get qmk onto it, but they require adding a new controller and soldering or jumpering | 10:33 | |||||||||||||||||||||||||||||||||||||
camo.githubusercontent.com/6e6076f...632e6a7067 | |||||||||||||||||||||||||||||||||||||||
nine | Of....course...even keyboards have firmware | 10:34 | |||||||||||||||||||||||||||||||||||||
timotimo | i read that the multimedia keys are actually wired up to press key combinations | ||||||||||||||||||||||||||||||||||||||
that's ludicrous, in that case i'd really rather have one completely without them | |||||||||||||||||||||||||||||||||||||||
qmk is the rockbox of keyboard firmwares :D | 10:37 | ||||||||||||||||||||||||||||||||||||||
lizmat | jnthn: re re-precompilation: instead of taking a SHA of the source, maybe we could take a SHA of all signatures / pads and only precompile if those are changed? | 10:39 | |||||||||||||||||||||||||||||||||||||
it's not like a change of text in an error message in the core really needs re-precompilation of all installed modules | 10:40 | ||||||||||||||||||||||||||||||||||||||
in response to www.reddit.com/r/rakulang/comments..._language/ | 10:41 | ||||||||||||||||||||||||||||||||||||||
timotimo | good luck making changes that don't shuffle cuuids around :) | ||||||||||||||||||||||||||||||||||||||
OTOH, if we move to a concept where more stuff starts out as uncompiled and is first interpreted, things like error messages would be harmless to change | 10:42 | ||||||||||||||||||||||||||||||||||||||
like, all the exception classes | |||||||||||||||||||||||||||||||||||||||
jnthn | lizmat: What if the string is part of a constant? | 10:44 | |||||||||||||||||||||||||||||||||||||
Or called via BEGIN, or a trait handler, or ends up returned from an EXPORT, or... | |||||||||||||||||||||||||||||||||||||||
lizmat | then maybe I don't fully understand the linkage between precomps :-) | 10:45 | |||||||||||||||||||||||||||||||||||||
I'm just saying that I know from personal experience working on some larger projects, that having to re-precomp large sets of modules becomes a pain | 10:47 | ||||||||||||||||||||||||||||||||||||||
and I see more people mentioning that online | |||||||||||||||||||||||||||||||||||||||
I guess one way would be to make parsing faster :-) | 10:48 | ||||||||||||||||||||||||||||||||||||||
jnthn | More of a pain that just waiting for everything to be parsed/compiled every time? :) | ||||||||||||||||||||||||||||||||||||||
lizmat | *to deal with that | ||||||||||||||||||||||||||||||||||||||
well, that's the thing | |||||||||||||||||||||||||||||||||||||||
people get spoilt :-) | |||||||||||||||||||||||||||||||||||||||
timotimo | kind of makes me want to hack up a tiny patch that prints every time we find a #?line thingie | ||||||||||||||||||||||||||||||||||||||
lizmat remembers the day when re-compiling the core meant having to re-install *all* modules | |||||||||||||||||||||||||||||||||||||||
timotimo | so we can see which file from the core takes how long | ||||||||||||||||||||||||||||||||||||||
jnthn | Really, compilation needs to be faster. | ||||||||||||||||||||||||||||||||||||||
nine | Yeah, in the end, that's what will solve these issues. All the other fancy ideas are really just disctractions | 10:51 | |||||||||||||||||||||||||||||||||||||
10:53
hungrydonkey left
|
|||||||||||||||||||||||||||||||||||||||
timotimo | one way to be faster at something is to do less of the thing ;) | 11:01 | |||||||||||||||||||||||||||||||||||||
11:02
Altai-man_ joined
11:05
sena_kun left
11:07
hungrydonkey joined
|
|||||||||||||||||||||||||||||||||||||||
timotimo | m: my int @res; @res = (-10e0 .. 10e0)>>.sign | 11:15 | |||||||||||||||||||||||||||||||||||||
camelia | This type cannot unbox to a native integer: P6opaque, Num in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
timotimo | m: my int @res; @res = (-10e0 .. -1e0)>>.sign | ||||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
timotimo | m: my int @res; @res = (1e0 .. 10e0)>>.sign | ||||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
timotimo | m: my int @res; @res = (0e0)>>.sign | ||||||||||||||||||||||||||||||||||||||
camelia | This type cannot unbox to a native integer: P6opaque, Num in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
timotimo | ^- i don't like this terribly much | ||||||||||||||||||||||||||||||||||||||
lizmat | mL dd 0e0.sign | 11:21 | |||||||||||||||||||||||||||||||||||||
m: dd 0e0.sign | |||||||||||||||||||||||||||||||||||||||
camelia | 0e0 | ||||||||||||||||||||||||||||||||||||||
lizmat | hmmm | ||||||||||||||||||||||||||||||||||||||
m: dd 1e0.sign | |||||||||||||||||||||||||||||||||||||||
camelia | 1 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: dd -1e0.sign | ||||||||||||||||||||||||||||||||||||||
camelia | -1 | ||||||||||||||||||||||||||||||||||||||
lizmat | interesting | 11:22 | |||||||||||||||||||||||||||||||||||||
timotimo: I'd say that 0e0.sign not being an Int is a bug | 11:26 | ||||||||||||||||||||||||||||||||||||||
m: +(0e0 cmp 0) | |||||||||||||||||||||||||||||||||||||||
camelia | WARNINGS for <tmp>: Useless use of "+" in expression "+(0e0 cmp 0)" in sink context (line 1) |
||||||||||||||||||||||||||||||||||||||
lizmat | m: dd +(0e0 cmp 0) | ||||||||||||||||||||||||||||||||||||||
camelia | 0 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: dd +(1e0 cmp 0) | ||||||||||||||||||||||||||||||||||||||
camelia | 1 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: dd +(-1e0 cmp 0) | 11:27 | |||||||||||||||||||||||||||||||||||||
camelia | -1 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: my $v = 0e0; $v.sign for ^100000; say now - INIT now | 11:28 | |||||||||||||||||||||||||||||||||||||
camelia | 0.03138225 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: my $v = 0e0; $v.sign for ^1000000; say now - INIT now | ||||||||||||||||||||||||||||||||||||||
camelia | 0.0884352 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: my $v = 0e0; +($v cmp 0) for ^1000000; say now - INIT now | ||||||||||||||||||||||||||||||||||||||
camelia | WARNINGS for <tmp>: 2.2757 Useless use of "+" in expression "+($v cmp 0)" in sink context (line 1) |
||||||||||||||||||||||||||||||||||||||
lizmat | hmmm | 11:29 | |||||||||||||||||||||||||||||||||||||
timotimo | the impl literally returns +self if it's neither <0 nor >0 | ||||||||||||||||||||||||||||||||||||||
which i have to imagine is for nan and negative 0 | |||||||||||||||||||||||||||||||||||||||
lizmat | yup | 11:30 | |||||||||||||||||||||||||||||||||||||
changing it to a hard 0 breaks one test | |||||||||||||||||||||||||||||||||||||||
timotimo | mhm | ||||||||||||||||||||||||||||||||||||||
lizmat | I guess that can be fixed by adding a Num.sign candidate | ||||||||||||||||||||||||||||||||||||||
timotimo | so anything Real but not Num will always return Int 0? | 11:31 | |||||||||||||||||||||||||||||||||||||
m: say (1+5i).sign | |||||||||||||||||||||||||||||||||||||||
camelia | Cannot convert 1+5i to Real: imaginary part not zero in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
timotimo | m: say (1+0i).sign | ||||||||||||||||||||||||||||||||||||||
camelia | 1 | ||||||||||||||||||||||||||||||||||||||
timotimo | m: say (0+0i).sign | ||||||||||||||||||||||||||||||||||||||
camelia | 0 | ||||||||||||||||||||||||||||||||||||||
timotimo | m: say (0+0i).sign.raku | ||||||||||||||||||||||||||||||||||||||
camelia | 0e0 | 11:32 | |||||||||||||||||||||||||||||||||||||
timotimo | that must go through a .Real or perhaps .Bridge somewhere | ||||||||||||||||||||||||||||||||||||||
lizmat | the only problem with just making it a hard 0, is the handling of NaN | ||||||||||||||||||||||||||||||||||||||
m: dd NaN.sign | |||||||||||||||||||||||||||||||||||||||
camelia | NaN | ||||||||||||||||||||||||||||||||||||||
timotimo | then it'd also return "always int but Num if it's NaN" | 11:33 | |||||||||||||||||||||||||||||||||||||
:| | 11:34 | ||||||||||||||||||||||||||||||||||||||
welp, i'm glad we have rats where this is not an issue i guess? | |||||||||||||||||||||||||||||||||||||||
lizmat | m: dd (1/3).sign | 11:35 | |||||||||||||||||||||||||||||||||||||
camelia | 1 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: dd (0/3).sign | ||||||||||||||||||||||||||||||||||||||
camelia | 0.0 | ||||||||||||||||||||||||||||||||||||||
11:42
hungrydonkey left
12:05
MasterDuke joined
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo: 42a303ecf5 | (Elizabeth Mattijsen)++ | 3 files Make Real.sign always return an Int Except when the value was NaN, in which case it will return a NaN. Added candidates for Num (to handle NaN) and Int (to make it almost 2x as fast). |
12:15 | |||||||||||||||||||||||||||||||||||||
lizmat | timotimo ^^ | ||||||||||||||||||||||||||||||||||||||
timotimo | m: -0e0.sign.say | 12:16 | |||||||||||||||||||||||||||||||||||||
camelia | WARNINGS for <tmp>: 0 Useless use of "-" in expression "-0e0.sign.say" in sink context (line 1) |
||||||||||||||||||||||||||||||||||||||
timotimo | m:say -0e0.sign | ||||||||||||||||||||||||||||||||||||||
evalable6 | -0 | ||||||||||||||||||||||||||||||||||||||
timotimo | this won't stay, then? | 12:17 | |||||||||||||||||||||||||||||||||||||
lizmat | nope, should it ? | ||||||||||||||||||||||||||||||||||||||
timotimo | not sure actually | ||||||||||||||||||||||||||||||||||||||
lizmat | m: dd -0e0.sign | 12:18 | |||||||||||||||||||||||||||||||||||||
camelia | -0e0 | ||||||||||||||||||||||||||||||||||||||
lizmat | I mean, Int doesn't have a representation for -0 | ||||||||||||||||||||||||||||||||||||||
timotimo | true | ||||||||||||||||||||||||||||||||||||||
m: say -0e0 < 0e0 | |||||||||||||||||||||||||||||||||||||||
camelia | False | ||||||||||||||||||||||||||||||||||||||
timotimo | m: say -0e0 == 0e0 | ||||||||||||||||||||||||||||||||||||||
lizmat | docs.raku.org/routine/sign states -1 0 1 as the possible values | ||||||||||||||||||||||||||||||||||||||
camelia | True | ||||||||||||||||||||||||||||||||||||||
[Coke] | m: say (-0e0).sign | 12:19 | |||||||||||||||||||||||||||||||||||||
camelia | -0 | ||||||||||||||||||||||||||||||||||||||
lizmat | in any case, there is no test for the behaviour of -0e0.sign | ||||||||||||||||||||||||||||||||||||||
timotimo | i'm not knowledgable enough in the intricacies of ieee floating point to make a reliable suggestion here | ||||||||||||||||||||||||||||||||||||||
lizmat | I mean, usually you use .sign as a multiplication factor for something | 12:20 | |||||||||||||||||||||||||||||||||||||
in any case, the commit was spectest clean | 12:21 | ||||||||||||||||||||||||||||||||||||||
as usual, my commits can be reverted | |||||||||||||||||||||||||||||||||||||||
timotimo | hopefully we'll coax someone out of their hidey-place to tell us if it's wrong | 12:22 | |||||||||||||||||||||||||||||||||||||
lizmat | if they are deemed to be not acceptable | ||||||||||||||||||||||||||||||||||||||
Oh, I'm sure my commits are being watched :-) | |||||||||||||||||||||||||||||||||||||||
timotimo | but who commits the watchers? | ||||||||||||||||||||||||||||||||||||||
lizmat | well, they only need to be committed in very rare cases | 12:25 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | timotimo: `say -0e0.sign` doesn't do what you think | 12:26 | |||||||||||||||||||||||||||||||||||||
timotimo | yes, but coke corrected it later on | 12:27 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | although, yeah, if it returns a num then I guess it does anyway… | ||||||||||||||||||||||||||||||||||||||
6c: dd (-0e0).sign | 12:28 | ||||||||||||||||||||||||||||||||||||||
committable6 | AlexDaniel, gist.github.com/5fd1c1a97183a3de31...14c11c9bd6 | 12:29 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | Altai-man_: ↑ something you should know about (I dunno if it's an issue or not) | ||||||||||||||||||||||||||||||||||||||
lizmat | fwiw, I was surprised to see that .sign did not always return an Int | 12:30 | |||||||||||||||||||||||||||||||||||||
(well, except in the case of NaN) | |||||||||||||||||||||||||||||||||||||||
Altai-man_ | AlexDaniel, will see how blin will be next weekend. | 12:31 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: what about Complex? | 12:32 | |||||||||||||||||||||||||||||||||||||
ah, it can't do that | |||||||||||||||||||||||||||||||||||||||
interesting | |||||||||||||||||||||||||||||||||||||||
lizmat | complex can't coerce to a Real if it has an imaginary component | ||||||||||||||||||||||||||||||||||||||
timotimo | there is no concept of "less than" or "greater than" for complex numbers | 12:33 | |||||||||||||||||||||||||||||||||||||
since we define sign based on comparison against 0, that doesn't | |||||||||||||||||||||||||||||||||||||||
m: dd NaN.sign | 12:37 | ||||||||||||||||||||||||||||||||||||||
camelia | NaN | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: dd (0/0).sign | ||||||||||||||||||||||||||||||||||||||
camelia | 0 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | c: HEAD~10 dd (0/0).sign | ||||||||||||||||||||||||||||||||||||||
committable6 | AlexDaniel, ¦HEAD~10: «<0/0>» | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | c: HEAD~10,HEAD dd (0/0).sign | ||||||||||||||||||||||||||||||||||||||
committable6 | AlexDaniel, ¦HEAD~10: «<0/0>» ¦HEAD(42a303e): «0» | 12:38 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | I guess that's better | ||||||||||||||||||||||||||||||||||||||
timotimo | now that is wrong for sure | ||||||||||||||||||||||||||||||||||||||
the 0/0 one | |||||||||||||||||||||||||||||||||||||||
AlexDaniel | is it? | ||||||||||||||||||||||||||||||||||||||
timotimo | not sure if 0 is much better | ||||||||||||||||||||||||||||||||||||||
lizmat | bisectable6: dd (0/0).sign | ||||||||||||||||||||||||||||||||||||||
bisectable6 | lizmat, Bisecting by output (old=2015.12 new=42a303e) because on both starting points the exit code is 0 | ||||||||||||||||||||||||||||||||||||||
lizmat, bisect log: gist.github.com/348aee11da64fa40cc...b1750995e8 | |||||||||||||||||||||||||||||||||||||||
lizmat, (2020-04-22) github.com/rakudo/rakudo/commit/42...719c08a417 | |||||||||||||||||||||||||||||||||||||||
AlexDaniel | I mean, 0/0 doesn't immediately explode, it's just a Rat | ||||||||||||||||||||||||||||||||||||||
timotimo | yeah | ||||||||||||||||||||||||||||||||||||||
m: say 0/0 < 1; say -1 < 0/0 | 12:39 | ||||||||||||||||||||||||||||||||||||||
camelia | False False |
||||||||||||||||||||||||||||||||||||||
timotimo | m: say 0/0 > 1; say -1 > 0/0 | ||||||||||||||||||||||||||||||||||||||
camelia | False False |
||||||||||||||||||||||||||||||||||||||
AlexDaniel | hmm… | ||||||||||||||||||||||||||||||||||||||
yeah I guess passthrough is somewhat better because it will likely explode later | |||||||||||||||||||||||||||||||||||||||
timotimo | m: say 0/0 >= 1; say -1 >= 0/0; say 0/0 <= 1; say -1 <= 0/0 | ||||||||||||||||||||||||||||||||||||||
camelia | True True True True |
||||||||||||||||||||||||||||||||||||||
timotimo | m: say 0/0 == 1; say 0/0 == 2 | ||||||||||||||||||||||||||||||||||||||
camelia | False False |
||||||||||||||||||||||||||||||||||||||
AlexDaniel | or maybe it won't :D | 12:40 | |||||||||||||||||||||||||||||||||||||
timotimo | is that what you get when you define <= as "not >"? | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | freaking rats | ||||||||||||||||||||||||||||||||||||||
lizmat: this got me thinking | 12:43 | ||||||||||||||||||||||||||||||||||||||
lizmat: if the whole situation with .. and … are such a trainwreck | 12:44 | ||||||||||||||||||||||||||||||||||||||
lizmat: then surely, surely, count-only logic is definitely wrong all over the place | 12:45 | ||||||||||||||||||||||||||||||||||||||
first try: | |||||||||||||||||||||||||||||||||||||||
m: say +((5..2).reverse) | |||||||||||||||||||||||||||||||||||||||
camelia | -1 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | negative amount of elements? | ||||||||||||||||||||||||||||||||||||||
lizmat | m: say +(5..2) | ||||||||||||||||||||||||||||||||||||||
camelia | 0 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: say (5..2).reverse | 12:46 | |||||||||||||||||||||||||||||||||||||
camelia | () | ||||||||||||||||||||||||||||||||||||||
lizmat | hmmm | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | s/are/is/ | ||||||||||||||||||||||||||||||||||||||
lizmat | m: say (5..2).elems | ||||||||||||||||||||||||||||||||||||||
camelia | 0 | ||||||||||||||||||||||||||||||||||||||
lizmat | m: say (5..2).reverse.elems | ||||||||||||||||||||||||||||||||||||||
camelia | -1 | ||||||||||||||||||||||||||||||||||||||
[Coke] | so, just guessing on a lot of ops in the documentation tests. looks like we have references to if_i (and a bunch of similar ones like unless_s) - can someone point me at where those are defined? (trying to do better at catching the "non-standard" definitions and also doc them. looks like it's just a variant where we get a simple obj of that type rather than a block) | 12:47 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: at least its sum is zero… | ||||||||||||||||||||||||||||||||||||||
lizmat | I guess the count-only n NativeIntReverse is off-by-one | 12:48 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: fwiw you don't need .reverse | 12:50 | |||||||||||||||||||||||||||||||||||||
m: say +(5..-∞) | |||||||||||||||||||||||||||||||||||||||
camelia | 1 | ||||||||||||||||||||||||||||||||||||||
12:50
sena_kun joined
|
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | then this one is an infinite range: | 12:50 | |||||||||||||||||||||||||||||||||||||
lizmat | AlexDaniel: please file an issue :-) | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: say (-∞..-∞)[^10] | ||||||||||||||||||||||||||||||||||||||
camelia | (-Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf) | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | but | ||||||||||||||||||||||||||||||||||||||
m: say +(-∞..-∞) | |||||||||||||||||||||||||||||||||||||||
camelia | NaN | ||||||||||||||||||||||||||||||||||||||
lizmat | you're saying that should be Inf ? | ||||||||||||||||||||||||||||||||||||||
not 2x Inf ? :-) | 12:51 | ||||||||||||||||||||||||||||||||||||||
[Coke] | (guessing) on finding the definition, that is, using some hueristics to know if an op exists in a particular backend. | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: it should be the same as counting the elements | ||||||||||||||||||||||||||||||||||||||
12:51
Altai-man_ left
|
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: if it keeps generating elements forever then yeah, it should probably give an Inf | 12:52 | |||||||||||||||||||||||||||||||||||||
alternatively it can hang, I don't mind | |||||||||||||||||||||||||||||||||||||||
timotimo | when do we systematically put all special reals into all our math operators | 12:53 | |||||||||||||||||||||||||||||||||||||
to double-check if everything looks okay | |||||||||||||||||||||||||||||||||||||||
... not volunteering :P | |||||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: I won't be filing an issue though | 12:54 | |||||||||||||||||||||||||||||||||||||
maybe I should've made one will *all* of the bugs I found in .. ... | |||||||||||||||||||||||||||||||||||||||
lizmat doesn't understand why looking up all of the mistakes of something should not result in an issue | 12:55 | ||||||||||||||||||||||||||||||||||||||
lizmat is working on a re-implementation of ... in github.com/lizmat/Sequence-Generator | 12:56 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | it should, yeah | ||||||||||||||||||||||||||||||||||||||
but I don't know where to even start | |||||||||||||||||||||||||||||||||||||||
I also don't think I'm capable of covering all of the cases | 12:57 | ||||||||||||||||||||||||||||||||||||||
so somebody has to do this work anyway | |||||||||||||||||||||||||||||||||||||||
12:57
cognominal joined
13:00
cognomin_ left
|
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: thing is, pretty much any edge case I touch is weird or wrong | 13:02 | |||||||||||||||||||||||||||||||||||||
I might as well file a ticket saying “count-only gives a wrong result” | |||||||||||||||||||||||||||||||||||||||
lizmat | "it's wrong, please fix it" | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | yeah, and you prove that it's fixed for all edge cases | 13:03 | |||||||||||||||||||||||||||||||||||||
and if you can't, then it's likely still wrong :) | |||||||||||||||||||||||||||||||||||||||
m: .say for (0^..^0)' | |||||||||||||||||||||||||||||||||||||||
camelia | 5===SORRY!5=== Error while compiling <tmp> Two terms in a row at <tmp>:1 ------> 3.say for (0^..^0)7⏏5' expecting any of: infix infix stopper |
||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: .say for (0^..^0) | ||||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | so that thing has no elements | ||||||||||||||||||||||||||||||||||||||
m: say +(0^..^0) | 13:04 | ||||||||||||||||||||||||||||||||||||||
camelia | 0 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | count-only is right | ||||||||||||||||||||||||||||||||||||||
m: say ?(0^..^0) | |||||||||||||||||||||||||||||||||||||||
camelia | True | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | but what is bool-only even doing here? | ||||||||||||||||||||||||||||||||||||||
6c: say ?(0^..^0) | 13:05 | ||||||||||||||||||||||||||||||||||||||
lizmat | not the right thing ? | ||||||||||||||||||||||||||||||||||||||
committable6 | AlexDaniel, ¦6c (42 commits): «True» | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | does it ever give anything but True? | 13:06 | |||||||||||||||||||||||||||||||||||||
I mean, if you .reverse it, then surely it does: | |||||||||||||||||||||||||||||||||||||||
m: say ?((0^..^0).reverse) | |||||||||||||||||||||||||||||||||||||||
camelia | False | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: R#3637 R#3639 | 13:17 | |||||||||||||||||||||||||||||||||||||
linkable6 | R#3637 [open]: github.com/rakudo/rakudo/issues/3637 [ranges] .count-only on Ranges is wrong (say +(5..-∞)) | ||||||||||||||||||||||||||||||||||||||
R#3639 [open]: github.com/rakudo/rakudo/issues/3639 [ranges] .bool-only on Ranges is wrong ( ?(0^..^0) ) | |||||||||||||||||||||||||||||||||||||||
lizmat | AlexDaniel++ | 13:20 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: and there goes my idea of being able to find the ticket easily :D | 13:31 | |||||||||||||||||||||||||||||||||||||
anyway, lizmat++ | |||||||||||||||||||||||||||||||||||||||
sourceable6: (0^..^0).reverse.count-only() | 13:39 | ||||||||||||||||||||||||||||||||||||||
sourceable6 | AlexDaniel, No idea, boss. Can you give me a Code object? Output: No such method 'count-only' for invocant of type 'Seq' in block <unit> at /tmp/mdMfGPvXoe line 1 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | sourceable6: (0^..^0).iterator.count-only() | ||||||||||||||||||||||||||||||||||||||
sourceable6 | AlexDaniel, github.com/rakudo/rakudo/blob/42a3....pm6#L2017 | ||||||||||||||||||||||||||||||||||||||
lizmat | jnthn: do we assume SlippyIterator is an implementation detail or not ? | 13:55 | |||||||||||||||||||||||||||||||||||||
jnthn | Sounds like one to me | 13:56 | |||||||||||||||||||||||||||||||||||||
lizmat | then we should probably call it Rakudo::SlippyIterator | 14:00 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: what's the meaning of push-* methods in IntRange? | 14:03 | |||||||||||||||||||||||||||||||||||||
ahh I see a comment above | 14:04 | ||||||||||||||||||||||||||||||||||||||
lizmat | they are part of the Iterator interface that *can* be implemented for better performance | 14:05 | |||||||||||||||||||||||||||||||||||||
14:17
MasterDuke left
14:22
AlexDaniel left
14:35
MasterDuke joined
|
|||||||||||||||||||||||||||||||||||||||
nine | [Coke]: not sure I understand your question. if_i for example is github.com/MoarVM/MoarVM/blob/mast...erp.c#L279 | 14:39 | |||||||||||||||||||||||||||||||||||||
[Coke]: if_i, unless_i, if_n, ... are low level branching ops. They can't take a block as that doesn't exist anymore in the bytecode level. It takes a truth value in the form of an int, num or string and if true, jumps to the given label | 14:40 | ||||||||||||||||||||||||||||||||||||||
[Coke]: the label is just an offset into the bytecode | 14:41 | ||||||||||||||||||||||||||||||||||||||
[Coke] | my question: where is the logic for "if_i" defined? | 14:43 | |||||||||||||||||||||||||||||||||||||
the doc test is complaining about if_i, but it looks like there are other variants that the doc test is *not* complaining about, want to be able to report on them more accurately (and then document them, which you've helped with there.) | 14:44 | ||||||||||||||||||||||||||||||||||||||
14:49
Altai-man_ joined
14:51
sena_kun left
15:04
lucasb joined
|
|||||||||||||||||||||||||||||||||||||||
timotimo | m: .say for (-1, 0, 1, NaN)>>.Int | 15:32 | |||||||||||||||||||||||||||||||||||||
camelia | -1 Cannot convert NaN to Int: in block <unit> at <tmp> line 1 0 1 |
||||||||||||||||||||||||||||||||||||||
timotimo | m: dd (-1, 0, 1, NaN)>>.Int | 15:34 | |||||||||||||||||||||||||||||||||||||
camelia | (-1, 0, 1, Failure.new(exception => X::Numeric::CannotConvert.new(target => Int, reason => Any, source => NaN), backtrace => Backtrace.new)) | ||||||||||||||||||||||||||||||||||||||
timotimo | m: dd my @foo = (-1, 0, 1, NaN)>>.Int | ||||||||||||||||||||||||||||||||||||||
camelia | Array @foo = [-1, 0, 1, Failure.new(exception => X::Numeric::CannotConvert.new(target => Int, reason => Any, source => NaN), backtrace => Backtrace.new)] | ||||||||||||||||||||||||||||||||||||||
timotimo | m: dd my int @foo = (-1, 0, 1, NaN)>>.Int | ||||||||||||||||||||||||||||||||||||||
camelia | This type cannot unbox to a native integer: P6opaque, Failure in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
timotimo | m: say NaN // 1 | 15:46 | |||||||||||||||||||||||||||||||||||||
camelia | NaN | ||||||||||||||||||||||||||||||||||||||
timotimo | m: say NaN || 1 | ||||||||||||||||||||||||||||||||||||||
camelia | NaN | ||||||||||||||||||||||||||||||||||||||
timotimo | m: say NaN min 1; say NaN max 1 | ||||||||||||||||||||||||||||||||||||||
camelia | 1 NaN |
||||||||||||||||||||||||||||||||||||||
16:00
softmoth joined
16:07
AlexDaniel joined,
AlexDaniel left,
AlexDaniel joined
|
|||||||||||||||||||||||||||||||||||||||
timotimo | greppable6: \>\>.*\<\< | 16:13 | |||||||||||||||||||||||||||||||||||||
greppable6 | timotimo, 271 lines, 46 modules: gist.github.com/df7962efcc6aa42e6c...74092bd0a6 | ||||||||||||||||||||||||||||||||||||||
Altai-man_ | .oO ( \>\>.*\<\< is a cool nickname to use ) | 16:14 | |||||||||||||||||||||||||||||||||||||
timotimo | huh, the table breaks at one point in the middle | 16:15 | |||||||||||||||||||||||||||||||||||||
16:16
scovit joined
|
|||||||||||||||||||||||||||||||||||||||
scovit | timotimo: it is worring that NaN doesn't propagate | 16:17 | |||||||||||||||||||||||||||||||||||||
timotimo | yeah, i think that's generally the expectation | 16:18 | |||||||||||||||||||||||||||||||||||||
anything that touches NaN becomes NaN | |||||||||||||||||||||||||||||||||||||||
scovit: do you happen to know some examples where you would hyperop some native int/num arrays together into another int/num array? | 16:19 | ||||||||||||||||||||||||||||||||||||||
scovit | timotimo: you mean things like calculating the scalar product of two arrays of vectors | 16:22 | |||||||||||||||||||||||||||||||||||||
matrix-vector multiplication | 16:23 | ||||||||||||||||||||||||||||||||||||||
timotimo | that'd be a cross and a reduce, right? | ||||||||||||||||||||||||||||||||||||||
scovit | yes | 16:24 | |||||||||||||||||||||||||||||||||||||
timotimo | i'm only working with >>+<< shaped hyperops as well as a small set of >>.foo methods | 16:25 | |||||||||||||||||||||||||||||||||||||
but if the result of a Z or X gets assigned into a native array, the lazyness will immediately be discarded / eagerly evaluated, so it could also go in there right away | |||||||||||||||||||||||||||||||||||||||
i kind of also want to support @bloop >>*>> |(1, 2, 4, 8) xx * | 16:26 | ||||||||||||||||||||||||||||||||||||||
16:26
lichtkind_ left
|
|||||||||||||||||||||||||||||||||||||||
scovit | fourier transform comes to my mind | 16:26 | |||||||||||||||||||||||||||||||||||||
timotimo | though i have no idea if anybody will ever need something like that | ||||||||||||||||||||||||||||||||||||||
you'd be a fool to implement a fourier transform yourself instead of going with, for example, fftw | 16:27 | ||||||||||||||||||||||||||||||||||||||
or maybe there is a good reason | |||||||||||||||||||||||||||||||||||||||
scovit | yep | ||||||||||||||||||||||||||||||||||||||
on the other end, you can never predict what people will use them for | 16:28 | ||||||||||||||||||||||||||||||||||||||
timotimo | true for sure | 16:29 | |||||||||||||||||||||||||||||||||||||
scovit | I think it is useful to have them fast, combined with fast reduction they can be very useful for data anlysis | ||||||||||||||||||||||||||||||||||||||
timotimo | phew, add reduction to the mix, too, hmm | ||||||||||||||||||||||||||||||||||||||
i also want to support @a >>+<< @a.reverse | 16:31 | ||||||||||||||||||||||||||||||||||||||
and - stop me if that sounds terrible - grep | 16:32 | ||||||||||||||||||||||||||||||||||||||
scovit | that seems more difficult since the size of grep return is not known in advance | 16:33 | |||||||||||||||||||||||||||||||||||||
timotimo | as soon as i go away from "native arrays only", there'd have to be loads of checks that whatever's coming in would behave the way i implemented it myself | ||||||||||||||||||||||||||||||||||||||
that's right, there'll have to be run-time size checks there | |||||||||||||||||||||||||||||||||||||||
m: .say for ^100.grep(*.is-prime) <<+<< ^10 | 16:34 | ||||||||||||||||||||||||||||||||||||||
camelia | Potential difficulties: Precedence of ^ is looser than method call; please parenthesize at <tmp>:1 ------> 3.say for ^1007⏏5.grep(*.is-prime) <<+<< ^10 |
||||||||||||||||||||||||||||||||||||||
timotimo | m: .say for (^100).grep(*.is-prime) <<+<< ^10 | ||||||||||||||||||||||||||||||||||||||
camelia | 2 4 7 10 15 18 23 26 31 38 |
||||||||||||||||||||||||||||||||||||||
timotimo | ^- another way to handle different sizes | ||||||||||||||||||||||||||||||||||||||
Altai-man_ | timotimo, sorry if I'll write some dumb thing right now, but I think you can just put up any synthetic examples which cover what you want, even not really useful, and if you can make them hella faster, then every "real world" usage will became faster as a consequence. Or I am not getting something? | ||||||||||||||||||||||||||||||||||||||
timotimo | hmmm | 16:35 | |||||||||||||||||||||||||||||||||||||
Altai-man_ | I mean, if you are making e.g. an addition in a loop faster, you don't really need a real world application of number additions, people will find ways to utilize them. | ||||||||||||||||||||||||||||||||||||||
Of course, knowing the domain helps a lot. | |||||||||||||||||||||||||||||||||||||||
timotimo | maybe what i'm after is mostly a motivational example and/or something that'll give me a priority what to work on next | 16:36 | |||||||||||||||||||||||||||||||||||||
Altai-man_ | If you know what implications from the user code may be, that's really helpful to know about, but sometimes a loop is a loop. | ||||||||||||||||||||||||||||||||||||||
MasterDuke | github.com/moritz/Math-RungeKutta could use it, right? | 16:38 | |||||||||||||||||||||||||||||||||||||
16:39
lucs is now known as pel
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | looks like there are a couple other things in greppable6's results | 16:39 | |||||||||||||||||||||||||||||||||||||
timotimo | i've seen an example in there | ||||||||||||||||||||||||||||||||||||||
yeah most of the results are false positives, some from Q<<blah>>, Q<<blah>> | |||||||||||||||||||||||||||||||||||||||
and some from pod | 16:40 | ||||||||||||||||||||||||||||||||||||||
16:40
pel is now known as lucs
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | pierre-vigier/Perl6-Math-Matrix, skids/perl6sum, skinkade/p6-crypt-argon2 | 16:40 | |||||||||||||||||||||||||||||||||||||
timotimo | .o( linkable please? ) | 16:44 | |||||||||||||||||||||||||||||||||||||
[Tux] |
|
16:45 | |||||||||||||||||||||||||||||||||||||
I did not post a few days as I was struggling with a VPN that took 200% CPU where it should be 0.2% | |||||||||||||||||||||||||||||||||||||||
nine | Wait a minute! Since when is csv-ip5xs-20 so slow? | ||||||||||||||||||||||||||||||||||||||
[Tux] | now that that is fixed, I feel comfortable in running timings again | ||||||||||||||||||||||||||||||||||||||
timotimo | our sub add(@a, @b){ my @sum = clone(@a); for ^@a.elems -> $row { @sum[$row] = @sum[$row] <<+>> @b[$row] }; @sum; } | 16:49 | |||||||||||||||||||||||||||||||||||||
16:50
sena_kun joined
|
|||||||||||||||||||||||||||||||||||||||
timotimo | i'm not going to catch any of that, since currently i bail out if arrays are not declared locally to be native-typed | 16:50 | |||||||||||||||||||||||||||||||||||||
[Tux] | nine, tux.nl/Files/20200422185137.png | 16:51 | |||||||||||||||||||||||||||||||||||||
16:51
Altai-man_ left
|
|||||||||||||||||||||||||||||||||||||||
nine | Points at version 0.47. Will have to do some testing | 16:53 | |||||||||||||||||||||||||||||||||||||
[Tux] | ping me if you want specific tests, though I am not always present | 16:55 | |||||||||||||||||||||||||||||||||||||
timotimo | MasterDuke: Sum's readme starts like "Very broken at the moment" :D | 16:57 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | sena_kun: soo can you update Blin again? | 17:00 | |||||||||||||||||||||||||||||||||||||
sena_kun: so that the next run is with the recent changes | 17:01 | ||||||||||||||||||||||||||||||||||||||
sena_kun | let's see... | ||||||||||||||||||||||||||||||||||||||
timotimo | hmm. supporting `($a, $b, $c) >>+&<< ($x, $y, $z)` just to give `($a +& $x, $b +& $y, $c +& $z)` | ||||||||||||||||||||||||||||||||||||||
sena_kun | AlexDaniel, started building of new image. | 17:03 | |||||||||||||||||||||||||||||||||||||
jdv79 | nine: i've used kinesis freestyle keyboards pretty much exclusively for over a decade | 17:22 | |||||||||||||||||||||||||||||||||||||
when i type on a non-split kbd now for a decent time i get rsi flares up but can use the split ones indefinitely without issue\ | 17:23 | ||||||||||||||||||||||||||||||||||||||
timotimo | do you also have the keyboard halves "tented"? | 17:25 | |||||||||||||||||||||||||||||||||||||
17:26
thundergnat joined
|
|||||||||||||||||||||||||||||||||||||||
thundergnat | timotimo: Looking for real world, in the wild uses of >>op>> ? How about rosettacode.org/wiki/Reduced_row_ec..._form#Raku | 17:27 | |||||||||||||||||||||||||||||||||||||
17:28
thundergnat left
|
|||||||||||||||||||||||||||||||||||||||
timotimo | ooh of course, rosettacode | 17:32 | |||||||||||||||||||||||||||||||||||||
17:40
wildtrees joined
17:41
wildtrees left
|
|||||||||||||||||||||||||||||||||||||||
jdv79 | timotimo: yeah, the max setting - whatever that is | 17:42 | |||||||||||||||||||||||||||||||||||||
maybe its 15deg? | 17:43 | ||||||||||||||||||||||||||||||||||||||
17:43
wildtrees_ joined
|
|||||||||||||||||||||||||||||||||||||||
jdv79 | tented with the palm ext thingees | 17:43 | |||||||||||||||||||||||||||||||||||||
17:43
wildtrees_ left
|
|||||||||||||||||||||||||||||||||||||||
timotimo | i saw there's also an accessory where you can have your keyboard halves tented 90 degrees, i.e. like the left and right walls of a cube | 18:09 | |||||||||||||||||||||||||||||||||||||
18:31
scovit left
18:40
scovit joined
|
|||||||||||||||||||||||||||||||||||||||
scovit | I was looking at function github.com/rakudo/rakudo/blob/mast...m.pm6#L429 ORDER | 18:41 | |||||||||||||||||||||||||||||||||||||
sorry, this github.com/rakudo/rakudo/blob/mast...der.pm6#L5 | 18:42 | ||||||||||||||||||||||||||||||||||||||
is there a more immediate way to cast an integer as a Enum type? | |||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: say Order(1) # like this? | 18:46 | |||||||||||||||||||||||||||||||||||||
camelia | More | ||||||||||||||||||||||||||||||||||||||
scovit | AlexDaniel, that would make it | 18:47 | |||||||||||||||||||||||||||||||||||||
like that function would just disappear | |||||||||||||||||||||||||||||||||||||||
timotimo | you mean ORDER should go away? | 18:48 | |||||||||||||||||||||||||||||||||||||
replaced by Order($number)? | |||||||||||||||||||||||||||||||||||||||
scovit | Not so sure, but it can go away in many places | ||||||||||||||||||||||||||||||||||||||
like here: github.com/rakudo/rakudo/blob/mast...m.pm6#L415 | |||||||||||||||||||||||||||||||||||||||
timotimo | i would assume it's much slower than ORDER, though | ||||||||||||||||||||||||||||||||||||||
scovit | nqp::cmp_n seems to return 1, 0 and -1 | ||||||||||||||||||||||||||||||||||||||
timotimo, ah | 18:49 | ||||||||||||||||||||||||||||||||||||||
18:49
Altai-man_ joined
|
|||||||||||||||||||||||||||||||||||||||
timotimo | m: say &ORDER | 18:49 | |||||||||||||||||||||||||||||||||||||
camelia | &ORDER | ||||||||||||||||||||||||||||||||||||||
[Coke] | are you asking how to do this in NQP or Raku? | ||||||||||||||||||||||||||||||||||||||
scovit | Coke, I'm looking at internals | ||||||||||||||||||||||||||||||||||||||
some of them I hope are not specced | |||||||||||||||||||||||||||||||||||||||
timotimo | m: use nqp; my int $v; for ^100_000 { $v = 0; ORDER($v); $v = 1; ORDER($v); $v = -1; ORDER($v) }; say now - ENTER now | ||||||||||||||||||||||||||||||||||||||
camelia | 0.0280534 | ||||||||||||||||||||||||||||||||||||||
[Coke] | (just because core does something a certain way doesn't mean it's idiomatic) | 18:50 | |||||||||||||||||||||||||||||||||||||
timotimo | m: use nqp; my int $v; for ^100_000 { $v = 0; Order($v); $v = 1; Order($v); $v = -1; Order($v) }; say now - ENTER now | ||||||||||||||||||||||||||||||||||||||
camelia | 3.25035249 | ||||||||||||||||||||||||||||||||||||||
timotimo | about 100x slower | ||||||||||||||||||||||||||||||||||||||
scovit | optimization opportunity ;) | ||||||||||||||||||||||||||||||||||||||
timotimo | s: Order(1) | 18:51 | |||||||||||||||||||||||||||||||||||||
sourceable6 | timotimo, No idea, boss. Can you give me a Code object? | ||||||||||||||||||||||||||||||||||||||
timotimo | s: Order.^lookup("CALL-ME") | ||||||||||||||||||||||||||||||||||||||
sourceable6 | timotimo, github.com/rakudo/rakudo/blob/42a3...on.pm6#L35 | ||||||||||||||||||||||||||||||||||||||
18:51
sena_kun left
|
|||||||||||||||||||||||||||||||||||||||
timotimo | s: Order.HOW.^lookup("enum_from_value") | 18:52 | |||||||||||||||||||||||||||||||||||||
sourceable6 | timotimo, No idea, boss. Can you give me a Code object? Output: No such method 'lookup' for invocant of type 'NQPClassHOW' in block <unit> at /tmp/V5uL8Gp8vj line 1 | ||||||||||||||||||||||||||||||||||||||
timotimo | s: Order.HOW.^find_method("enum_from_value") | ||||||||||||||||||||||||||||||||||||||
sourceable6 | timotimo, No idea, boss. Can you give me a Code object? | ||||||||||||||||||||||||||||||||||||||
timotimo | pff :) | ||||||||||||||||||||||||||||||||||||||
github.com/rakudo/rakudo/blob/42a3...qp#L87-L96 <- scovit this is what gets called when you do Order(1) | 18:53 | ||||||||||||||||||||||||||||||||||||||
scovit | I wonder if it could not be more low level | 18:54 | |||||||||||||||||||||||||||||||||||||
timotimo | that's already nqp code | 18:56 | |||||||||||||||||||||||||||||||||||||
in theory, if we can be sure that the things in @!enum_value_list are never anything other than a Pair object, we could nqp::getattr, but the setup only runs a single time in that example code, whereas the accesses run 300_000 times | 18:58 | ||||||||||||||||||||||||||||||||||||||
jnthn | I think that enum coercion might be easier to optimize after I get the dispatch re-work done... | 18:59 | |||||||||||||||||||||||||||||||||||||
timotimo | cool | ||||||||||||||||||||||||||||||||||||||
*punts* | |||||||||||||||||||||||||||||||||||||||
19:06
scovit left
19:11
softmoth left,
softmoth joined
|
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | sourceable6: Order.HOW.enum_from_value | 19:16 | |||||||||||||||||||||||||||||||||||||
sourceable6 | AlexDaniel, No idea, boss. Can you give me a Code object? Output: Too few positionals passed; expected 3 arguments but got 1 in block <unit> at /tmp/SA90oxfAtg line 1 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | huh! | ||||||||||||||||||||||||||||||||||||||
sourceable6: Order.HOW.enum_from_value(1, 1) | 19:17 | ||||||||||||||||||||||||||||||||||||||
sourceable6 | AlexDaniel, No idea, boss. Can you give me a Code object? | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | weird, this time I don't know! :) | 19:18 | |||||||||||||||||||||||||||||||||||||
19:31
patrickb joined
19:34
patrickb left
|
|||||||||||||||||||||||||||||||||||||||
guifa2 | wo wrote the original QRegex code? I'm trying to figure out how it's handling frugal/greedy modifies but I'm not seeing it | 19:42 | |||||||||||||||||||||||||||||||||||||
lizmat | I think that jnthn and pmichaud did most of that... otherwise, git blame ? | 19:44 | |||||||||||||||||||||||||||||||||||||
timotimo | guifa2: are you interested in how it's compiled to bytecode to actually execute, or how the distinction between greedy and frugal gets passed through to the compiler? | 19:54 | |||||||||||||||||||||||||||||||||||||
Geth | rakudo: 50f13f032f | (Elizabeth Mattijsen)++ | 2 files Step one of SlippyIterator becoming Rakudo::SlippyIterator |
20:32 | |||||||||||||||||||||||||||||||||||||
rakudo: fa3c0dba9d | (Elizabeth Mattijsen)++ | 11 files Step 2 of SlippyIterator becoming Rakudo::SlippyIterator |
|||||||||||||||||||||||||||||||||||||||
20:49
squashable6 left
20:50
sena_kun joined,
squashable6 joined
20:51
Altai-man_ left
|
|||||||||||||||||||||||||||||||||||||||
Geth | roast: patrickbkr++ created pull request #636: Add tests for Windows specific Proc argument quoting |
20:55 | |||||||||||||||||||||||||||||||||||||
21:18
squashable6 left,
squashable6 joined
21:20
squashable6 left
21:21
squashable6 joined
21:43
softmoth left
21:44
softmoth joined
21:48
commavir joined
|
|||||||||||||||||||||||||||||||||||||||
[Coke] | in nqp-jvm, it looks like 'ifnonnull' is an opcode (it's used) but I can't see where it's defined. | 21:52 | |||||||||||||||||||||||||||||||||||||
ugh, is it really hardcoded in a hand rolled hash lookup table? | 21:54 | ||||||||||||||||||||||||||||||||||||||
guifa2 | timotimo: the latter. in the method quant it just sets a min and max based on the original parse. | 22:00 | |||||||||||||||||||||||||||||||||||||
22:06
softmoth left
|
|||||||||||||||||||||||||||||||||||||||
guifa2 | I'm trying to code binex/objex stuff as closely to regex as possible, but I guess if I can keep grammar/actions virtually identical, rolling a naïve node code shouldn't be too bad, especially since it seems most of the optimization on regex is for caching certain stringy data (word boundaries, etc) which won't be quite as bad for binary coding | 22:09 | |||||||||||||||||||||||||||||||||||||
22:34
cognomin_ joined
22:37
cognominal left
|
|||||||||||||||||||||||||||||||||||||||
Geth | nqp/master: 5 commits pushed by Coke++ | 22:42 | |||||||||||||||||||||||||||||||||||||
[Coke] | down to 270 failures... | ||||||||||||||||||||||||||||||||||||||
22:49
Altai-man_ joined
22:51
sena_kun left
|
|||||||||||||||||||||||||||||||||||||||
timotimo | guifa2: it kind of looks like $backtrack can be r, f, or g | 23:02 | |||||||||||||||||||||||||||||||||||||
or maybe it isn't | 23:03 | ||||||||||||||||||||||||||||||||||||||
guifa2 | Yeah I see backtrack in cursor, but not in method quant() in NFA which is where it (seems to) just go for the max number of matches | 23:05 | |||||||||||||||||||||||||||||||||||||
timotimo | OK let's see | 23:07 | |||||||||||||||||||||||||||||||||||||
i mean the difference in quant between the f and not-f branch is quite a lot | 23:13 | ||||||||||||||||||||||||||||||||||||||
guifa2 | timotimo: you're in QRegex/NFA.nqp ? | 23:18 | |||||||||||||||||||||||||||||||||||||
(I may just be looking in the wrong place — regex stuff is spread out across several files) | |||||||||||||||||||||||||||||||||||||||
timotimo | that was the QASTRegexCompilerMAST just now | ||||||||||||||||||||||||||||||||||||||
jnthn | The NFA doesn't concern itself with back-tracking; its role is just picking the longest prefix | ||||||||||||||||||||||||||||||||||||||
timotimo | i'm not actually sure if frugal vs greedy is actually even nfa-business | 23:19 | |||||||||||||||||||||||||||||||||||||
ha | |||||||||||||||||||||||||||||||||||||||
guifa2 | jnthn: thanks, so I was just looking int he wrong place | 23:20 |