🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). This channel is logged for the purpose of keeping a history about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Log inspection is getting closer to beta. If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 25 August 2021.
00:07 reportable6 left 00:08 reportable6 joined 00:26 rbt left, rbt joined 00:38 jadedctrl left 00:42 rbt left, rbt joined 01:07 melezhik joined 01:08 melezhik left 02:08 reportable6 left, linkable6 left, greppable6 left, coverable6 left, tellable6 left, evalable6 left, unicodable6 left, bisectable6 left, shareable6 left, notable6 left, bloatable6 left, committable6 left, statisfiable6 left, quotable6 left, nativecallable6 left, benchable6 left, sourceable6 left, releasable6 left, benchable6 joined, bisectable6 joined 02:09 greppable6 joined, committable6 joined, evalable6 joined, unicodable6 joined, releasable6 joined 02:10 notable6 joined, quotable6 joined, reportable6 joined, tellable6 joined, linkable6 joined, nativecallable6 joined, sourceable6 joined, bloatable6 joined, statisfiable6 joined 02:11 shareable6 joined, coverable6 joined 02:14 frost joined 02:37 monkey_ joined 03:24 frost left 03:25 frost joined 03:31 frost left 03:33 monkey_ left 04:33 committable6 left, nativecallable6 left, releasable6 left, evalable6 left, quotable6 left, benchable6 left, bloatable6 left, coverable6 left, statisfiable6 left, greppable6 left, notable6 left, sourceable6 left, shareable6 left, linkable6 left, unicodable6 left, tellable6 left, bisectable6 left, reportable6 left, evalable6 joined, reportable6 joined, linkable6 joined, shareable6 joined 04:34 notable6 joined, sourceable6 joined, statisfiable6 joined, releasable6 joined, bisectable6 joined, bloatable6 joined 04:35 coverable6 joined, committable6 joined, unicodable6 joined, tellable6 joined, benchable6 joined, quotable6 joined, greppable6 joined 04:36 nativecallable6 joined 04:47 rbt left, rbt joined 04:51 zacts joined 05:21 zacts left 05:43 jjatria left, Tirifto left, tobs left, sivoais left, jast left, dg left, tailgate left, dcx left, jdv left, qorg11 left, jdv joined, dg joined, tobs joined, sivoais joined 05:44 jast joined, jjatria joined, tailgate joined, dcx joined, qorg11 joined 05:46 Tirifto joined 05:48 perryprog left, elcaro left, moritz left, broquain1 left, moritz joined, elcaro joined, broquaint joined 05:49 perryprog joined 05:57 rbt left, rbt joined 06:07 reportable6 left 06:08 reportable6 joined 07:08 evalable6 left, linkable6 left, rbt left 07:10 linkable6 joined, evalable6 joined 07:38 rbt joined 08:00 Sgeo left 08:23 rbt left 08:29 rbt joined 08:56 frost joined 09:04 frost left 09:11 phil1 joined 09:26 frost joined
frost Is there a way to determine whether a string contains Unicode characters? 09:29
09:30 renormalist joined
lizmat say True 09:31
aren't all characters Unicode ?
09:34 dogbert17 left
frost yeah, but how can I match non ASCII characters in a string? 09:34
moon-child <-[\x00 .. \x127]> ? 09:39
hmm, apparently this doesn't work; not sure why? 09:43
oh no I'm stupid
should be \x7f
lizmat PSA: there will not be a Rakudo Weekly News this week on account of good weather during Easter 09:59
10:01 dogbert17 joined 10:17 phil1 left 10:22 zacts joined
frost moon-child: straight and useful, thanks 10:26
Nemokosch :DD 10:45
10:55 linkable6 left 10:56 linkable6 joined 11:14 rbt left, rbt joined 11:22 zacts left 11:34 phil1 joined 11:38 Xliff joined
Xliff \o 11:38
tellable6 2022-01-06T19:31:00Z #raku-dev <lizmat> .tell Xliff I would put Debian on a 2021 MacMini :-)
2021-01-15T10:38:00Z #moarvm <jnthn> .tell Xliff I assume you're talking about Cro::WebApp? In which case a) no, b) there's a #cro that's good for such questions :)
2021-04-29T13:35:00Z #moarvm <jnthn> .tell Xliff Can't see it happening before Q4 this year; even when most features are there, we'll want all the opts to be too, plus there'll be lots of little details to do (and bug compat with the current compiler frontend)
Xliff m: sub a ( *@a ($a, $b, $c) ) { $b *= 2; @a.say }; a(1, 2, 3) 11:39
camelia Cannot assign to a readonly variable or a value
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
Xliff Wouldn't it make more sense for decomp variables to be bound to the indicies, here?>
Or is that against spec? 11:40
m: sub a ( *@a ($a, $b is rw, $c) ) { $b *= 2; @a.say }; a(1, 2, 3)
camelia Parameter '$b' expects a writable container (variable) as an argument,
but got '2' (Int) as a value without a container.
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
11:40 frost left
Xliff m: sub a ( *@a ($a, $b is rw, $c) ) { $b *= 2; @a.say }; $b = 2; a(1, $b, 3) 11:40
camelia ===SORRY!=== Error while compiling <tmp>
Variable '$b' is not declared. Perhaps you forgot a 'sub' if this was
intended to be part of a signature?
at <tmp>:1
------> a, $b is rw, $c) ) { $b *= 2; @a.say }; ⏏$b = 2; a(1, $b, 3)
Xliff m: sub a ( *@a ($a, $b is rw, $c) ) { $b *= 2; @a.say }; my $b = 2; a(1, $b, 3)
camelia [1 4 3]
Xliff Is there a way to accomplish the above without a writeable container? 11:41
lizmat don't think so?
11:44 dogbert17 left
Xliff lizmat: OK, so why are the decomp elements not bound? 11:50
lizmat because you have 2 $b's in that example ? 11:52
Xliff m: sub a ( *@a ($a, $b, $c) ) { $b *= 2; @a.say }; a(1, 2, 3)
camelia Cannot assign to a readonly variable or a value
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
Xliff lizmat: ^^
lizmat m: sub a ( *@a ($a, $b is rw, $c) ) { $b *= 2; @a.say }; a(1, 2, 3) 11:53
camelia Parameter '$b' expects a writable container (variable) as an argument,
but got '2' (Int) as a value without a container.
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat m: sub a ( *@a ($a, $b is copy, $c) ) { $b *= 2; @a.say }; a(1, 2, 3)
camelia [1 2 3]
lizmat hmmmm
Xliff Yah
lizmat feels meh 11:54
Xliff Hehehe
11:55 wingfold joined 11:59 rbt left 12:07 reportable6 left, reportable6 joined 12:12 dogbert17 joined 12:19 jjido joined 12:21 melezhik joined
melezhik . 12:21
12:21 [Coke]_ is now known as [Coke]
melezhik . 12:21
gfldex A cunning individual solved PWC161 in JavaScript, Kotlin, Lua, Postscript, Python, Ruby and Rust. 12:22
12:22 melezhik left
gfldex I did read all those implementations and consider myself lucky. :-> 12:23
12:32 melezhik joined 12:35 rbt joined 12:37 melezhik left 13:05 phil1 left 13:16 morte_ joined 13:30 rbt left, rbt joined
CIAvash frost: `$str.contains: /<-:Block('Basic Latin')>/` 13:34
tellable6 CIAvash, I'll pass your message to frost
13:35 rbt left, rbt joined
[Coke] .seen sergot 14:06
tellable6 [Coke], I saw sergot 2021-07-20T15:59:00Z in #raku: <sergot> I mean, raku modules :)
14:07 sena_kun left 14:08 sena_kun joined 14:11 rbt left 14:17 phil1 joined 14:18 Sgeo joined 14:28 phil1 left
[Coke] re-ask: do we have any HTTP request modules that let you pass in auth info? 14:41
HTTP::UserAgent and LWP::Simple don't document any auth parameters that I see 14:42
ah, it's just a documentation issue, found something in t/ that shows me. 14:43
oh, it's using URL based info, not attributes, looks like. OK. 14:44
14:47 euandreh joined 14:48 Guest35 joined
[Coke] (looks like Cro::HTTP::Client is better for this) 14:52
14:57 vodkra left 15:03 rbt joined 15:04 rbt left, rbt joined, rbt left, rbt joined 15:08 vodkra joined 15:16 rbt left, rbt joined
[Coke] ... and that module is broken on windows (original bug opened 2018) 15:19
*sigh*
15:24 monkey_ joined 15:25 euandreh left
japhb [Coke]: What's the bug link? 15:30
[Coke] github.com/raku-community-modules/...e/issues/3
japhb Oh I see -- Cro isn't working on Windows because the dependency IO-Path-ChildSecure is broken there. I was going to say that I didn't expect there was much in Cro itself that should be broken, but I get the dependency issue. 15:32
15:33 vodkra left
[Coke] changing the broken test to use '..\\' on windows instead of "../x[308]" passes 15:34
japhb [Coke]: Isn't that testing for insecurity of combining marks, given the difference between utf8 and utf8-c8? 15:36
[Coke] yes; it assumes the path separator is /, though. 15:38
how do we get the correct IO::Spec instance at runtime? there is a method dir-sep which should be called
but it looks like you need to know ahead of time if it's Unix or Win32
m: say IO::Path.dir-sep 15:39
camelia No such method 'dir-sep' for invocant of type 'IO::Path'
in block <unit> at <tmp> line 1
[Coke] m: say IO::Spec::Unix.dir-sep
camelia /
japhb m: say IO::Spec.dir-sep
camelia No such method 'dir-sep' for invocant of type 'IO::Spec'
in block <unit> at <tmp> line 1
japhb Hmmm
15:39 monkey_ left
[Coke] m: say IO::Path.SPEC.dir-sep 15:39
camelia Cannot look up attributes in a IO::Path type object. Did you forget a '.new'?
in block <unit> at <tmp> line 1
[Coke] m: say IO::Path.new.SPEC.dir-sep 15:40
camelia Must specify a non-empty string as a path
in block <unit> at <tmp> line 1
[Coke] m: say IO::Path.new('.').SPEC.dir-sep
camelia /
[Coke] there we go.
japhb Seems roundabout, but at least more reliable than introspecting $*KERNEL or so 15:41
Oh for heaven's sake
m: say $*SPEC.dir-sep
camelia /
japhb It's kept in a dynvar
[Coke] ah, thanks.
japhb: added comment to ticket, thanks for the simpler version! 15:42
there, one bug from 2018 down.
I'm guessing that using '/' by itself usually "just works" but that by adding the combiner, it skirted the normal checks. 15:43
s/skirted/failed/
japhb [Coke]: Yeah, wouldn't be surprised 15:55
16:15 f-a joined
f-a hello folks 16:15
when I try to run a raku program I get
f@mkiii:~/download/power-seeker$ ./power-seeker
Segmentation fault (core dumped)
is there anything I can do to help upstream diagnose this?
[Coke] what version of rakudo are you using? 16:16
And what OS?
f-a Implementing the Raku(tm) programming language v6.d.
Built on MoarVM version 2020.12.
[Coke] japhb: next blocker: Aborting due to test failure: CBOR::Simple:ver<0.1.1>:auth<zef:japhb>
f-a debian stable
[Coke] 2020.12 is ancient, any segfaults there aren't going to be fixed. 16:17
latest release is 2022.03, I think; please update and see if the issue persists?
japhb: github.com/japhb/CBOR-Simple/issues/2 16:20
looks like one of the 127s is a 255 16:21
f-a thanks [Coke] it worked
japhb [Coke]: Bah, OK, will take a look
[Coke] f-a: nice! 16:26
japhb It's NaN. Windows NaN is non-standard, in a way that is not a problem for the CPU, but makes a difference when you want bit-identical output. I thought I handled that everywhere, but I bet I forgot the case of packed numeric arrays. 16:29
[Coke] let me know if you need me to test something locally, happy to 16:32
japhb [Coke]: OK, will do. Multitasking a bit, but will get on this. 16:35
16:39 f-a left
japhb [Coke]: Can you do the test verbosely, using `zef -v test .`, and add that to the GH issue? 16:52
16:53 zacts joined 16:55 vodkra joined 17:03 sena_kun left 17:04 sena_kun joined 17:10 morte_ left 17:38 zacts left 18:07 reportable6 left 18:10 reportable6 joined 18:11 rbt left, rbt joined
japhb [Coke]: Please try the branch I just pushed: github.com/japhb/CBOR-Simple/tree/...ed-nan-fix 18:12
[Coke] japhb: just got back, will try in a bit 18:15
18:20 wingfold left 18:40 [Coke] left 18:44 [Coke] joined 18:54 lichtkind joined
[Coke] weird. I'm timing out trying to hit github 18:56
japhb That's goofy. 18:57
[Coke] ah, this windows laptop really gets confused when the wifi drops out 19:01
had to forget and re-add
19:02 rbt left, rbt joined
[Coke] tests pass on that branch 19:03
japhb \o/ 19:05
OK, will merge and release that one
[Coke] (&@#$. OK, now getting failures on Log::Timeline
19:16 zacts joined
japhb [Coke]: CBOR::Simple 0.1.2 released with the fix 19:19
What's wrong with Log::Timeline?
19:24 zacts left 19:27 somebody joined
somebody hi. can I use rakudo-j (jvm backend) with java GUI libs? maybe I can find some topics about it? 19:28
moon-child yes 19:29
somebody ok. I need write something like [10k lines of code and than $dial.show()] or something simpler? hadnt 19:30
moon-child pretty straightforward. I don't remember the details but I did a basic poc a while ago, seemed to work fine 19:31
somebody I have working HelloFX on my Mac. how I should use JavaFX from Raku? 19:37
El_Che somebody: your question does not make any sense 19:41
19:42 somebody left, rbt left, rbt joined 19:52 rbt left, rbt joined
[Coke] japhb: github.com/jnthn/p6-log-timeline/issues/13 19:53
are you trying to call java from rakudo-j?
.tell somebody stackoverflow.com/questions/271563...from-perl6 19:54
tellable6 [Coke], I'll pass your message to somebody
japhb [Coke]: Ooof, that one's going to be hard to diagnose without a Windows system. :-( 19:56
20:08 rbt left
Tirifto m: say ‘👁’.ords».base(16); say ‘👁️’.ords».base(16); 20:18
camelia (1F441)
(1F441 FE0F)
Tirifto m: say (‘👁’ ~~ /<[ \x[21] .. \x[10FFFF]]>+/); say (‘👁️’ ~~ /<[ \x[21] .. \x[10FFFF]]>+/);
camelia 「👁」
Nil
[Coke] japhb: I'm looking to golf it now. 20:19
Tirifto Does anyone know why the explicitly emoji eye (second string) doesn’t match, when both signs used should be in the provided range?
japhb Tirifto: I suspect it is because the emoji eye grapheme cluster internally gets a synthetic codepoint
Tirifto japhb, something with an out-of-bounds codepoint value? `o` 20:20
drakonis hmm, how do i iterate through a code block object to access each of the lines of code stored inside? 20:21
japhb Tirifto: Yeah, when MoarVM needs to make a grapheme cluster into a single "character" it does it internally by assigning a negative codepoint, which is thus easy to distinguish from a "real" codepoint.
Tirifto: You might have more luck using a different canonicalization, like NFKD. 20:22
drakonis: The code block is opaque, and the lines inside have likely been optimized and rearranged. 20:24
20:28 sena_kun left 20:29 sena_kun joined
Tirifto m: my $s = Uni.new(‘👁️’.ords); say ($_ ~~ /<[ \x[21] .. \x[10FFFF]]>+/) for $s.NFC, $s.NFD, $s.NFKC, $s.NFKD 20:29
camelia Nil
Nil
Nil
Nil
Tirifto Either that doesn’t help or I’m using them wrong. :/ 20:30
Xliff lizmat: Any thoughts on the decomp issue from earlier?
drakonis ah i see 20:31
okay
Xliff drakonis: The only way to do something like that is a ways off.
drakonis rakuast still too far 20:32
Xliff drakonis, exactly.
drakonis it does make it harder to build the design i had in mind 20:34
trying to make a composable automation system that takes closures 20:35
take one and operate on its insides to send ssh commands 20:36
Tirifto drakonis, I’m guessing a list of blocks wouldn’t do the trick? 20:37
20:42 euandreh joined
drakonis not really 20:45
it needs a lot of ast manipulation 20:46
a list of blocks isn't particularly ergonomic 20:47
japhb m: say ‘👁️’.NFD.all ~~ (0x21 .. 0x10FFFF) # Tirifto
camelia True
japhb regexes work on Str, not on Uni.
Tirifto Oh, I thought Uni would do its own thing there. 20:48
japhb Tirifto: There have been discussions about allowing regex-like things to work on Uni and Blob directly, but that was NYI last time I checked 20:49
Tirifto japhb, I see. So it seems my best bet would be comparing each individual codepoint to a range, rather than matching Raku’s Str against a Regex? 20:50
japhb There are people who would really like to use a Grammar to take apart an IP datagram, but no such functionality currently exists
Tirifto: Well, what problem are you actually trying to solve?
If you're just wondering if a Str contains valid Unicode codepoints, the answer is yes -- because you can't make an invalid string. 20:51
(Well, without reaching down into the guts of the VM, or scribbling across the memory, I guess.)
Every operation you do on Str's automatically normalizes. 20:52
Tirifto japhb, I’m trying to write a parser for KDL (document language akin to JSON or XML) in Raku, and the specification states which codepoints are allowed for certain parts of it. I’ve been attempting to write a grammar for it. 20:53
drakonis anyways, the gist is that i'm using raku both to write and use the framework 20:54
Tirifto I put an emoji including the eye into a test to see if it would match correctly (since by my understanding it ought to be valid)… and it wouldn’t. :-) 20:55
drakonis the lack of ast macros is certainly a pain in my backside 20:57
because i like the language
japhb Tirifto: I understand if you're trying to make a *strict* parser ... but you can get started making a loose parser instead, and get that working before fighting the battle about codepoints. You could also make a helper function that converts to NFD or so and call that at the appropriate places in your regex using <?{ ... }> 20:58
drakonis: Planned, and actually worked out fairly well by masak, just not ready yet because we want RakuAST first so we can make it Raku-official, rather than just Rakudo-internal. 20:59
drakonis oh yes, i'm waiting for it already 21:00
Voldenet when parsing anything, ignore the spec
drakonis now for a different question, is there a health check on raku's community? 21:01
japhb Huh?
drakonis it always seems like it is one or two accidents from losing the folks that do the heavy lifting 21:02
Tirifto japhb, I’m in the process of finding how far along I am now. Ignoring the tough details at first seems like a good idea, though, as does using <?{…}>. Thank you for the tips! :D 21:03
[Coke] If you're concerned, folks on the RSC are a good resource to talk to.
(for drakonis)
japhb Tirifto: Sure! :-)
drakonis: Best we can do there is encourage folks to learn those heavy lifting tasks. :-) 21:04
drakonis ha, indeed.
Tirifto Voldenet, implying it’s good to write only correct data and parse both correct and incorrect data if that works?
Voldenet Well yes, accept everything in a predictable way (unless you're writing a validator) 21:05
[Coke] I would recommend parsing incorrect data only if it's for diagnostics. "be liberal in what you accept" makes for challening maintenance. 21:06
japhb Tirifto: Yeah, that's "Postel's Law". It has been shown to be a problem if *all* parsers for a format are loose and also different -- HTML showed this. But it's notable that HTML5 is *very* loose but just has a very well-defined junk recovery algorithm, because >90% of HTML on the web is broken.
[Coke] *challenging
japhb++
drakonis the community seems to be comprised mainly of folks that have been around since the very beginning 21:07
but the only way to shift that is through writing useful libraries and projects
japhb drakonis: Can confirm that is *not* true, but there are a few of us old hands still around.
drakonis hm 21:08
that's good to know then
raku could probably use a big announcement post when rakuast lands 21:09
japhb In many communities, you'll find that the people who do the heavy lifting and the "old hands" are heavily-overlapping sets, simply as a matter of having had enough time to learn the harder bits.
drakonis drum up some excitement
japhb Oh yeah, RakuAST is the single biggest blocker for the 6.e language release, which we can indeed celebrate. 21:10
Voldenet I didn't mean being liberal and accepting any incorrect output, only being liberal if it means being able to make the parser easier to maintain – . is acceptable replacement for a-z character class ;) 21:11
Tirifto Thank you, everyone, for your advice! I’ll be choosing a bit of looseness over complexity then, and save the latter for validating. :-) 21:12
japhb Tirifto++ 21:13
drakonis it is always pleasant to see newcomers to the community 21:14
even if i'm one myself
that said, it'd make a fine replacement for something like julia 21:16
minus scientific libraries i guess
Voldenet (Oh, and there has been a lot of security problems because of looseness, but only when parser is expected to be strict - it's important to know whether parser can be used for validation) 21:17
(tons of url-related vulnerabilities were started by using loose parsers to validate urls in proxies)
Tirifto (I guess that if I’m ever going to implement validation separately, it should be possible to make it an optional part of the parsing. `o`) 21:20
drakonis a dumb question 21:31
doesn't grammars also come with a feature to serialize it back to its original format?
or is information related to the structure lost when the parsing is done?
its an awful question 21:32
japhb drakonis: A match object contains references to the original parsed string, along with position information that can tell you where each rule matched within that string. So yes, you can serialize back to the original format trivially, because the original is still hanging around. 21:39
drakonis beautiful.
so you get the serializer for free 21:40
moon-child not really
japhb drakonis: And it runs in O(1) time! ;-)
moon-child you can't make an arbitrary syntax tree and synthesise strings from it without doing any work
but yes, you can identify which sections of source a given match corresponds to 21:41
japhb There is a different problem which is to create exemplars for a Grammar (various random strings that are known to successfully parse). There was a module created for that a while back, but I doubt it's been kept up to date.
drakonis quite a lot of power there 21:42
21:42 evalable6 left, linkable6 left 21:43 linkable6 joined, evalable6 joined
Voldenet actually, there's two ways 21:44
.orig gives you original string and .Str serializes it
(.Str.WHERE has different address than .orig.WHERE, I'm not sure if it's just a copy)
21:58 rbt joined
Xliff Trifito: A bit of advanced processing with grammars would involve a loose match with a subsequent code block which you could use for more advanced tests. 22:02
You might want to keep that in mind.
22:05 monkey_ joined 22:27 londoed joined, londoed_ joined 22:29 londoed_ left 22:33 rbt left, rbt joined 22:42 jjido left 22:45 melezhik joined
melezhik . 22:45
22:47 melezhik left 22:57 monkey_ left 23:03 rbt left, rbt joined, rbt left 23:04 rbt joined 23:14 rbt left, rbt joined 23:24 lichtkind left 23:44 rbt left, rbt joined 23:50 monkey_ joined 23:57 Xliff left