MasterDuke but the fail will still be created 00:00
timotimo it will? 00:02
MasterDuke you're talking about return value of val?
timotimo i think s? 00:03
or is this more about "val is too many-purpose"? 00:05
so we can't just use it for when we smartmatch against a number 00:07
MasterDuke well, as i understand it, we're calling Str.Numeric -> val(:val-or-fail) -> fail 00:08
so by the time val has returned the fail+backtrace have already been created 00:09
timotimo ok so we would steal Str::Numeric and change nothing except for the use of val-or-fail
MasterDuke or add an argument to Str.Numeric that it passes to val 00:10
timotimo btw we could perhaps maybe numify only a single time when there's multiple whens that try to match against numbers
MasterDuke yeah, i was wondering about maybe creating QAST::Blocks and creating some variables to reuse 00:11
timotimo blocks you have to be careful with, because they have a scoping meaning 00:12
m: given "0x1" { when 16 { say "yes" } }
camelia ( no output )
timotimo m: given "0x1" { when 16 { say "yes" }; when Int { .say } }
camelia ( no output )
timotimo m: say 0x1.Numeric 00:13
camelia 1
timotimo ahahaha
m: given "0x10" { when 16 { say "yes" } }
camelia yes
MasterDuke well, statement_control:sym<when> doesn't really know about the other whens, so that optimization would have to happen elsewhere, right?
timotimo yeah
and you can put "when" in many different things
we'll want to do some pretty defensive checks at the beginning 00:14
MasterDuke that might best belong in Optimize.pm6
timotimo true
MasterDuke looks like we probably also need a new all the existing ones call nqp::create(self)!SET-SELF, and !SET-SELF is where the backtrace is created 00:18
or more arguments to set
ugh, i also don't see a restart button for travis 00:19
timotimo why do we want a failure without backtraces? 00:20
MasterDuke because creating the backtrace is what's slow. and we don't use it in this case is what's 44% in the profile 00:21
timotimo i'd rather say skip failure entirely for cases like this 00:22
we'd have to pass something to decide between failure with and without backtrace anyway
MasterDuke sure, no strong feelings either way here
but if it doesn't fail/throw/something, whatever the return value is will get passed to nqp::iseq_s 00:24
oops, iseq_i
timotimo well, we'd have to check that first 00:25
immediately after the return
typecheck could be enough, since it's either something numeric, or the string again
(but it could be a string with a role applied, or something derived from Str)
MasterDuke i gotta get to bed. but i'll backlog if there are any more idea/suggestions 00:31
timotimo good night! 00:38
02:34 leont left 02:58 lucasb left 03:49 b2gills left
Geth rakudo: Kaiepi++ created pull request #4028:
Throw an exception if &make is called w/o a valid match in $/
06:04 sena_kun joined 08:09 Altai-man joined 08:12 sena_kun left
bartolin vrurg: (exceptions on jvm backend) I'm afraid I'm not of much help there. I've tweaked some code to throw a typed (Raku) exception in the past -- but maybe that's not what you want. I took this old commit as a blueprint for throwing typed exceptions: 09:00
vrurg: do you have a link to a specific nqp::die you want to change? 09:01
09:40 linkable6 left, evalable6 left, evalable6 joined 09:42 linkable6 joined 10:39 ufobat joined
Geth rakudo: adeff7de83 | (Elizabeth Mattijsen)++ | 2 files
Streamline handling of bind/delete on native arrays

  - Introduce X::Delete typed error message and use that
  - Throw an X::Bind on trying to bind: please note that this is
   runtime and at that point it is impossible to get the name of
   the native array being accessed, so X::Bind::NativeType can
   not be used for that.
11:19 leont joined 12:10 sena_kun joined 12:12 Altai-man left
bartolin vrurg: I poked around with your branch and I think the internal java error happens because origArg is not decontainerized in 12:18
vrurg: I tested with Ops.decont(arg_o, tc) instead and in both cases the following error from nqp::die appeared: Impossible coercion from 'BOOTStr' into 'Str': no acceptable coercion method found 12:26
12:29 frost-lab joined
Geth rakudo: 3e6e15e620 | (Elizabeth Mattijsen)++ | 2 files
Make simple native shaped array access about 5x as fast

By supplying postcircumfix candidates that directly map to the underlying nqp:: ops. This does *not* fix the issue with a typecheck on the native shaped array that for some reason is
  *always* taking the slow path.
