🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku
Set by ChanServ on 14 October 2019.
guifa codesections: the trick is the JS side — which is on both sides of the equation lol 00:03
00:11 vrurg_ left, vrurg joined
codesections guifa: Oh, well, I guess that 00:19
*'s what happens when you use a less powerful language :D 00:20
JS does have tagged template literals with their raw strings: developer.mozilla.org/en-US/docs/W...aw_strings
00:21 wamba left
guifa codesections: Hmm, I didn’t knwo about them 00:31
I swear JS gets so many new stuff hacked on it’s impossible to keep up
and the syntax and stuff keeps getting weirded too
weirder*. There’s only so much you can do and keep old code still valid 00:32
I think I can get some of it out by creating a method on a nonce class 00:33
Webperl has this weird thing where classes stick around between different runs of Raku.eval(), but subs don’t. 00:34
timotimo urrrgh i think the network flakiness is happening again for zef 00:38
oh! i was wrong, just this exact moment it finished
rypervenche guifa: With in-browser testing for the exceptions, will I be able to see an example of what the exception would look like in context? 00:39
guifa rypervenche: Depends on what you mean in context. Basically, the “test message” button will take a few representative exceptions, pass it to the method, and display the output. (so if there’s a boolean attribute, there will be one where it’s false, one where it’s true; if an array, one with a single element, and one with two, etc) 00:40
For more contextual information, there’s the “notes” field 00:41
I’m going through slowly but surely to add commentary and (even slower) adding the sample ones. Trying to ducment in a giant spreadsheet what exceptions are now unused, or have adhoc stuff that could be separated out into new exceptions, etc 00:42
rypervenche Mkay. I'm excited to see it. I think that would help a lot with translations.
timotimo github.com/rakudo/rakudo/wiki/Work...o-NQP-Land - feels like there could be some changes here, or some community work or something 00:44
squashable6: status
squashable6 timotimo, The date for the next SQUASHathon is not set
timotimo have we paused squashathons? we don't have anybody to host them, or we have no ideas for topics?
github.com/rakudo/rakudo/wiki/Mont...Squash-Day - maybe no-event-will-take-place entries should be added for the previous months 00:47
guifa rypervenche: the other thing I’m trying to figure out is navigation. with 471 one of them, a popup menu is unweildy haha 00:48
00:49 cpan-raku left 00:52 cpan-raku joined, cpan-raku left, cpan-raku joined 00:57 kent\n left 00:58 kent\n joined 01:18 molaf left 01:25 Skarsnik left 01:31 molaf joined 02:02 Manifest0 left 02:04 Manifest0 joined 02:13 bdju left 02:14 bdju joined 02:25 vgrato_ left 02:34 vrurg_ joined 02:37 vrurg left 02:40 stanrifkin_ joined 02:43 stanrifkin left 03:00 camelCaser left 03:01 camelCaser joined 03:09 vrurg joined 03:13 vrurg_ left 03:17 vrurg left, vrurg_ joined 03:49 zacts joined 03:55 sjaveed left 03:56 sjaveed joined 04:00 sjaveed left 04:24 sjaveed joined 04:28 sjaveed left 05:00 sjaveed joined 05:05 sjaveed left 05:10 stanrifkin_ left 05:11 bocaneri joined 05:14 sjaveed joined 05:18 wamba joined 05:21 sjaveed left 05:33 sjaveed joined 05:39 sjaveed left 05:46 sjaveed joined 05:48 wamba left 05:50 sjaveed left 06:14 stanrifkin joined 06:36 sjaveed joined 06:42 sjaveed left 06:44 patrickb joined 06:49 sjaveed joined 06:53 ufobat_ left, cpan-raku left 06:54 cpan-raku joined, cpan-raku left, cpan-raku joined, sjaveed left 06:56 stoned75 joined 07:01 jmerelo joined
jmerelo releasable6:status 07:01
releasable6 jmerelo, Next release in ≈11 hours. 3 blockers. Changelog for this release was not started yet
jmerelo, Details: gist.github.com/4125e31772b6e25eaf...cee92d936e
07:04 aborazmeh joined, aborazmeh left, aborazmeh joined
Geth doc: 98f7a7bb14 | (Stoned Elipot)++ | doc/Type/Seq.pod6
Fix link to routine
linkable6 Link: docs.raku.org/type/Seq 07:10
07:24 stoned75 left, stoned75 joined 07:27 sena_kun joined
Geth doc: 65dcf5a760 | (Stoned Elipot)++ | doc/Type/Seq.pod6
Add missing formatting on 'Seq'
linkable6 Link: docs.raku.org/type/Seq
07:48 sjaveed joined 07:53 dakkar joined 07:54 sjaveed left 07:59 stoned75 left 08:05 stoned75 joined 08:27 stoned75 left 08:34 stoned75 joined 08:46 wamba joined 08:52 nexysno left 08:57 mark[m]1 left 08:58 aborazmeh_ joined, aborazmeh_ left, aborazmeh_ joined, aborazmeh left, aborazmeh_ is now known as aborazmeh 09:00 cheer[m] left 09:03 stanrifkin left 09:07 pecastro joined 09:23 sjaveed joined 09:27 sjaveed left 09:31 sno left 09:52 jjmerelo joined 09:54 jmerelo left 10:01 rindolf joined 10:05 rindolf left 10:11 bocaneri left 10:12 rindolf joined 10:15 natrys joined 10:17 dakkar left 10:23 sjaveed joined 10:24 bocaneri joined 10:25 Celelibi left 10:30 sjaveed left 10:46 Sgeo left 11:02 Altai-man joined 11:04 sena_kun left 11:06 sjaveed joined 11:12 sjaveed left
stoned75 m: releases say (1..5).map({$_}).skip; 11:35
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
releases used at line 1. Did you mean 'repeated', 'reverse'?
stoned75 m: release say (1..5).map({$_}).skip;
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
release used at line 1. Did you mean 'reverse'?
11:35 sftp left, molaf left, Tirifto joined
stoned75 commit: releases say (1..5).map({$_}).skip; 11:36
committable6 stoned75, gist.github.com/84ba150807640ea6b8...4bc55fe902
patrickb ping rba 11:38
11:39 sftp joined 11:42 sjaveed joined
Geth doc/seq-simpler-eg: c1ec4a087b | (Stoned Elipot)++ | doc/Type/Seq.pod6
Simpler examples
doc: stoned++ created pull request #3645:
Simpler examples
11:46 wamba left, squashable6 left, sjaveed left 11:47 squashable6 joined 11:51 wamba joined
jjmerelo m: say (1..5).map({$_}).^name 11:57
camelia Seq
jjmerelo m: say (1..5).^name
camelia Range
jjmerelo m: say (1...5).^name 11:58
camelia Seq
12:07 sjaveed joined 12:09 squashable6 left 12:10 squashable6 joined 12:13 kensanata joined, sjaveed left, aborazmeh left 12:29 oneeggeach joined
Geth doc/promote-is-map-is-set-better: d3ffb4cd09 | (Patrick Böker)++ (committed using GitHub Web editor) | doc/Type/Map.pod6
Promote `%m is Map` syntax more

