02:28
kvw_5_ joined
02:32
kvw_5 left
04:59
linkable6 left,
releasable6 left,
quotable6 left,
coverable6 left,
squashable6 left,
shareable6 left,
notable6 left,
benchable6 left,
statisfiable6 left,
evalable6 left,
nativecallable6 left,
sourceable6 left,
committable6 left,
greppable6 left,
bloatable6 left,
tellable6 left,
bisectable6 left,
unicodable6 left,
coverable6 joined,
sourceable6 joined,
unicodable6 joined
05:00
squashable6 joined,
quotable6 joined,
shareable6 joined,
greppable6 joined,
bisectable6 joined,
linkable6 joined
05:01
notable6 joined,
committable6 joined,
nativecallable6 joined,
releasable6 joined,
benchable6 joined,
tellable6 joined,
evalable6 joined,
statisfiable6 joined
05:02
bloatable6 joined
06:31
sourceable6 left,
bisectable6 left,
evalable6 left,
quotable6 left,
coverable6 left,
nativecallable6 left,
shareable6 left,
unicodable6 left,
linkable6 left,
greppable6 left,
bloatable6 left,
squashable6 left,
notable6 left,
benchable6 left,
releasable6 left,
statisfiable6 left,
committable6 left,
tellable6 left
06:32
squashable6 joined,
releasable6 joined
06:33
sourceable6 joined,
unicodable6 joined,
tellable6 joined,
nativecallable6 joined,
shareable6 joined,
greppable6 joined,
bisectable6 joined,
committable6 joined,
coverable6 joined
06:34
benchable6 joined,
linkable6 joined,
bloatable6 joined,
evalable6 joined
06:35
notable6 joined,
quotable6 joined,
statisfiable6 joined
|
|||
gfldex | codesections: You may have been thrown off by BagHash.add because it doesnt follow the OOP principal "In doubt return self.". | 07:07 | |
07:37
domidumont joined
|
|||
moritz | that is not a general OOP principle | 07:57 | |
it's popular in the context of "fluent" interfaces | 07:58 | ||
nine | MasterDuke: elems on a type object usually indicates that something went wrong. We'd lose the notification if it just returned 0 instead of throwing an exception. Usually the sooner an error gets pointed out, the easier it is to debug. | 08:40 | |
08:42
epony left
08:56
sena_kun left
09:01
sena_kun joined
|
|||
MasterDuke | nine: true... and fwiw, github.com/rakudo/rakudo/pull/4239 still has problems after that change. any suggestions? | 09:10 | |
nine: oh, and for raku at least, github.com/rakudo/rakudo/blob/mast...ny.pm6#L87 elems on a type object is supposed to return 1 | 09:17 | ||
09:52
[Tux] left
09:56
[Tux] joined
10:21
epony joined
|
|||
sena_kun reluctantly started a blin run | 11:21 | ||
lizmat | sena_kun++ | 11:24 | |
11:29
Altai-man_ joined
11:30
sena_kun left
11:55
MasterDuke left
|
|||
Altai-man_ | at 0: expected a json object, but got '"<?xml ve"' | 11:55 | |
in sub parse-thing at /opt/rakudo-pkg/share/perl6/site/sources/BB6CD9B6E68F5CEA96238D619F384C2590058CDA (JSON::Fast) line 709 | |||
in sub from-json at /opt/rakudo-pkg/share/perl6/site/sources/BB6CD9B6E68F5CEA96238D619F384C2590058CDA (JSON::Fast) line 717 | |||
in sub MAIN at bin/blin.p6 line 168 | |||
not this time, my friend | 11:56 | ||
11:56
MasterDuke joined
|
|||
lizmat | Altai-man_: hmmm... can you always represent XML as a JSON structure? If so, perhaps we should make that DWIM? | 12:03 | |
tbrowder | hi, folks | ||
Altai-man_ | lizmat, no, that's something going wrong somewhere and I don't have enough time until this evening to investigate. | 12:05 | |
lizmat | Altai-man_: understood | 12:06 | |
tbrowder | i want to lobby for a couple of additions to the raku core: (1) a "frac" routine and (2) a new way to instanciate a DateTime object by a Julian date value (from the astronomical value of a date) | 12:07 | |
lizmat | tbrowder: PR's are welcome! :-) | ||
tbrowder: DateTime object from Julian date, or Date object? | 12:08 | ||
tbrowder | i asked for the frac routine a year but got shot down (i'm happy to do a PR). | ||
lizmat: hi | 12:09 | ||
lizmat | ah? did it get shot down in a PR or somewhere else ? | ||
tbrowder | from Julian date to start | ||
it got shot down in discussion here (or raku-dev) | 12:10 | ||
lizmat | well, it might still get shot down in a PR, but at least it may get more eyes on it then | 12:11 | |
I don't have any recollection of it being suggested, but that may well be my memory going :-) | |||
tbrowder | but we have some new and younger ppl now ;-D | ||
mine, too | 12:12 | ||
lizmat | also: perhaps create an associated problem solving issue | ||
as it appears to have been shot down on lack of merit, rather than on the implementation ? | |||
tbrowder | ok, on frac, what about Julian date <=> DateTime, same thing? | 12:13 | |
as i recall on frac it was more like "use '$x - $x.truncate'; we don't need another builtin math routine" | 12:16 | ||
but i'll see about a PR first. | 12:17 | ||
lizmat | fwiw, by that same logic, we wouldn't need %% vs % :-) | 12:18 | |
tbrowder | exactl! i don't want to go the python route, i love the huge amount of built-in stuff! | 12:19 | |
gimme more! | 12:20 | ||
bye | 12:21 | ||
lizmat | notable6: weekly | 12:28 | |
notable6 | lizmat, 2 notes: 2021-03-05T13:22:19Z <CIAvash>: lobste.rs/s/diluza/imagining_ideal...or_writing ; 2021-03-05T15:36:15Z <lizmat>: lobste.rs/s/diluza/imagining_ideal...or_writing | ||
lizmat | notable6: weekly reset | 12:29 | |
notable6 | lizmat, Moved existing notes to “weekly_2021-03-08T12:29:48Z” | ||
Geth | nqp: c098e878e9 | (Elizabeth Mattijsen)++ | tools/templates/MOAR_REVISION Bump MoarVM to get latest fixes |
12:59 | |
lizmat | Files=1346, Tests=117203, 232 wallclock secs (30.21 usr 8.13 sys + 3218.90 cusr 299.46 csys = 3556.70 CPU) | 13:04 | |
Geth | rakudo: 1d1cd829b4 | (Elizabeth Mattijsen)++ | tools/templates/NQP_REVISION Bump NQP to get the latest fixes |
13:10 | |
lizmat | Altai-man_ ^^ a more up-to-date Rakudo to run Blin on :-) | 13:17 | |
m: my Int(Num) ($a,$b) = <42 666>; dd $a, $b # vrurg: shouldn't this fail ? | 13:58 | ||
camelia | IntStr $a = IntStr.new(42, "42") IntStr $b = IntStr.new(666, "666") |
||
lizmat | aaha... I guess because IntStr is an Int, it doesn't check the source type? | 13:59 | |
afk for a few hours& | |||
14:26
Xliff joined
|
|||
Xliff | o/ | 14:26 | |
timotimo: Was it you who came up with a method to run C-function pointers into raku? | 14:27 | ||
I can't seem to find that on IRC search. Do you remember what you did? | |||
Nevermind. I found it in the docs!~ | 14:30 | ||
15:03
Xliff left
|
|||
lizmat | and another Rakudo Weekly News hits the Net: rakudoweekly.blog/2021/03/08/2021-...ated-star/ | 17:05 | |
17:27
domidumont left
17:40
camelia left
17:49
camelia joined
|
|||
gfldex | m: for '.' { next if !.IO.d; .IO.dir()».&?BLOCK when .IO.d; } | 18:05 | |
camelia | Failed to get the directory contents of '/home/camelia/.cpan/build/BSD-Resource-1.2910-9GYCiC/t': Failed to open dir: Permission denied in block <unit> at <tmp> line 1 |
||
gfldex | Could anyone confirm that this loops forever an HEAD please? | ||
This used to work (I think) and it breaks my code. :( | 18:06 | ||
18:14
domidumont joined
|
|||
lizmat | gfldex: looks like, but only if you have a subdirectory in "." | 18:28 | |
which makes sense, as it in that case will call itself ?? | |||
gfldex | there seams to be a problem with recursing via ».&?BLOCK with a next. If I replace next with if/else it works fine. Sadly this is as far as I can golf it. | 18:29 | |
lizmat | hmmm... looks like something in the past weeks reduced startup time from 120 msecs to < 100 msecs ? | ||
at least for me | |||
gfldex: please make an issue for that, it feels like a weird way of doing recursion to me, but it should work | 18:44 | ||
gfldex: or do you have the idea this is a recentish regression ? | |||
bisectable6: old=2021.02.1 <a b c>.deepmap: { next if $_ eq "b"; .say } | 18:46 | ||
bisectable6 | lizmat, Bisecting by exit signal (old=2021.02.1 new=1d1cd82). Old exit signal: 0 (None) | ||
lizmat | gfldex: ^^ that would be a golf | ||
bisectable6 | lizmat, bisect log: gist.github.com/f442cb65ba260110da...6e226c9822 | 18:47 | |
lizmat, (2021-02-21) github.com/rakudo/rakudo/commit/41...6dd1ffc062 | |||
lizmat | yeah, figured :-( | ||
gfldex: confirmed regression | 18:49 | ||
18:49
domidumont left
|
|||
lizmat | Altai-man_: if you're working on a Blin run, please hold off for another 15 mins or so | 18:52 | |
Altai-man_ | lizmat, I am trying to make Comma work, so no worries. :) | 18:53 | |
lizmat | ok, moar power to you :-) | ||
Geth | rakudo: 171d3c4642 | (Elizabeth Mattijsen)++ | src/core.c/Exception.pm6 Make printf directive error more descriptive |
19:04 | |
rakudo: d18653c423 | (Elizabeth Mattijsen)++ | src/core.c/Any-iterable-methods.pm6 Fix regression found by gfldex++ Basically, next was causing infinite looping when used inside of the recently re-imagined .nodemap / .deepmap / .duckmap methods. Apparently nqp::handle needs to have a 'NEXT' handler specified, even if it doesn't actually do anything. |
|||
roast: 96e05f576d | (Elizabeth Mattijsen)++ | 2 files Add tests for "next" on nodemap/deepmap/duckmap |
|||
gfldex | lizmat: quite recentish acutally :) | ||
lizmat | yeah... the >>. should have been a trigger for me | 19:06 | |
but I got distracted with the .IO handling :-) | |||
afk for a few hours& | 19:08 | ||
gfldex | lizmat: my code works again. Thanks for the swift aid. | 19:22 | |
vrurg | lizmat: with regard to Int(Num) – you're guessed it right, IntStr ~~ Int. | 19:59 | |
*you've | 20:00 | ||
20:12
patrickb joined
|
|||
ugexe | is $! thread safe? | 21:42 | |
gist.github.com/ugexe/7f5cec97ca59...5e46fb472e -- wondering if $! or $_ is getting set incorrect in this example | |||
i didn't think it was thread safe, and i was checking to show in a recent SO question that using $! probably isn't a good idea | |||
codesections: ^ | 21:44 | ||
codesections | ugexe: interesting, thanks. (That is a _dense_ line of Raku code, by the way. By the time I reached the end, I think I'd learned at least two things that weren't even the point you were trying to show!) | 21:52 | |
lizmat | vrurg: but, note the "from" constraint! | 21:53 | |
m: my Int(Num) $a = "42" | 21:54 | ||
camelia | Type check failed in assignment to $a; expected Int(Num) but got Str ("42") in block <unit> at <tmp> line 1 |
||
lizmat | m: my Int(Num) $a = 42 | ||
camelia | ( no output ) | ||
lizmat | 42 is *not* a Num! | ||
m: my Int(Num) $a = 42e0 | |||
camelia | ( no output ) | 21:55 | |
ugexe | yeah a bit of boilerplate to make it keep running until it eventually fails | ||
(1..100000).race(:batch(1), :degree(20)).map: { try die $_; die "$_ -- $!" unless $_ eq $! } | |||
is the key bit | |||
codesections | yeah, I got there :-) | ||
I take it that an inner CATCH block would be threadsafe? | 21:56 | ||
ugexe | yeah | ||
21:56
patrickb left
|
|||
codesections | m: my Int(Str) $a = 1 | 21:56 | |
camelia | ( no output ) | ||
codesections | lizmat: ^^^^ isn't it just that it passes the type constraint without needing to convert? | 21:57 | |
vrurg | lizmat: yes, no conversion takes place. Why should it? | 21:58 | |
lizmat | well... the way I always interpreted it, is that the type between () is the constraint that should match the value *before( coercion | ||
vrurg | lizmat: so, you were always wrong. :) | ||
lizmat | vrurg: but it doesn't check the constraint type in that case | ||
vrurg | Coercion is about loosening restrictions, not about tightening them. | 21:59 | |
So, it makes possible to accept more input types than without it. | |||
vrurg feels like we had this discussion before. :) | |||
lizmat | m: multi a(Int(Num)) { "Num" }; multi a(Int(Str)) { "Str" }; say a "42" | 22:00 | |
camelia | Str | ||
lizmat | note that it selected the candidate with the Str "from" constraint | ||
vrurg | Sure it will. | ||
lizmat | m: multi a(Int(Num)) { "Num" }; multi a(Int(Str)) { "Str" }; say a <42> | 22:01 | |
camelia | Ambiguous call to 'a(IntStr)'; these signatures all match: (Int(Num) $) (Int(Str) $) (Int(Str) $) in block <unit> at <tmp> line 1 |
||
22:01
tyil left
|
|||
vrurg | Of the two coercions Int(Str) is possible, but Int(Num) is not. | 22:01 | |
22:01
tyilanmenyn joined
|
|||
vrurg | And this is also correct because IntStr is both Int and Str and how do we know where to pass it? | 22:01 | |
codesections | vrurg: so how do you mentally "read" a type constraint. I've always read `Int(Str)` as "a Str that can be coerced into an Int". But that reading wouldn't allow an Int:D. How should one read it? | 22:02 | |
lizmat | vrurg: in the last case, there are 3 candidates shown, that's also, weird ? | ||
vrurg | I read it as "I want Int, but Str would also be OK" | ||
lizmat: where it takes the third candidate is rather a question to multi dispatch which I'm not very well familiar with. | 22:03 | ||
m: multi a(Int(Num)) { "Num" }; multi a(Int(Str)) { "Str" }; say &a.candidates | |||
camelia | (&a &a) | ||
lizmat | I guess it's just listing the Int(Str) candidate twice | ||
aka, a problem in error reporting, not in the dispatch itself | 22:04 | ||
vrurg | Apparently it does, but it has nothing to do with coercion. | ||
lizmat | I guess I'm still just misunderstanding | 22:05 | |
what does Int(Num) mean in a signature ? | |||
MasterDuke | ugexe: might be the same as github.com/MoarVM/MoarVM/issues/1434 | ||
lizmat | vrurg: does it dispatch on Num or on Int ? | ||
vrurg | lizmat: See my reply to codesections. It means "we need Int but will accept Num if necessary" | ||
First it tries to dispatch on Int. If this doesn't work it considers Num or Str. | 22:06 | ||
But more precisely, it checks if IntStr ~~ $param.type and collects variants. Then candidates are given weight coefficients to choose better match. | 22:07 | ||
In case with IntStr coefficients for the two candidates turns out to be the same and we get ambiguity. | 22:08 | ||
I think jnthn can tell better than me. I never actually analyzed multi-dispatch code deep enough, just some parts of it. | 22:09 | ||
ugexe | well its a little more detailed than that of course -- sub foo(Int(Num) $x) { } and sub foo($x where Int|Num) { } aren't the same but both read "we need Int but will accept Num if necessary" | ||
vrurg | ugexe: it's because in `where` case $x is Any. | 22:13 | |
So, yes, technically it's more detailed. | |||
I'd describe the second case as "I want Any but only if it's Int or Num" | 22:14 | ||
ugexe | i was thinking something like "I want a Foo, but if its a Bar turn it into a Foo first" | 22:15 | |
which might be wrong... but basically the actual coercion part isn't explained (or maybe it was just implied) | 22:16 | ||
vrurg | ugexe: your variant is certainly better as it does include the coercion part | 22:18 | |
Altai-man_ | lizmat, sadly, I am afraid there will be no new Blin runs until I get a better hardware. | ||
lizmat | :-( | 22:19 | |
vrurg | Altai-man_: if you have a setup I can simply unroll and start with one command – I can try it on my blin-dedicated VM. | 22:20 | |
Altai-man_ | vrurg, git clone -b ugexe-patch-1 github.com/Raku/Blin.git; docker build -t myblin -f docker/Dockerfile . (or `cd docker; docker build -t myblin -f Dockerfile .`, I honestly don't remember which one is correct, but the wrong one will fail :) ), then `docker run -ti -v /var/tmp/Blin-volume:/mnt myblin --nproc=20`. | 22:23 | |
this is more than a single command, but you can && it. :P | |||
Altai-man_ remembers that old "gentoo installation in just three commands" joke | 22:24 | ||
vrurg | Altai-man_: will it auto-publish the results? | ||
Altai-man_ | vrurg, you need to create /var/tmp/Blin-volume for it to mount and work with. Then inside you will found output directory with failures.md file you can gist. | 22:25 | |
It is already prettified and all, so just gist is okay and I'll help in case there are difficulties. | |||
vrurg | Ok. Let's try it. I was running blin from a cloned repo dir. | 22:26 | |
22:27
tyilanmenyn is now known as tyil
|
|||
Altai-man_ | vrurg, that's an option too, but using docker is safer than a real system, because you know why. | 22:28 | |
vrurg, thanks. | |||
vrurg | Altai-man_: that's why I have a dedicated VM. If anything – I just re-clone it from a template. | 22:29 | |
Altai-man_ | vrurg, fair enough. | ||
vrurg | So, I basically don't need docker then. | 22:30 | |
Altai-man_: then if I just run it with 'raku -Ilib ./bin/blin.p6 --new=master' – will it do what you need? | 22:31 | ||
Altai-man_ | vrurg, yes, --new can be omitted, plus set --nproc to number of threads you can afford (better to be a bit lesser than the maximum, say you have 24 - set 20 instead), plus make sure you are on the patched branch. | 22:36 | |
vrurg | Altai-man_: does it pick up the number of cores automatically? I guess it is. The VM is already limited to 50 out 56 cores. | 22:40 | |
Altai-man_ | vrurg, if you don't specify it it will just take result of `nproc` execution. | 22:41 | |
vrurg, it is always neater IMO to set it yourself. | |||
Altai-man_ goes to sleep | |||
codesections | 56 cores? | 22:42 | |
codesections whistles | |||
vrurg | codesections: an old HP Z840. Bought it last Sep specifically to offload development from macbook. | 22:44 | |
ugexe | MasterDuke: i was thinking $! was inherently not thread safe | ||
codesections | very cool | ||
ugexe | m: (1..100000).race(:batch(1), :degree(20)).map: -> $i { try die $i; sleep (1..5).pick; die "$i -- $!" unless $i eq $!; } | 22:45 | |
camelia | A worker in a parallel iteration (hyper or race) initiated here: in block <unit> at <tmp> line 1 Died at: 3 -- 20 in block at <tmp> line 1 |
||
MasterDuke | very well could be. that just looked like the error i'd seen recently in two other unrelated examples | ||
ugexe | adding a sleep makes its very easy to show | ||
vrurg | codesections: absolutely must have when hunting for rare race conditions in code. Spared me many hours on testing. | 22:46 | |
ugexe | if $! indeed isn't thread safe i wonder if internal use of $! should be changed to use something like gist.github.com/ugexe/69beaf940646...cb567c2a08 | 23:14 | |
vrurg | .tell Altai-man Blin at ugexe-path-1 branch fails for me: gist.github.com/vrurg/a40d86aa09a6...5b4df3355b Will run it on master. | ||
tellable6 | vrurg, I'll pass your message to Altai-man_ | ||
ugexe | the master branch doesn't have access to the new ecosystem, so i suspect many dependencies will be missing | 23:17 | |
vrurg | ugexe: but the patch just doesn't work. | 23:27 | |
23:30
MasterDuke left
|
|||
Geth | nqp/QAST-Node-doc: d6c5e57d49 | (Stéphane Payrard)++ | docs/qast.markdown Update QAST documentation. All nodes present. 2 are placeholder |
23:54 | |
tbrowder | m: say -1.5e0.Int | 23:56 | |
camelia | -1 | ||
tbrowder | m: say -1.5e0.abs | ||
camelia | -1.5 | ||
tbrowder | that looks like a bug, does it not? | 23:57 |