bartolin vrurg: but please note, from what it looks this error pops up for a different object (not the one that caused the other explosion) 12:34
12:37 ufobat left
bartolin (and the string it doesn't like is the current version (2020.10-90-g3923f18c3)) 12:47
12:49 lucasb joined
dogbert17 m: my int @a[10]; say @a[0].WHAT 12:57
camelia (Int)
dogbert17 lizmat: are native int arrays automatically initialized to zero? 13:08
Geth rakudo: f6a33b8b35 | (Elizabeth Mattijsen)++ | 3 files
Make @a[int $i] about 2x as fast

Turns out that having explicit int $pos candidates for postcircumfix:<[ ]> is actually detrimental to performance when indexing using a native int. So remove all of the specific int
  $pos candidates.
However, using an int to index into an array, is still about 5x as slow as using an Int:D :-( So effectively it's gone down from 10x as slow to 5x as slow.
lizmat dogbert17: yes
dogbert17 lizmat++ optimizing
lizmat m: my int @a; @a[9] = 42; dd @a
camelia array[int].new(0, 0, 0, 0, 0, 0, 0, 0, 0, 42)
lizmat m: my int @a[10]; dd @a
camelia array[int].new(:shape(10,), [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
13:10 ugexe left
dogbert17 thx, just wanted to be certain. I guess it's in the docs somewhere. 13:10
lizmat well, if you think about it: a native int array is basically just a blob of memort 13:11
we don't want garbage in there, so setting it to 0 seems like a sensible thing to do :-)
dogbert17 excellent, now I know
lizmat: I think I see a slowdown in one of my test scripts after the latest fixes 13:23
lizmat ah>
which one, the last one ? 13:24
or the one adding native shaped array postcircumfix candidates ?
dogbert17 dunno, I can investigate 13:25
dogbert17 investigates 13:26
lizmat please :-) with a golfed example, hopefully :-)
dogbert17 will try 13:27
seems to be the last one 13:28
lizmat intriguing, are you using native indices in your code ? 13:29
dogbert17 m: my int $max = 2_000_000; my int @a = (0..$max); for (2..($max div 2)) -> int $i { my int $j = 2; @a[$i * $j++] = 1 while $i * $j <= $max; } # the worst golf ever :-) 13:31
camelia ( no output ) 13:32
lizmat dogbert17: am about to go afk for a few hours, will look at it when back 13:33
dogbert17 ++lizmat
MasterDuke committable6: HEAD~3,HEAD my int $max = 2_000_000; my int @a = (0..$max); my $s = now; for (2..($max div 2)) -> int $i { my int $j = 2; @a[$i * $j++] = 1 while $i * $j <= $max; }; say now - $s
committable6 MasterDuke, ¦HEAD~3: «1.1405576␤» ¦HEAD(f6a33b8): «1.909452␤»
dogbert17 MasterDuke++ 13:34
lizmat wow, that's quite a difference
dogbert17 a mystery
lizmat well, a --profile will say a lot
but when I get back :-)
bartolin vrurg: and with Ops.hllize(Ops.decont(arg_o, tc), tc) there seems to be no error at all. I'll start a spectest run ... 13:36
13:37 tailgate left 13:39 b2gills joined
AlexDaniel` lizmat: can you get the shit together, please? Or at least let me know what I should and should not have access to, so that I can demand privileges that you forgot to grant. For example, if I shouldn't have access to whateverable repo (including not being able to even leave comments on my own issues), then I guess you're ready to run them on your own server? If not, then please fix it. 13:40
13:41 tailgate joined
MasterDuke how do i pass a named parameter to a ` :op('call'), ...)`? 13:43
13:44 unclechu left, MitarashiDango[m left, AlexDaniel` left 13:47 JJAtria[m] left
MasterDuke oh, QAST::SpecialArg 13:48
14:05 wildtrees joined 14:11 unclechu joined 14:19 wildtrees left, wildtrees joined 14:22 MitarashiDango[m joined 14:23 AlexDaniel` joined 14:25 JJAtria[m] joined 14:26 b2gills left 14:34 b2gills joined
moritz it used to be any QAST node with :name attached, IIRC 14:49
MasterDuke turns out i had to `my $a := :op('hllbool') :value(1) ) ); $a.named('name-i-chose');` 14:55
and then push that onto the `call`
moritz ah, .named, not :name 14:57
AlexDaniel` lizmat: let me know when it's fixed 15:06
or whatever the decision is 15:07
MasterDuke more complicated than i expected
m: my $a; my $s = now; $a = do given "hi" { when 3 { "three" }; when 5 { "five" }; when "hi" { "hello" }; when * > 40 { "> 40" }; default { "default" } } for ^40_000; say now - $s; say $a 15:08
camelia 7.7764281
MasterDuke timotimo: locally ^^^ went from ~4.5s to ~0.5s
passes spectest
AlexDaniel` and to make it even more actionable: click Settings, Manage access, add AlexDaniel, set role as Admin 15:09
in the long run, please, do take over the project. But meanwhile do not interfere. 15:10
MasterDuke 15:11
timotimo MasterDuke: very nice 15:13
MasterDuke not sure how pretty/clean/whatever the change is though... 15:14
think i should add it to the existing PR? 15:18
added as a new/separate commit 15:45
Geth ¦ problem-solving: lizmat assigned to codesections Issue How should modules/distributions be handled when severe security issues are discovered? 16:08
16:09 Altai-man joined 16:12 sena_kun left 16:19 Kaeipi left, Kaeipi joined
timotimo very glad to see you succeeded with this optimization 16:20
16:21 ufobat joined 16:22 Merfont joined, Kaeipi left 16:52 domidumont joined 16:53 domidumont left 17:12 MasterDuke left 17:15 MasterDuke joined 17:22 ufobat left
Geth rakudo: mienaikage++ created pull request #4029:
Improve output of Attribute with Pod::To::Text
18:15 jmerelo joined
jmerelo p6steve has posted this in StackOverflow 18:15
Can anyone help?
Geth nqp: usev6++ created pull request #682:
Add add_native_assign_op to keywords
19:34 jmerelo left
[Coke] "should... segfault" answer is always no 19:47
(except for NativeCall maybe) 19:48
timotimo and for doing multithreading in an unsafe way, the answer is currently "possible to segfault, but not going to stay that way forever" 19:52
MasterDuke backtraces of the segv from the SO question 20:07
20:10 sena_kun joined 20:12 Altai-man left
Geth rakudo: dumarchie++ created pull request #4030:
Add Windows specific build instructions
vrurg .tell bartolin I have partially fixed that exception. It was due to where X::Parameter::InvalidConcreteness exception is prepared two arguments are passed as longs instead of boxed values. It's now different exception it produces. Looks like another case of missing boxing. 22:01
tellable6 vrurg, I'll pass your message to bartolin
MasterDuke lizmat: i can repro the segv asked about in the SO question. 22:03
22:21 sena_kun left 22:28 sena_kun joined 22:35 sena_kun left 22:51 sena_kun joined 23:06 sena_kun left