Mention the `%m is Map` syntax on the `Map` documentation page. Previously the syntax was only mentioned on the `Syntax` page.
doc: patrickbkr++ created pull request #3646:
Promote `%d is Map/Set` syntax more
12:44 oneeggeach left 12:45 Black_Ribbon left
Geth doc/promote-is-map-is-set-better: 7063385cf9 | (Patrick Böker)++ | doc/Type/Map.pod6
Promote `%m is Map` syntax more

Mention the `%m is Map` syntax on the `Map` documentation page. Previously the syntax was only mentioned on the `Syntax` page.
doc: 7063385cf9 | (Patrick Böker)++ | doc/Type/Map.pod6
Promote `%m is Map` syntax more

Mention the `%m is Map` syntax on the `Map` documentation page. Previously the syntax was only mentioned on the `Syntax` page.
doc: 679ea7823f | (Patrick Böker)++ (committed using GitHub Web editor) | doc/Type/Map.pod6
Merge pull request #3646 from Raku/promote-is-map-is-set-better

Promote `%d is Map` syntax more
12:54 wamba left
linkable6 Link: docs.raku.org/type/Map
12:55 patrickb left, wamba joined
xinming_ How do we alias a class? 13:13
moritz m: constant Integer = Int;
camelia ( no output )
xinming_ What I mean is, alias a class, and use that new name in sub signature.
hmm, bbl
moritz m: constant Integer = Int; sub f(Integer $x) { say $x**2 }; f 42 13:14
camelia 1764
moritz xinming_: ^^ like this :D
xinming_ Worked, Thanks.
moritz m: constant Integer = Int; sub f(Integer $x) { say $x**2 }; say &f.signature.params[0]
camelia Int $x
xinming_ I tried something like my \Integer = Int; But doesn't seem to work.
13:17 __jrjsmrtn__ left 13:18 __jrjsmrtn__ joined 13:29 sjaveed joined 13:35 sjaveed left 13:38 kensanata left 13:46 patrickb joined
xinming_ m: constant X::y = "1"; X::y.say; 13:52
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> 3constant X:7⏏5:y = "1"; X::y.say;
xinming_ How do we create constant with namespace please? :-)
Or, we can't.
moritz m: package X { constant y = "1 }; say X::Y 13:53
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in double quotes; couldn't find final '"' (corresponding starter was at line 1)
at <tmp>:1
------> 3package X { constant y = "1 }; say X::Y7⏏5<EOL>
expecting a…
moritz m: package X { constant y = "1" }; say X::Y
camelia Could not find symbol '&Y' in 'X'
in block <unit> at <tmp> line 1
moritz m: package X { constant y = "1" }; say X::y 13:54
camelia 1
xinming_ Got it, thanks.
13:54 sjaveed joined
xinming_ Then, another problem rises. 13:54
how do we also make the package X also alias for other classes? 13:55
I know we can add namespaced constants within class X directly.
hmm.. 13:56
moritz what problem are you trying to solve?
xinming_ m: class C1 { }; class C1::B { }; constant C = C1; constant C::B = C1::B; 13:58
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> 3C1::B { }; constant C = C1; constant C:7⏏5:B = C1::B;
xinming_ create some alias for some classess under the same namespace
13:58 sjaveed left
moritz m: class C1 { }; class C1::B { }; constant C = C1; say C::B 13:59
camelia (B)
13:59 jjmerelo left
xinming_ Ok, got it, thanks. 14:00
14:00 ThaEwat joined 14:09 sjaveed joined 14:15 sjaveed left 14:18 Manifest0 left 14:25 stoned75 left 14:26 zacts left, zacts joined, stoned75 joined 14:30 sjaveed joined 14:34 sjaveed left 14:47 Tirifto left 14:56 gnufr33dom joined 15:02 Celelibi joined 15:03 sena_kun joined 15:04 Altai-man left 15:22 sjaveed joined 15:24 zacts left 15:26 sjaveed left 15:32 kylese joined 15:39 zacts joined 15:42 jmerelo joined 15:51 Manifest0 joined 15:57 sjaveed joined 16:01 sjaveed left 16:07 El_Che_ joined, El_Che_ left 16:08 gnufr33dom left 16:14 aluaces left 16:21 zacts left 16:42 Tirifto joined
codesections m: say 'a' ~~ /<:Upercase_Map('A' ~~ /./)>/ 16:51
camelia 「a」
codesections m: say 'a' ~~ /<:Upercase_Map('A')>/
camelia Nil
codesections So *that's* surprising! I need to pass in a match to the Unicode property 16:52
SmokeMachine Hi! How can I dynamically use a rule on a grammar? 16:56
I mean something like this:
m: grammar Bla { my %cmds = bla => "ble"; rule ble {"ble"}; rule TOP { :my $a; $<cmd>=\w+ { $a = ::(%cmds{$<cmd>}) } <$a> } }; say Bla.parse: "bla ble"
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$a' is not declared
at <tmp>:1
------> 3 $<cmd>=\w+ { $a = ::(%cmds{$<cmd>}) } <7⏏5$a> } }; say Bla.parse: "bla ble"
17:08 zacts joined
guifa SmokeMachine: I changed it to a dynamic variable and it sudenly worked 17:26
grammar Bla { my %cmds = bla => "ble"; rule ble {"ble"}; rule TOP { :my $*a; $<cmd>=\w+ { $*a = %cmds{$<cmd>} } <$*a> } }; say Bla.parse: "bla ble" 17:27
evalable6 「bla ble」
cmd => 「bla」
17:37 Sgeo joined
SmokeMachine guifa: thanks! but why $a was not available on <$a>? 17:45
guifa SmokeMachine: no idea. It should be in scope, but it’s a compile time error, so maybe for some reason the :$foo declaration isn’t be acknowledged when <$foo> is being handled for some reason 17:52
That’s the best explanatino I’ve got, given that the dynamic works — which allows the compile to ignore questions of scope until runtime 17:53
SmokeMachine hum... that's not using the rule... 17:59
grammar Bla { my %cmds = bla => "ble"; rule p-ble {"ble"}; rule TOP { :my $*a; $<cmd>=\w+ { $*a = "p-%cmds{$<cmd>}" } <$*a> } }; say Bla.parse: "bla ble" 18:00
m: grammar Bla { my %cmds = bla => "ble"; rule p-ble {"ble"}; rule TOP { :my $*a; $<cmd>=\w+ { $*a = "p-%cmds{$<cmd>}" } <$*a> } }; say Bla.parse: "bla ble"
camelia 5===SORRY!5===
Unrecognized regex metacharacter - (must be quoted to match literally)
at /home/camelia/EVAL_0:1
------> 3anon regex { p7⏏5-ble}
Malformed regex
at /home/camelia/EVAL_0:1
------> 3anon regex { p-7⏏5ble}
SmokeMachine how can I use a rule dynamically?
m: grammar Bla { my $a = "a-b"; rule a-b { "bla" }; rule TOP { <$a> } }; say Bia.parse: "bra" 18:02
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared name:
Bia used at line 1. Did you mean 'Bla'?
SmokeMachine m: grammar Bla { my $a = "a-b"; rule a-b { "bla" }; rule TOP { <$a> } }; say Bla.parse: "bla"
camelia 5===SORRY!5===
Unrecognized regex metacharacter - (must be quoted to match literally)
at /home/camelia/EVAL_0:1
------> 3anon regex { a7⏏5-b}
Malformed regex
at /home/camelia/EVAL_0:1
------> 3anon regex { a-7⏏5b}
guifa SmokeMachine: 18:05
m: grammar Bla { my %cmds = bla => "x"; rule x {"ble"}; rule TOP { :my $*a; $<cmd>=\w+ { $*a = "<" ~ %cmds{$<cmd>} ~ ">" } <$*a> } }; say Bla.parse: "bla ble"
camelia 「bla ble」
cmd => 「bla」
SmokeMachine guifa: interesting... I was trying with .^find_method... 18:06
guifa it makes sense too
<$foo> should be interpreted as if regex. But we were just putting in “ble” — which is interpreted as a literal ble. Need <ble> to call the rule. 18:07
guifa is afk&
18:07 thundergnat joined
SmokeMachine m: grammar Bla { rule params-bla { "ble" }; rule TOP { :my $*a; $<cmd>=\w+ { $*a = "<params-{ ~$<cmd> }>" } <$*a> } }; say Bla.parse: "bla ble" 18:07
camelia 「bla ble」
cmd => 「bla」
SmokeMachine :) 18:08
18:13 aluaces joined
thundergnat codesections: to the best of my knowledge, and as I understand it, the only Unicode properties from unicode.org/reports/tr44/#Property_List_Table that can be used as a matcher in a regex are those that have a B (binary) in the second column. 18:19
18:19 stoned75 left
thundergnat The others are things that can be queried. 18:19
m: say 'a'.uniprop('Uppercase_Mapping');
camelia A
18:19 ThaEwat left
thundergnat your above example only matched by accident' 18:20
m: say 'a' ~~ /<:Irelavant_Map('Q' ~~ /./)>/
camelia 「a」
18:20 stoned75 joined
thundergnat That list doesn't have the _only_ properties that can be used for matching though. 18:21
m: say '௫' ~~ /<:Numeric>/; # Numeric is not in that list 18:22
camelia 「௫」
thundergnat though Numeric_Type and Numeric_value are 18:23
18:30 jmerelo left
timotimo are there multiple different empty answers for some of the questions? 18:31
18:36 aluaces left 18:42 zacts left
codesections thundergnat: Thanks, that's all very helpful – though it makes me realize I'm further from understanding this corner of Raku than I thought 18:46
m: say 'foo' ~~ /<:bar(True)>+/
camelia 「foo」
codesections ಠ_ಠ 18:47
thundergnat It's complicated...
Unicode in general is difficult. (I guess anything trying to regularize natural language needs to be._ 18:48
tobs hah, I was wondering if Raku wasn't going too far correcting the "Upercase_Map" typo
moritz travis-ci.org/github/niner/Inline-.../728618708 says "===> Failed to find dependencies: python3:from<native>" 18:49
should that be removed from META.json?
or is there some way to each zef what that means?
moritz <- packaging newb 18:50
timotimo is it a system where "python" is python3 and "python2" is python2 and "python3" is missing? 18:53
codesections I get that it's complicated, and have worked my way through many of the ways the complication is handled. But I don't quite get why a Regex match can't do things the same as &unimatch.
m:say 'a'.unimatch('A', 'Uppercase_Mapping') 18:54
evalable6 True
codesections So Raku _knows_ the relevant Unicode properties 18:55
(which, at least on MoarVM, it really should – it compiles the whole Unicode Character Database.
) 18:56
But I guess it just hasn't told Regexen about some of them :)
moritz m: say 'A' ~~ / <:Uppercase_Mapping> / 18:59
camelia Nil
moritz m: say 'A' ~~ / <:Lu> /
camelia 「A」
codesections m: say 'aA' ~~ / <:Uppercase> / # also works 19:00
camelia 「A」
codesections it's just the ones that require a Str parameter that seem to be the issue
m: say 'Roman: Ⅴ' ~~ /<:numeric_value(5)>/; 19:01
camelia 「Ⅴ」
codesections well, some of them, anyway 19:02
19:02 Altai-man joined
moritz m: say 'Roman: Ⅴ' ~~ /<:numeric_value(5)>/; 19:02
camelia 「Ⅴ」
moritz m: say 'Roman: Ⅴ' ~~ /<:numeric_value(1)>/;
camelia Nil
19:04 sena_kun left, aluaces joined 19:07 sjaveed joined
sjaveed hello everyone! 19:14
tellable6 hey sjaveed, you have a message: gist.github.com/cb62d9fd9abcffca3b...cb419d547a
sjaveed i do?
oh nice 19:15
thanks for the info tbrowder!
and thanks tellable6 :-) nice bot 19:16
tellable6 sjaveed, Anytime!
sjaveed ok so i'm trying to figure out a couple of things: 1. how to organize code in modules - so far I've just been making each class its own module (in a corresponding .rakumod file) 19:23
not sure if there's an idiomatic way of organizing code or e.g. multiple classes within a module 19:24
that might be partly because of some confusion on my part about the meaning of a module - is it essentially like a Java package? The namespace for a class if you would?
the other question is about creating reusable modules that can be published to cpan - there don't seem to be any decent guides on that 19:25
i'd love some pointers
solving the second might also solve the first but not sure 19:26
this seems to be pretty bare bones: docs.raku.org/language/modules#Pre...the_module but seems to indicate that i might be on the right path 19:33
codesections m: say '1Ⅰ2Ⅱ 3Ⅲ 4Ⅳ 5Ⅴ 6Ⅵ ' ~~ m:g/<:Numeric_Value(2..6)>/ # wow
camelia (「2」 「Ⅱ」 「3」 「Ⅲ」 「4」 「Ⅳ」 「5」 「Ⅴ」)
codesections sjaveed: I haven't used Java, but isn't the general rule there "one class" == "one file"? That's not nearly a universal rule in Raku, ime 19:34
sjaveed you *can* have inner classes in Java 19:36
codesections I think Raku code organization turns more on style/how it makes the most sense to future readers
sjaveed so how does that work in the Rakuniverse?
codesections Oh, ok. Like I said, I don't really know Java
sjaveed understood
my other context is ruby where you can have multiple classes in the same file 19:37
but the concept of modules there is a bit different
or seems to be in any case
so codesections you've put multiple classes in a single rakumod file?
and in that case when you use that module, what gets injected into the namespace? 19:38
both classes?
19:41 kylese left
SmokeMachine m: my token number { \d*\d+ }; say "100" ~~ /<number>/ # should it be matching? 19:41
camelia Nil
SmokeMachine ok, I got it! thanks!
codesections sjaveed: yeah. (I just tested that to make sure. I _tend_ not to use a ton of classes – I lean more towards functional programming. So I wanted to make sure that didn't cause any issues 19:44
thundergnat SmokeMachine: tokens don't backtrack, \d* gobbles up all of the digits and doesn't leave at least one for the \d+ 19:45
so it fails
SmokeMachine thundergnat: yes, I got it, thanks!
sjaveed nice ok i think i'm starting to get a better understanding of module structure at least 19:47
thanks codesections
now to see if i can create ruby-style dsl 19:48
codesections Glad I could help :) “ruby-style dsl” ooh, that sounds fun! 19:49
timotimo we do have an example nqp compiler "rubyish" 19:50
sjaveed oh? i'm guessing it doesn't work on all of ruby but a decent subset 19:51
and nqp is the underlying bytecode right? what parrot runs?
still getting up to speed on everything sorry
19:52 zacts joined
thundergnat m: say join ' ', (0x20 .. 0x0FFF).map( { .chr ~~ /<:nv(1|2|3)>/ or next } ).batch(3)».join; 19:52
camelia 123 ²³¹ ١٢٣ ۱۲۳ ߁߂߃ १२३ ১২৩ ੧੨੩ ૧૨૩ ୧୨୩ ௧௨௩ ౧౨౩ ౹౺౻ ౼౽౾ ೧೨೩ ൧൨൩ ෧෨෩ ๑๒๓ ໑໒໓ ༡༢༣
thundergnat cool
codesections parrot is pretty much dead, actually (insert your own monty python joke).
The main VM right now is MoarVM
there are also a runtime on JVM and one for JS, though they aren't as far along as far as I know 19:53
sjaveed lol it's an ex-parrot?
tadzik oh, rubyish. I remember contributing to that
codesections (I've only used MoarVM)
sjaveed ah ok
tadzik that might have been one of the only things on my resume that I sent for a real job
sjaveed some of my knowledge is from looking at perl6 a few years ago and while i've been using moarvm, i wasn't sure if that was still tied to parrot or not 19:54
tadzik: so with that in mind - assuming i'm looking to replicate ruby-style dsl, thoughts on a direction i should investigate? 19:55
tadzik oh no, that was cardinal
codesections Nope. MoarVM is a new runtime, written in (fairly minimal amounts of) C
sjaveed grammars, from what i read briefly, seem to rely on reading from a file so might be useful for somethings
codesections grammars can read from a file (with the `.parsefile` method) or parse a string (the `.parse` method) 19:56
tadzik sjaveed: hm, I'm not sure. What makes a ruby-style dsl ruby-style? :)
but yes, you definitely want to use grammars for this 19:57
cardinal's parser may be servicable for this still
sjaveed so what if i wanted to mix grammars within my ruby code?
raku code
tadzik github.com/parrot/cardinal/blob/ma...grammar.pg
probably won't work as-is, but may serve as at least an inspiration
grammars are raku code :) 19:58
so there's nothing you need to do to mix them in
MasterDuke maybe look at Slang::SQL for inspiration
sjaveed no what i meant was - i wanted to use a grammar to parse in a rakumod file as raku with some augmented functionality
oh hmmm
MasterDuke: that sounds interesting 19:59
19:59 rindolf left
sjaveed oh that does look interesting 20:00
this is the correct github, right? github.com/tony-o/perl6-slang-sql
looks like it hasn't been updated in a while but the examples are promising
tadzik there's a chance that it just works perfectly today and doesn't need any updates :) 20:01
sjaveed hah the code is minimal so it seems plausible 20:02
so it looks like SQL::Slang relies on a single sub named sql which accepts a string (the sql query/command), a list of query param values it seems like and a block and then uses the defined grammar to parse that string and then execute it 20:07
so two things of interest there: first, that whole mechanism is very cool, and second, I've not looked at defining subs directly on a module which would be the other aspect of getting to a ruby-style dsl 20:08
MasterDuke there's also Inline::(Perl5|Python)
sjaveed yeah but i'm not interested in using ruby directly 20:09
MasterDuke ah
sjaveed just using this project to learn raku
it's such a vast language that i feel like it would be very hard to learn everything unless you learn it with a purpose 20:10
a set of goals in mind
i just played with raku regexes recently and they're familiar but also so different 20:11
now its on to seeing how to do ruby-style dsls in raku since that's something i loved about ruby
and i feel like raku has everything *and* the kitchen sink so there's likely a way to get that done as well 20:12
anyway - sorry for the oversharing :-)
timotimo there was a nice talk about DSLs in perl6 two or so years ago 20:14
and another article very recently
have you had a look at how Cro's HTTP Router does Its Thing?
sjaveed yeah i saw the talk
yup went through that as well
timotimo cool
that'd be a good start
sjaveed ended up finding another router that uses regexes
but i ended up creating my router which was nice
got a link that that article though timotimo? 20:15
timotimo hmm, let's see
i don't remember much about it
it was for dynamic variables and what they enable
sjaveed oh interesting
i came across the term recently - related to closures right? 20:16
20:17 patrickb left
timotimo sorry, rather distracted 20:17
dynamic vars are more about call stack than closures 20:18
sjaveed ah ok - yeah another thing i'll have to look at - hoping something leads mw that way
timotimo cro's "router" is a sub that just takes a block (closure, essentially), sets a dynamic variable with a specific name, then calls the block you give it 20:19
the "get" and "put" and other subs also take a block (pointy block, so it also has a signature) and will look up the dynamic variable and that's where the block gets "installed" 20:20
sjaveed right
when i initially looked at Cro::Router it was for the string -> regex conversion
but i need to look at it again for how it handles its dsl
timotimo dynamic variable is a little like "global variable", except essentially per-thread without being a Thread Local Variable 20:21
by virtue of living on the callstack
sjaveed oh interesting
timotimo they are also not exactly blazing fast
sjaveed so is it used as a thread local variable? or are thread locals still idiomatic?
timotimo we do have a dynamic variable cache, though, so it's not as tragically slow as it could be
sjaveed nice 20:22
reading this now with an eye on dsl: www.jnthn.net/papers/2020-gpw-cro.pdf - i'll start looking at the Cro::Router code shortly to see how that's laid out 20:23
there's a concept of subsets? my subset UUIDv4 of Str where //? 20:24
timotimo aye
sjaveed it's amazing how often i find things like this that just fit a use case 20:25
timotimo it's all run-time checked, though
sjaveed how's raku not the slowest language on the planet?
timotimo oh it's pretty slow :P
i meant the subsets, though, not everything
sjaveed admittedly my scripts are small but seems ok so far lol
maybe i'll start cursing its speed at some point when i stop gawking at its features
20:26 zacts left
timotimo the difference between rakus fast features and its slow features can be biiiig 20:26
sjaveed yeah?
timotimo but most of the time a very simple tweak to your code can get you from slow to fast-enough
also, post your code on the channel for a chance to win fabulous speed increases 20:27
to rakudo itself
sjaveed oh nice!
timotimo have you read the raku weekly at all?
sjaveed but yeah i'd probably never imagine something like subset exists and would've implemented it myself so if it turns out to be slow, i figure i can always go back to doing things manually 20:28
is that a newsletter?
timotimo often you see messages a la "made $feature $number times faster" or "made $feature $number percent as fast"
sjaveed nice
MasterDuke rakudoweekly.blog/2020/09/14/2020-...ally-raku/
sjaveed looks like there's plenty of opportunity to contribute to moarvm itself then
timotimo yeah, every week it lists blog posts, interesting (or maybe just "all") tweets and comments and such, as well as stuff people have been working on in rakudo and such 20:29
sjaveed very cool
timotimo the optimization opportunities live at every level of the stack 20:30
sjaveed i might have to pick up moritz' book as well
timotimo: yeah feels like that
timotimo there's an interesting branch in moarvm at the moment for implementing a paper called "zero-overhead metaprogramming" or something like that 20:31
sjaveed oh that sounds like an over-promise lol 20:32
but definitely interesting
timotimo it's a cool thing, it's based on recording stuff and reacting accordingly 20:33
and also, lets you write stuff in nqp code that handles policies 20:35
sjaveed so mixing nqp code with raku?
timotimo well, parts of rakudo are written in nqp
this is really deep internal stuff :) 20:36
sjaveed hah yeah and i'm a total beginner at this but some of these insights are fascinating
20:37 aborazmeh joined, aborazmeh left, aborazmeh joined
timotimo for some reason, not finding the code i wanted to show 20:38
hm 20:39
not really something you can just look at and realize why it's cool 20:40
sjaveed hah yeah i was just thinking that'd be like pearls before swine
timotimo haha
sjaveed i might not understand why it's so awesome
timotimo anyway, one part of it is that you can write stuff in C and it'll be fast, but moarvm's "record and optimize based on what we've seen" can't just look in there and toss out unnecessary overhead or anything 20:42
sjaveed i have to say that i didn't think i'd find as welcoming a community as i did when i went to ruby but #raku and /r/rakulang are pretty cool :-) 20:43
timotimo so we're moving things from C to nqp where moar's optimizer can observe and toss out repeated checks and such
sjaveed ah nice
that makes sense
is this part of the rakuast branch?
timotimo is much easier to grasp when jnthn does the explaining :D
sjaveed that talk got me fired up 20:44
timotimo rakuast is a separate project
El_Che timotimo: will there be a day where nqp code will be replaced by raku?
timotimo possible, but not necessary
sjaveed ah ok
timotimo um
i mean, it's possible, but not necessarily going to happen soon
sjaveed can i access any of the raku internals that are coded in nqp? 20:45
i'd imagine c would be a bit harder to reach
20:45 sno joined
timotimo you can reach relatively deep into the internals from raku itself 20:46
sjaveed nice
timotimo m: say Str.^methods
camelia (BUILD Capture Int Num Version chomp pred succ match subst-mutate parse-base samecase samemark samespace word-by-word trim-leading trim-trailing trim encode NFC NFD NFKC NFKD unival univals wordcase trans parse-names uniparse indent codes chars uc lc …
timotimo m: say Str.^methods[5].signature
camelia (Str:D: *%_ --> Str:D)
timotimo m: say Str.^methods[5].signature.parameters[0]
camelia No such method 'parameters' for invocant of type 'Signature'
in block <unit> at <tmp> line 1
sjaveed <3
alright - getting pulled away but i'll be back for more questions 20:48
thanks codesections and timotimo!
timotimo ah, see ya later
20:51 [Sno] joined 20:52 sno left, aluaces left
Geth doc/seq-op-variants: 2be59b347d | (Stoned Elipot)++ | doc/Language/operators.pod6
document sequence operator variants ^... and ^...^ ref #3360

while here add output to an example for this operator
doc: stoned++ created pull request #3647:
document sequence operator variants ^... and ^...^ ref #3360
linkable6 DOC#3360 [open]: github.com/Raku/doc/issues/3360 [checklist][docs][versions] Checklist for 2020.05
21:20 molaf joined
codesections um. After all that, it just needed different brackets 21:21
m: say 'ab' ~~ /<:Uppercase_Mapping{'A'}>/
camelia 「a」