This channel is intended for people just starting with the Raku Programming Language (raku.org). Logs are available at irclogs.raku.org/raku-beginner/live.html Set by lizmat on 8 June 2022. |
|||
jaguart | stevied - do you want a code review of your mod (albeit from a newbie?) - I'll give it a go if you want, so I can learn too 🙂 | 00:43 | |
Nemokosch | good morning :DD | ||
jaguart | things like: dir-check fails if $dir.f -> but maybe should probably be fail unless $dir.d because symlinks - which might need a follow to see if they link to a file or a folder, etc. | 00:45 | |
Morning Nemo 😄 | |||
stevied | sure, absolutely | 01:03 | |
i'm not much past newb and have a lot to learn | 01:04 | ||
jaguart | do you have any thoughts on how? I could create a github pull request and then we can comment on my alternates? | 01:05 | |
stevied | ok, let's try that | ||
thanks! | |||
jaguart | ok - give me a few hours, have some bits to do first | 01:06 | |
stevied | ok | ||
I forget how to embed a variable in a variable: @.$ext-files | 01:07 | ||
$ext is the variable | |||
Nemokosch | and this is an attribute | ||
does @."$ext-files" not work? | 01:08 | ||
by the way, really, what is the obsession with this hack? :cameliathink: | |||
stevied | doesn't work, no | ||
Nemokosch | are Maps dull these days? | ||
jaguart | do you mean you want to interpolate an attribute name? ala docs.raku.org/language/packages#In...into_names | ||
stevied | yeah, an attribute | ||
jaguart | never tried this for attributes thoug | 01:09 | |
stevied | ok, cool. that was the section I was looking for. forgot where to find it | ||
Nemokosch | still not sure how this would apply to attributes | ||
I thought what I wrote would work for method calls at least | 01:10 | ||
jaguart | sounds like an anti-pattern though - why not have %.dir where you lookup using %.dir{$ext} | ||
stevied | yeah, good idea | ||
jaguart | the ."" method lookup need parens I think - ."$ext"() | 01:11 | |
Nemokosch | m: my $lol = 'polymod'; say 5."$lol"(); | ||
yes, I think it works | |||
had to realize there is no evalbot for the time being | |||
the cost of the bridge switchover | |||
jaguart | did someone kill her :o | ||
Nemokosch | the thing is, gfldex hosted the evalbot AND the bridge, they might have been the same program even | 01:12 | |
so now that there was a bit of motion to get a bridge that isn't tied to gfldex but rather the discord mods, the evalbot function isn't solved yet | 01:13 | ||
jaguart | so no m: use nqp;... 😉 | ||
Nemokosch | not gonna lie, this bridge looks nice at least, if it's written in plain old JS(/TS) | 01:15 | |
maybe there can be a glot.io solution for evaling, we'll see, no stress for now 😄 | |||
the OG move would be to adopt the Camelia IRC bot, of course | 01:16 | ||
02:21
rf left
03:40
rf joined
04:15
rf left
|
|||
jack9 | m: my $str = 'x'; class Foo { has $.x; } say Foo.new.$str; | 06:15 | |
jaguart | jack9: maybe my $m = 'x'; class C { has $.x; }; say C.new(:x("y"))."$m"(); | 06:49 | |
the ."$m"() --> calls method by interpolated name .""() | 06:51 | ||
08:52
dakkar joined
|
|||
jack9 | can you use c++ instantiation syntax in raku | 10:05 | |
Nemokosch | do you mean like new Classname? | 10:06 | |
jack9 | yes | 10:17 | |
Nemokosch | You could fake it I guess but there doesn't seem to be any point. A constructor still has the API of a method. | 10:36 | |
you could invent a prefix new operator, for example but not sure how it would add up | 10:37 | ||
jack9 | you can literally create operators in raku | 10:47 | |
with precedence? | |||
Skarsnik | yes, you can even inject new grammar (slang) | 10:54 | |
jack9 | raku be context sensitive | 10:58 | |
Nemokosch | yes, you can kind of create DSL's | 11:06 | |
but this will probably be easier and more stable once the RakuAST developments mature | 11:07 | ||
11:11
ab5tract joined
|
|||
jack9 | RakuAST? is that a module to expose raku asts? | 11:18 | |
Nemokosch | a bit more than that: it's basically a new representation of Raku code | 11:21 | |
a representation that both a compiler and an author can use | |||
as things stood for a long, long time, there was the written textual code and the Rakudo parser tried to turn it into its own VM representation, QAST | 11:23 | ||
QAST is something the Rakudo backends, especially MoarVM but I think basically all three, like to consume | 11:24 | ||
but it has quite little to do with Raku's syntax structure per se. A lot of things are dismantled and generated to leverage the backends that consume it | 11:25 | ||
so the idea was that it would be much easier to generate code, both for the compiler and especially for the authors, if there was a way to represent Raku code directly, without either having to parse it again or basically use a lower-level, highly compiler-specific structure that isn't really Raku | 11:26 | ||
I only took a couple of looks at it but I can say (and it's pretty much agreed by more experienced developers) that the compiler also got much cleaner, it's way easier to understand what is going on | 11:27 | ||
if you check #raku-dev-irc , it's (almost) all about RakuAST developments at the moment. The parser is not yet used but it's actively developed and one can try it on a fresh build of Rakudo with RAKUDO_RAKUAST=1 env | 11:29 | ||
and module authors can try generating code with RakuAST nodes already | 11:30 | ||
jack9 | so like, python ast but more | 12:11 | |
Nemokosch | probably something like that, yes | 12:20 | |
jack9 | is there a way to see moar bytecode | 13:40 | |
Nemokosch | I think this is a #moarvm-irc kind of question | 13:42 | |
14:28
rf joined
|
|||
stevied | I'm not doing something right here: method has-legacy-extensions(*@exts where {@ext.grep: $_} ) | 14:48 | |
I want to limit the arguments that can be passed to the strings that are in @ext | |||
lizmat | And yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2023/01/23/2023-...nk-you-jj/ | 15:06 | |
15:28
jgaz joined
|
|||
rf | stevied: Try where { @ext.index($_) !~~ Nil } | 15:58 | |
Nahita | f(*@args where not @args (-) @allowed) | 16:05 | |
f(*@args where @args ⊆ @allowed) | 16:07 | ||
16:20
NemokoschKiwi joined
|
|||
stevied | @Nahita thanks! worked perfectly. even when for when @args is empty, which is what i want | 16:21 | |
Nemokosch | as a sidenote: *@args is a flattening slurpy, **@args is a structure-preserving slurpy and +@args is a slurpy that unrolls a single argument but otherwise it's like **@args | 16:23 | |
stevied | ok. yeah, forgot there were even different kinds of slurpies. you could literally write an entire book about signature arguments | 16:24 | |
there's a good reason raku took almost 20 years to write | 16:27 | ||
16:34
NemokoschKiwi left
16:57
jgaz left
17:11
jgaz joined
17:36
dakkar left
17:57
ab5tract left
|
|||
Nemokosch | @jack9 mastodon.lol/@julia/109717916604491146 another similar example to what I did with augment class and adding a method | 18:10 | |
20:44
discord-raku-bot left,
discord-raku-bot joined
|
|||
stevied | any module for searching and replacing content in a single file? | 20:53 | |
Nemokosch | pretty sure you could run rak that way | 20:55 | |
what do you have in mind? | |||
stevied | I want to easily update a META6.json file. Find all instances of String X, Y, and Z and replace with String A, B, and C | 20:56 | |
I could roll it myself but would rather not | |||
Nemokosch | okay, now there is not one pattern and one output but 3 literal strings | 20:58 | |
it makes a difference, for the latter, trans might be a better fit | |||
stevied | there could be less than 3 or many more than three | ||
Nemokosch | what do you need these indefinite string subsitutions for? | 20:59 | |
stevied | updating the names of file extensions | 21:00 | |
Nemokosch | I'm thinking if the META6 module is more convenient to work with | 21:01 | |
so yeah | 21:15 | ||
stevied | this one? raku.land/zef:jonathanstowe/META6 | 21:16 | |
Nemokosch | yep | ||
use META6; my $meta = META6.new(file => 'META6.json'); # whatever file path | |||
stevied | how does that make it easier for me to edit an existing file? | 21:17 | |
Nemokosch | by reading that existing file and turning it into an object and a map? | 21:18 | |
stevied | yeah. other option is to just do a slup of the file and do some regexes on it | 21:19 | |
that's easier for me, at least | |||
Nemokosch | well then do that | ||
I for one think it's harder, besides being more fragile | 21:20 | ||
stevied | is the provides section the only part of the file that would have file extensions? | 21:22 | |
I think it is. | 21:23 | ||
Nemokosch | in theory the resources part could also contain relevant files, although it typically wouldn' | ||
stevied | true, at least not related to the operation of the module. thought I should probably exclude that directory when I search for legacy extensions | 21:24 | |
actually, there are probably other dirs like that. hmmm. | |||
using a regex will leave a smaller footprint. won't mess with the persons' whitespace or anything like that. | 21:27 | ||
Nemokosch | whether the latter is a good thing could be debated | 21:28 | |
stevied | can you think of a time when .t or .pod6 files would ever be listed in META6.json? | 21:29 | |
Nemokosch | pod6 I could imagine in the resources, especially if you are finanalyst who really fancies Raku-native formats for basically everything | ||
by the way, I'm also somewhat disappointed by the META6 module, I thought it would have a nicer interface... | 21:30 | ||
stevied | yeah, I don't think the module should touch anything in resources | 21:31 | |
Nemokosch | the question is really, how much foolproof you want to be, how much it's a problem if some files get unwanted modifications | ||
stevied | well, the user will have an opportunity to review what gets changed before the module does anything | 21:32 | |
at least in the command line version of the module | |||
p6steve | github.com/jonathanstowe/META6 maybe could help | 21:34 | |
stevied | i think if I do a regex in just the "provides" section of the file and replace extensions between .\w+" I should be safe | ||
Nemokosch | been there 😛 | ||
you know | 21:36 | ||
I'd be curious of a parser module | |||
that can give you a cursor in the file to the parsed nodes | |||
where they start, where they end | |||
I don't know if there is such a thing, and especially not how to look for this concept | |||
stevied | seems like it could be done easily enough with json | 21:37 | |
Nemokosch | anyway, this is getting a bit trivia style | 21:40 | |
it would be good to have a META6.json scheme "set into stone" more or less, I wouldn't be surprised if a valid scheme could be parsed with regex only even | |||
no deep nesting | 21:41 | ||
stevied | yeah, you'd think there would be a parser for existing meta6 files | 21:43 | |
oh, wait, that module can | 21:45 | ||
Nemokosch | it can but it discards whitespace and stuff | 21:48 | |
stevied | well, what I'm thinking is I do a hybrid approach. grab the provides section as json, make my changes to it, and then do a regex to replace the provides section in the original file | 21:50 | |
jaguart | watch out for mi6 build though - that rewrites the provides section based on the file system | 21:52 | |
in fact - maybe that's what you want? update teh filesystem and then run mi6 build | |||
stevied | i'm changing the names of the files in the filesystem first so that shouldn't be a problem | ||
jaguart | yeah - but that's exactly what mi6 does for you | 21:53 | |
stevied | but mi6 build would change their meta6.json file all around | ||
i don't want to touch anythign other than the file extensions | |||
jaguart | true - it does a sanity check that the provides matches the file system - because bad things happen when they dont | ||
and there seems little point in fixing something broken so it is still broken 🙂 | 21:54 | ||
also mi6 has been tested against a lot of modules and is in active use on multi platforms... | 21:55 | ||
how are you going to get all the dists to accept your pull requests? | |||
esp given that many of them don't respond, even after years of peep asking? | 21:56 | ||
are you going to fork all the dists? 😮 | 21:57 | ||
stevied | yeah, i'm going to fork all of them locally | ||
probably just do a few a day to start to see how it goes | 21:58 | ||
it'll help weed out module that have been abandoned | |||
jaguart | I see that your #166 fix is released in mi6 🙂 | 21:59 | |
stevied | yeah, gotta test it out. | 22:01 | |
22:02
NemokoschKiwi joined
23:05
NemokoschKiwi left
|
|||
Nemokosch | #166 fix of what? | 23:06 | |
btw @jaguart the evalbot doesn't... exist, yet |