🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 6 September 2022.
00:00 reportable6 left 00:01 reportable6 joined
Nemokosch hm, is the github site weird, then? this is what I see 00:01
cdn.discordapp.com/attachments/633.../image.png
cfa the second line is indented with a tab, that's why 00:05
likewise "Test::Util::ServerPort" and "Cro::HTTP::Client"
Nemokosch is there a difference between a plain block and a try block if one's handling all exceptions that can occur inside anyway? 00:09
rf That try should only produce errors that are catchable by the error handler I think 00:32
00:38 pingu joined
rf Caught a fairly nasty bug thanks to @2colours on github, if you're in here thanks! 00:42
Nemokosch I'm most definitely in here 🙊 00:43
there is another thing that keeps me pondering, which is .clone new-raku.finanalyst.org/type/Array...thod_clone 00:45
again, if it ever happened that you wanted to share a lazy lists across threads, there could be problems 00:46
rf Yeah, I think in the context you're mentioning, it should never be used across threads. If I did need to I would reach for channels 00:50
What you did show me, is that my compositions for routes were completely out of wack 00:51
They should be good now :D
Nemokosch for the .elems gotcha: github.com/rakudo/rakudo/issues/24...1348065571 these issues are good for more than just complaining 😉 00:52
rf I see 00:54
Nemokosch I don't know how you feel about looking up code in the core, for me the breakthrough was the module called CoreHackers::Sourcery that directly points to the part in the repo 00:56
iirc it's a thin wrapper around inspection tools the language/runtime provides anyway 00:57
01:04 xinming left
rf Not sure what you mean by in the core 01:05
01:06 xinming joined
Nemokosch mostly the "standard library" or "built-ins" or whatever name one would give them 01:10
stuff that is mostly written the same way you'd write your code, but is provided with Rakudo, and usually a part of the specification 01:11
tonyo stevied: the apple double file fix was released with fez:ver<40> 01:13
well, i don't know about fixed. i couldn't repro. the PR that should fixed it is merged 01:18
stevied Ok. Cool. I’ll test it out tomorrow. Thanks! 01:21
[Coke] wonders if there's a way to say "install all the deps you can" with zef, so if you know there's one bad one, you can install everything else leaving only those that failed out 01:35
tonyo is force not doing that? 01:40
err oh, you want the tests to determine failurestill
01:42 raschip joined
[Coke] anyone install Archive::Libarchive::Raw on an m1/m2 mac? 01:49
i've installed libarchive with brew, added the homebrew path to my PATH for the lib as indicated by 'brew info' and still it can't find libarchive.13.dylib 01:50
cfa so the library location is in (DY)LD_LIBRARY_PATH? 01:59
e.g. $ env LD_LIBRARY_PATH=/path/to/lib zef install Archive::Libarchive::Raw 02:00
[Coke] neither DYLD or LD help, no 02:04
cfa oh, do you have SIP (system integrity protection) enabled? 02:05
i think if that's active then changes to LD_LIBRARY_PATH are stripped
[Coke] yes 02:08
cfa where is libarchive.13.dylib installed?
[Coke] so I probably want developer.apple.com/documentation/...-variables 02:09
/opt/homebrew/opt/libarchive/ 02:10
jdv [Coke]: isnt there s flag for that?
--serial ? 02:11
[Coke] ?
cfa for your deps question, i think 02:12
[Coke] oh, for my zef question?
jdv yeah
[Coke] ah, entitlements are not some global thing. :|
so I think I either have to softlink from a known directory or disable SIP entirely 02:13
(if I was using the mac dev tools, I could do it for that project, I think)
cfa i have a hack for you if you want it 02:15
zef look Archive::Libarchive::Raw
then edit lib/Archive/Libarchive/Raw.rakumod 02:16
edit line 7, replacing 'archive' with '/opt/homebrew/opt/libarchive/archive'
obviously that will only work for this module but it's a stopgap measure 02:17
(this assumes you have /opt/homebrew/opt/libarchive/libarchive.13.dylib)
[Coke] thanks for the hack. I may have to do it.
cfa sure, good luck 02:18
[Coke] (mach-o file, but is an incompatible architecture (have (arm64), need (x86_64)) 02:28
(and path is /opt/homebrew/opt/libarchive/lib/archive 02:29
jdv is it a macho macho file? 02:30
02:42 evalable6 left, linkable6 left 02:44 evalable6 joined 02:45 linkable6 joined 02:51 raschip left 03:26 cfa left 03:52 MasterDuke joined 04:04 rf left 04:32 razetime joined 04:38 razetime left 05:00 derpydoo left 05:16 GreaseMonkey left 05:17 greaser|q joined 05:18 pingu left 06:00 reportable6 left 06:02 reportable6 joined 06:47 razetime joined 06:49 dogbert17 joined 06:52 dogbert11 left 07:38 ispyhumanfly left 07:41 ispyhumanfly joined 07:46 razetime left 07:50 Sgeo left 08:00 razetime joined 08:17 abraxxa joined 08:23 snonux joined 08:24 snonux_ joined 08:53 greaser|q left, greaser|q joined, greaser|q is now known as GreaseMonkey 09:06 snonux left 09:07 snonux_ left 09:12 dakkar joined 09:40 NemokoschKiwi joined
NemokoschKiwi \o 09:40
Maybe let's login with the normal client to fetch those messages as well 🤔 09:41
09:43 Nemokosch joined
Nemokosch o/ 09:43
tellable6 2023-01-29T23:11:18Z #raku <raschip> Nemokosch: True, but I'm having REPL problems lately and I wasn't sure if it was just me or a general thing, thanks.
2023-01-30T16:55:22Z #raku <raschip> Nemokosch: just drop this discussion, you don't know the community enough to do such generalizations.
Nemokosch .tell rf for operator adverbs (like :exists) - to make sure... you know that they have funnily low precedence, right? 09:44
tellable6 Nemokosch, I'll pass your message to rf
Nemokosch .seen rypervenche 09:45
tellable6 Nemokosch, gist.github.com/fd58ce833cbf47c7b9...ad84b16a8b
Nemokosch hm, interesting :D I remember them from the Hungarian learning server 09:46
09:46 Nemokosch left, NemokoschKiwi left
Nemokosch patrickb: may I ask where you use supply/react kind of stuff? 09:50
10:08 sena_kun joined
patrickb The Rakudo CI bot I work on uses Cro. And Cro::HTTP::Client often fails to setup HTTP2 connections because of the issues you are presumably looking at at the moment. 10:08
For others reading this. I was referring to github.com/Raku/problem-solving/issues/364 10:10
Nemokosch hm, lemme read up on the scope of this project 10:20
tbh I have to say blocker issues are less prevalent these days - I hope this means underlying bugs are less frequent, not that they are unnoticed 😅 10:27
10:31 lichtkind joined
patrickb nine, coleman, rf: I am still working on the Raku CI not, but got sidetracked by an epic bug hunt culminating in problem-solving#364. (In general I try to fix bugs I encounter instead of working around them.) That bug prevents Cro::HTTP::Client to robustly connect to Open Build Service. 10:33
Nemokosch well, my 2 forints is that this isn't only very respectable on a professional but also at least as valuable as the CI bot itself, as it directly affects the usability of the language 10:35
professional level+
10:36 jpn joined
nine patrickb: so the CI already unveils bugs before even running :D 10:52
Nemokosch btw you guys are around: another language version question. How does roast handle different specifications for different versions, especially "structurally" (I guess the test files can just do use v6.something)? 11:01
11:06 raschip joined
nine There are git tags for the different language version. 11:07
Nemokosch so is the specification per-version basically? 11:14
11:25 jpn_ joined 11:27 jpn left 11:28 razetime left
nine yes 11:29
11:34 Bocaneri joined, Sauvin left, Bocaneri is now known as Sauvin 11:38 Bocaneri joined, Bocaneri is now known as Guest4854 11:40 Sauvin left
Nemokosch thanks 👍 11:43
Geth Raku-Steering-Council/main: 877366b480 | (Elizabeth Mattijsen)++ | minutes/20230122.md
Minutes of 22 Jan 2023
11:49
11:53 Guest4854 is now known as Sauvin 12:00 reportable6 left, reportable6 joined
Geth Raku-Steering-Council/main: bdc928e272 | (Elizabeth Mattijsen)++ | announcements/20230131.md
Announce winner of the first Rainbow Butterfly Award

And the winner is: Oleksander Kiryuhin
12:12
Nemokosch I hope this will put him in a bit more optimistic mood ^^ 12:20
it just appeared to me that I wrote code with 6.e + experimental cached trait for "production" 🤣 12:30
although that "production" will probably be a tiny web service invoked once in a month, so not much "backpressure" 12:31
:(**@rest, *%rest) how is caching experimental 🤔
Nemokosch I think there were recognized problems 12:32
dunno the history of it but it seems that it was kind of a defensive choice to not push it straight into the core by default
nine A whole lot of rakudo has changed since then. I wonder if things like newdisp would allow for a fully working version of that trait. 12:36
12:36 razetime joined
lizmat the problem still remains what to use for a key in the cache 12:39
nine Maybe like sub foo($x, $y, $z) is cached({ $^a ~ 2 * $^b }) { } 12:42
Nemokosch and would it be possible to hash by the capture by default? 12:47
ugexe what does that even mean 12:48
what if one element is something that produces/generates element lazily?
its easy to imagine the cash where the arguments are strings and ints 12:49
cache^
but beyond that it gets complicated
Nemokosch well then perhaps the cache just shouldn't hit, and that doesn't sound complicated 😛 12:50
ugexe seems like we would expect the user to have to know quite a bit about what they're doing to use something that presents itself as very simple 12:51
just look at how confused some people get about state variables 12:52
nine If the user has to know and do so much themselves already, they may as well just declare that caching hash themselves. And that I guess is the story behind that experimental feature.
Nemokosch hm, they get confused about that? 12:53
anyway, there is kind of a good point here... would these caches be thread safe or not? 12:54
nine Of course not. Unless we decide that they should be, which then makes them slower than necessary when thread safety is actually not required. 12:55
Nemokosch now that could probably be a gotcha to somebody who used the feature as a part of a "pure functional bundle", expecting that they managed to avoid race conditions and such 12:57
12:58 jpn_ left
lizmat and that's just yet another reason why it is experimental 12:59
13:00 jpn joined
Nemokosch for what it's worth, I don't necessarily mind that it's behind some pragma because I know what I'm using it for, and for that it just makes the code more readable 😛 13:01
13:05 jpn left 13:22 rf joined
rf Morning folks 13:22
tellable6 2023-01-31T09:44:56Z #raku <Nemokosch> rf for operator adverbs (like :exists) - to make sure... you know that they have funnily low precedence, right?
13:28 rf_ joined 13:29 rf left 13:41 jpn joined 13:49 rf_ left, rf joined
Voldenet Regarding deadlocking supply problem, I've hit similar problems a few times, but always considered this to be my misunderstanding of something, heh 13:51
rf Deadlocking supply should be fairly rare, your channels should avoid depending on each other 13:54
Fire & forget and such 13:55
Voldenet I had no problems with channels ever, I remember having trouble with Supply.tap, Supplier::Preserving and live supplies mix 13:56
rf That would do it. 13:57
Voldenet It bit me when I tried to do things like wrapping executed commands into supplies (something similar to ix.io/2lWE) 14:01
the `sub on-supply(&code, Supply $s) { supply whenever $s { &code($_); emit($_); LAST done } }` looks like it could be replaced with tap, but iirc it failed some versions ago 14:05
I wish I've saved the failing code before fixing it 14:10
Nemokosch that happens all the time xD 14:30
when you actually try to get something work
tbrowder sena_kun: congratulations--a well-deserved award! 14:36
El_Che sena_kun: cheers! 14:40
14:49 linkable6 left, evalable6 left 14:51 evalable6 joined, linkable6 joined
[Coke] sena_kun: Thanks for all you do, stay safe, thanks. 14:53
14:56 Sgeo joined 14:59 ab5tract joined
lizmat and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2023/01/31/2023-...b-awarded/ 15:11
Nemokosch cool image 15:15
rf lizmat++ 15:18
15:21 pingu joined, Tirifto left
pingu welp pastebin.com/yWyGbNe6 15:22
it is not catching the bell character 15:23
but BEL is ascii 7
ah wait nm, the ldraw file format says: Whitespace is defined as one or more spaces (#32), tabs (#9), or combination thereof. 15:24
ill see if it fails if I replace BEL with tab 15:25
oh wait tab isnt a character
?
ok yeah its 09 15:26
raschip 0x09
pingu ok it still fails 15:27
15:27 jpn left
pingu loop (my $column = 0 ; @x[$line][$column] eq chr(32) or @x[$line][$column] eq chr(9) ; $column++) 15:27
15:28 Tirifto joined 15:31 jpn joined
pingu also it does not seem to be incrementing index 15:33
maybe thats because the loop is exiting once it finds a space 15:34
Nemokosch > @x$line le chr(32) 15:39
15:40 dogbert11 joined
so.. you want only characters less than the space itself? 15:40
* less than or equal to
15:42 dogbert12 joined, dogbert17 left 15:45 dogbert11 left
pingu nm forgot to change it to tab in the file 15:45
only characters that are not space or tab
15:45 cfa joined
pingu it must also make an numeric index of each non space or tab paramater 15:46
and then check if that index[0] is equal to 0 1 2 3 4 or 5 else print ("invalid line type") 15:47
the first paramater is line type then color then xpos then ypos etc and the last param is the file (3024.dat)
only line types 0 to 5 are valid 15:48
but I wanna keep this C-ish so that I can actually understand what is happening
I don't use raku quite like normal people
because eventually i'll be rewriting this in C and you cant port OOP to C 15:49
so I dont use fancy operators and I try not to use methods but I like some or rakus features 15:50
like how I can just do lines() instead of having to (in C) search for '\n'
and string types have their uses in raku
15:51 dogbert17 joined
pingu so for each indexed paramater that is NOT space or tab it must create a given ... when block 15:52
15:52 dogbert11 joined, abraxxa left, dogbert12 left 15:56 dogbert17 left
Nemokosch well well 15:57
when you post things like this, at least keep in mind that you want such people to read it who are interested in reading and writing actual Raku code, not boilerplate-ish C code 15:58
nine "you cant port OOP to C" [Citation needed] 15:59
pingu you can but its a pain 16:00
it is actual raku code 16:01
its possible in raku for a reason
maybe when I learn raku more ill use it more like raku because its not like I'm gonna no longer be able to use raku like C. or know C 16:02
but for now I don't want to make the mistake as I did in C of not making programs and focusing on technical stuff too much
I need to practise figuring out errors and algorithms more! 16:03
everything is an algorithm
data types, values, data structures etc 16:04
Nemokosch to be clear: I'm not saying that there won't be anybody gladly joining you on this journey when you post code like this, I'm just saying that your starting position rather works against it
pingu sounds like people here learned C raku after learning raku where as I'm doing it the other way around 16:06
I just don't like relying on OOP as if they are magic black boxes, I would rather understand what is going on inside of them 16:08
hopefully the raku source code eventually boils down to bytecode or some low level procedural language 16:09
Nemokosch imo most people are just not particularly interested in writing "Raku as if it was C". It seems like something that defeats the purpose of using Raku in the first place
16:12 dogbert17 joined
pingu it would be nice if comma could use AI to refactor code (probably a rakudo feature really) 16:13
16:13 dogbert11 left
pingu and then display the refactored code as a copy of the original 16:14
comma IDE has options for refactoring but I think thats not quite what I was asking for 16:15
its probably just a way to organize manually refactored code or something
16:15 dakkar left 16:16 dakkar left
pingu kinda like github 16:16
16:16 dogbert17 left 16:18 dakkar joined 16:25 snonux joined 16:26 snonux_ joined 16:29 razetime left 16:52 snonux left, snonux_ left
Xliff lizmat: A question -- what do you think about executing binaries in Raku. Has the RSC determined if that is a priority over the next few years? 17:00
nine The RSC does not set priorities. The community may do so.
And really, the community's way of setting such priorities is just starting the work. Currently RakuAST is the priority. Simply by virtue of people working on it. 17:01
Xliff OK, so no one has taken PampleMouse's work any further? 17:02
I'm asking this for $dayJob.
We have ... concerns.
We have code we'd like to use in modular format.
However we want to keep the bytecode in a database, for numerous reasons. 17:03
If the goahead is given to continue my project, I'll probably have to be the one to take it up. 17:04
I'd like to know who would be available to support me if I do. Who should I direct questions to?
17:05 jpn left
Xliff Note that said work would NOT be for $dayJob, but for the community. 17:05
nine If you need commercial support for Raku, I think lizmat could be interested. There's also rootprompt.at 17:06
lizmat If this is just about storing bytecode in a database, that should be relatively doable, even without PampleMouse's work ? 17:08
[Coke] the rootprompt site is pretty but has no contact info 17:09
Xliff lizmat: Storing and executing from a database. Yes.
Does Moar (namely nqp) support executing bytecode from a given location in memory? 17:10
nine [Coke]: hah! That is....well....a definite usability issue. The info is behind that imprint link
[Coke] AHHH 17:11
nine it does 17:12
m_athias nine: I'll get our web development team right on it!
17:13 xinming left
Xliff nine: Is it listed in github.com/raku/nqp/blob/master/do...s.markdown 17:14
[Coke] nine: I had something sitting on my desk in front of the screen, I didn't even SEE that link at first. :) 17:15
I would expect imprint to be called something like "contact", but this may be my american bias.
here does it mean like "a printer's or publisher's name" ? 17:16
nine [Coke]: The imprint is there for legal reasons, but also contains exaclty the information I'd put on a contact page... 17:17
Yes, it does.
Xliff nine: A little help here. Which op is it? 17:18
I'm bouncing multiple things at once, so would be much appreciated. 17:19
nine something with loadbytecode
Xliff Can't find that on the page.
And neither can Chrome.
ab5tract I wrote a thing: 5ab5traction5.bearblog.dev/i-raku-...structors/ 17:20
nine not all ops are documented yet 17:21
ab5tract nine! good to see you here! thanks for all the RakuAST work you've been doing <3 17:22
I keep getting these impulses to dive in and help but I honestly don't have the first clue on how to approach it
nine ab5tract: it's surprisingly simple: run tests, pick one at random, start a normal debugging process 17:24
Like t/05-messages/03-errors.t currently errors out with: "Malformed my at line 33: my⏏ subset MeowMix of Int where .so;" 17:26
Nemokosch heh, see? the least we can say is that there are people who would expect to see some planning around activity... 17:27
nine Since parsing failed and the "special" thing about this line is a subset, that's what I'd look at:
> grep subset src/Raku/Grammar.nqp
nine@sphinx:~/rakudo (main =)>
Nemokosch and tbh even as volunteers, being somewhat managed wouldn't hurt with actually achieving what the members are doing anyway, just in a disorganized fashion 17:28
nine Yeah, subset is not even parsed yet. So look at src/Perl6/Grammar.nqp and search for subset to see what the old grammar does. Copy over that code to src/Raku/Grammar.nqp and then add actions
ab5tract ok, interesting
nine Nemokosch: we don't have people who want to manage and we don't have people who would want to be managed. So that line of discussion can only be theoretical until both facts change. 17:29
tellable6 nine, I'll pass your message to Nemokosch
Nemokosch I think both are relatively simple to change - the starting point, though, is that those people who accepted some formal or informal position, should be willing to be managed, if nothing else 17:30
and if noone else is
ab5tract so Perl6/Grammar.nqp and Raku/Grammar.nqp will have the same code, the new stuff happens in these actions. Which are added (in this case) a new Raku/subset.nqp file? 17:31
Nemokosch does Actions itself not remain?
I mean, as one file, not content-wise 17:32
ab5tract probably it does, I'm just not (much of) a core hacker
nine ab5tract: not entirely the same. The old grammar contains too much logic, which is no longer necessary. But often things can be taken verbatim. In any way it's a good start. There is a Raku/Actions.nqp that contains actions like any Raku grammar would need. Most of what it does though is create AST nodes via self.r('Foo', 'Bar').new(...)
Nemokosch anyways, great example: one article, or just a sketch, about how to start with RakuAST 17:34
nine Nemokosch: well volunteered! 17:35
tellable6 nine, I'll pass your message to Nemokosch
ab5tract I'll take a look. Thanks for the guidance. I really feel like with a written procedure / example of how one patch was made could create a big impact in terms of others being able to help on the efforts 17:36
nine I'm happy to answer further questions on IRC 17:37
ab5tract Excellent :)
How do I run the tests using RakuAST versus regular Raku
Nemokosch RAKUDO_RAKUAST is the environment variable to enable the new frontend
ab5tract It seems like new RakuAST patches are landing directly in main 17:38
Nemokosch++
nine RAKUDO_RAKUAST=1 ./rakudo-m -Ilib t/05-messages/03-errors.t
[Coke] Yes, AST is now on main. 17:39
Nemokosch I wonder when the next Rakudo class will be held. It's getting quite useful 👁️
or is there some predetermined schedule that I missed? :cameliathink: 17:40
Voldenet btw, regarding the constructors from the blogpost 5ab5traction5.bearblog.dev/i-raku-...structors/ 17:42
I wonder why can't you just instantiate the class by calling its class name
m: class X { has $.y; }; say X(:3y);
camelia No such method 'CALL-ME' for invocant of type 'X'
in block <unit> at <tmp> line 1
Voldenet m: class X { has $.y; }; say X.new(:3y); 17:43
camelia X.new(y => 3)
Voldenet it's obviously more verbose in a lot of cases where nested structures are needed
ab5tract nine: so are you going to leave the subset thingy alone? I'll pick it up and try to do something with it
nine Have fun with it!
Nemokosch something that has tempted me for a while is proper default values for different types of sigils (& in particular) 17:45
honestly I have spent way too much time on not noticing that I forgot setting the new frontend, and wondering where it got fixed 😅
17:46 xinming joined
Nahita can i get a hold on nqp:: things? like my &fun = &nqp::exp kind of thing 17:47
i guess they are not functions but something else... 17:48
ab5tract Voldenet: I think that's because of old coercion expectations? 17:49
Nahita that should have been exp_n in the example sorry, but it's an example
ab5tract m: say Int(7,5)
camelia 2
ab5tract m: say Int(7.5)
camelia 7
Nemokosch these are also something to fix in RakuAST iirc 17:50
Voldenet ab5tract: that makes sense, but constructor is more frequently used
Nemokosch these are not actual functions
Voldenet though it probably can't be implemented now without breaking compatibility
Nemokosch basically handled on syntax level
ab5tract definitely. but I think that it was a semantic distinction that was made long ago
Nemokosch: You are referring to the coercers? 17:51
tellable6 ab5tract, I'll pass your message to Nemokosch
Nemokosch yep
ab5tract: maybe you know this but finanalyst is mostly busy with the documentation site these days so your GTK::Simple might have to wait for the situation to get looser ^^ 17:54
[Coke] multi method post(URI $uri is copy, %form , Bool :$bin, *%header) { 17:55
^^ if I have a %foo hash, how do I pass this in to the *%header arg?
Nemokosch |%foo maybe? 17:56
Voldenet m: multi sub post($uri is copy, %form , Bool :$bin, *%header) { say %header }; post("uri", {}, :bin, |{ content-type => "binary/garbage" }) 17:59
camelia {content-type => binary/garbage}
18:00 reportable6 left
Voldenet m: my %foo = content-type => "binary/garbage"; multi sub post($uri is copy, %form , Bool :$bin, *%header) { say %header }; post("uri", {}, :bin, |%foo) 18:00
camelia {content-type => binary/garbage}
Nemokosch Nahita also asked a really interesting question that I'm not at all qualified to answer... 18:01
> can i get a hold on nqp:: things? like my &fun = &nqp::exp kind of thing
18:01 sena_kun left
but maybe somebody does know? 18:01
something rings a bell about "nqp ops" 18:02
Xliff See the link I posted...
github.com/raku/nqp/blob/master/do...s.markdown
Note: That document is stale. 18:03
18:03 reportable6 joined
Nemokosch "could use some sprucing up" 😄 another thing that seems easier to address after a few more Rakudo classes 18:03
18:04 tg57 joined
Xliff How can one take a RakuAST tree to bytecode? 18:04
18:04 sena_kun joined
nine nqp:: ops are not functions, they are low level ops 18:04
They cannot be referenced. 18:05
Voldenet nahita: I know that you can get hold on nqp:: things if you don't mind a few more allocations
tellable6 Voldenet, I'll pass your message to Nahita
Voldenet m: use nqp; my &s = -> int32 $x { nqp::say($x) }; s(42)
camelia 42
Voldenet m: use nqp; my &s = -> $x { nqp::say(nqp::unbox_i($x)) }; s(42) 18:07
camelia 42
[Coke] thanks 18:08
I would say ops.markdown is more incomplete than stale, but yes. 18:09
definitely a documentation gap
Nemokosch > How can one take a RakuAST tree to bytecode? 18:15
Xliff indeed touched the heart of the problem, I wish I knew that at least 18:16
Xliff Nemokosch - The next question then would be: How would one run said bytecode 18:21
As near as I can tell, a loader is basically: A routine that loads the main parsed script, loads the bytecode of all of the modules, loads the bytecode of the setting, and then executes the bytecode of the script. 18:22
nine ab5tract: a very useful technique is also to run a code example with --target=ast on the old compiler and with --target=qast on the new one and compare outputs. That's btw. what makes working on RakuAST fun: the result is usually very well specified.
Xliff I would appreciate knowing how right or wrong I am with the above explanation. 18:23
Nemokosch there is IMPL-TO-QAST on RakuAST nodes, that much is for sure 18:27
Nahita thanks 18:30
18:30 raschip left 18:33 dakkar left, pingu left 18:49 snonux joined, snonux_ joined
lizmat nine: is Xliff correct? I think he is... 18:52
ab5tract nine: So there's a lot of stuff that is used in the subset grammar that isn't available in Raku/Grammar . A bunch of dynamic variables and a method about docs 18:54
Do I just ignore these things while re-implementing? 18:55
19:09 NemokoschKiwi joined
nine lizmat: maybe on a first glance. But not really 19:15
ab5tract: I usually do. Ignore everything about docs/pod. Ignore variables until you know what they are actually needed for.
Often we actually don't need them anymore, because the information they are supposed to carry through actions code is now conveyed by the AST itself 19:16
19:26 abraxxa-home joined
Xliff nine: Can you give me a high level description of what is necessary? 19:30
nine I could, but I will stay away from this. 19:32
19:35 abraxxa-home left
Xliff nine: Can I ask why? 19:35
Or at least tell me someone else who can? 19:36
nine Because helping you carries too much risk of getting shouted at again. So I prefer to do something else instead. 19:48
Xliff nine: Firstly, I wasn't shouting. I was emphasizing. My use of caps is for emphasis. 19:49
nine: And you do not have to help me. I am asking you for advice. If you can't or don't want to help please point me to someone who can. 19:50
nine I definitely felt shouted at and I can do very well without that.
Xliff If you felt shouted at, that is on you. When this started, I explained then that it was for emphasis.
I cannot control how you feel.
And as a volunteer, I am passionate about my work and my contributions to raku. 19:51
ab5tract Is there a `dd` equivalent for nqp? 19:52
Xliff Your comments about my thoughts for improving CURI were belittling.
You completely ignored the use case.
And now, I am offering to volunteer more work to the Raku community. 19:53
And I am asking for your assistance.
As a fellow volunteer.
I would like to move away from past mistakes. 19:54
Can we do that?
Nemokosch ab5tract: I'm taking you already know about nqp::say?
nine ab5tract: not really. What I did for debug statements was adding nqp::bindhllsym('nqp', 'note', &note); to the end of nqp's src/core/IO.nqp. Then I can use nqp::gethllsym('nqp', 'note')("I'm here"); for my debug prints. That gets around the whole bootstrap issue thing with neither Raku's nor NQP's IO functions being available. 19:55
Voldenet there's nqp::say, but dd is implemented on Any github.com/rakudo/rakudo/blob/4b26...y.pm6#L541
nine ab5tract: you can print strings and stringify stuff in a limited way. $foo.HOW.name($foo) is very useful as replacement for $foo.^name 19:56
Xliff nine: Or are you stating that you are willing to prevent more volunteers to contribute to this language because of how you feel about them? 19:57
It's not about you. Or me. It's about Raku. 19:58
And that's a damned chilling piece of behavior for a member of the RSC.
nine I'm just protecting myself. I'm pretty sure I already contribute enough, so I don't have to take risks on top of that. And if me protecting myself makes me unfit for a seat on the RSC, I'd be happy to leave that to some other volunteer. 19:59
Xliff nine: I am not a threat. Not to you or anyone else. 20:00
And it's not a matter of how much you contribute.
Nemokosch talking about "egoless programming"...
Xliff I have almost 1,000,000 of unreleased Raku projects due to the affore mentioned problem with CURI. 20:01
I'd like to be releasing those.
However I cannot... PRECISELY because the UX of installing would be less than ideal.
If I did release them, I'd have the top 18 largest projects in the ecosystem.
And I asked for a "high level description" of the module loader. How are you risking anything from providing one? 20:03
And again. If you are unwilling to volunteer this information. Please volunteer the name of someone else who can?
Please note, I an not saying that I am better than you. I am not. 20:08
Your continued work on RakuAST is worthy of the utmost respect.
Which you have.
However today's behavior dilutes it a little.
Nemokosch meh, leave it, you are not getting anywhere 20:10
the situation is unfortunate but ultimately the only chance is to get more people involved, and hope that the diversity would increase 20:11
nine It's simple: since you deny doing any harm, there is no reason to believe, that you will do any better in the future. So I have to go on the assumption that if at any point you don't like the solution I suggest you get argumentative and hot and will end up shouting again. And that is just not why I'm active in the Raku community. If I wanted that I could at least get paid for it. Don't have to do that in my 20:12
spare time.
Xliff: I certainly did not intend to belittle you. I'm sorry for coming across that way and for making you feel bad. I can have that effect despite completely different intentions. 20:20
20:23 dogbert17 joined
Xliff nine: You did. I got excitable. I felt like you were insulting my suggestions for CURI improvements. 20:25
Again with the feels.
So in that spirit... please realize that when I use caps I am using them for emphasis. I never intended for you to take it as shouting. 20:26
I did not, and never intended, to shout at you. 20:27
er...
20:27 dogbert17 left
Xliff s/intended, to/intended to,/ 20:28
nine Well, all's well that ends well I guess :) 20:29
Xliff nine: I guess. :) 20:30
nine Btw. these are the conventions I grew up with: *bold*, _underlined_, /italic/, SHOUTED
Xliff Noted. I will use those.
But please do give me a bit of latitude. Old habbits and all... 20:31
s/habbits/habits/
nine I just looked it up in MoarVM source code: loadbytecodebuffer is the op for loading a comp unit from an in-memory buffer
Xliff That's as far as I got. Thanks for the reference. 20:32
nine CompUnit::Loader.load-precompilation is a Raku wrapper around that
Xliff If it will help, can I ask this in problem-solving so it can be documented and you... or someone else... can answer at their leisure?
nine I don't know why, but the likelyhood of getting something out of me is higher on IRC than on github. I think it's because here I can just throw half an answer in and elaborate when the inevitable questions arise. On github or email I feel compelled to give a well thought out, complete answer which feels like it would take a lot of time and I let myself get distracted 20:34
If I were keen on storing modules in some database, I'd write a CompUnit::PrecompilationStore or maybe even a CompUnit::Repository with that kind of backend. 20:39
Xliff Fair enough. But I am more concerned with module loading.
When you get a chance, can you write a quick paragraph sized description of what the loader does? 20:40
I can take it from there.
Nemokosch 🧠 20:42
cdn.discordapp.com/attachments/633.../image.png
lizmat Xliff: this is an area where none of the current core developers have spent a lot of time: I think you'll need to look at the source code 20:50
Xliff lizmat: *sigh* 20:51
lizmat Xliff: sorry, but we would all have to spend time looking at it
for me, it's at least 2 years ago since I really looked at that 20:52
ab5tract In terms of $*W / $world, I take it that we are making a different approach in RakuAST. example: the old subset code in Actions uses `dissect_longname`. I assume there is something similar available already in RakuAST-land, but if not, where does it go? Onto one of these IMPL- style methods I see everywhere? 20:55
Xliff lizmat: Oh, no worries. No need to apogize.
lizmat ab5tract: World.nqp will not exist in Raku land 20:56
so no $*W either
Xliff It's just that I have so much Copious Spare Time™! </snark>
lizmat well... same for me: some people want me also to write a RakuAST blog post :-) 20:57
Xliff LOL! ;) 20:58
nine ab5tract: all that is now taken care of by the RakuAST::Name nodes. $*W is gone 20:59
21:00 ispyhumanfly left
nine Xliff: I don't think I can write that paragraph, because I don't understand well enough what you need. 21:01
Xliff nine: OK. Then maybe this is something for problem-solving. I may need to write down my thoughts in a concise manner. 21:02
I have to /away now. I have other things to take care of. 21:03
Xliff ... away &
21:03 Xliff left
Voldenet in raku you are only allowed to shout when you're catching an exception 21:06
(there are more phasers, but I've ignored them for the sake of the joke) 21:07
Nemokosch Voldenet: I have an interesting bug for you 21:12
m: multi sub bar (str $s) { say "voila" }; bar("abc") 21:13
Raku eval Exit code: 1 Cannot resolve caller bar(Str:D); none of these signatures matches: (str $s) in block <unit> at main.raku line 1
Nemokosch this... kinda makes sense, right? A native str is not quite a Raku Str that we're passing. So far, so good.
I'm going to change only one thing in the function body
a really simple change 21:14
Voldenet say "abc"? :)
Nemokosch m: multi sub bar (str $s) { "voila".say }; bar("abc")
Raku eval voila
Nemokosch and it works
Voldenet Wait, what
Nemokosch yes 21:15
MVM_SPESH_DISABLE=1 is the right env to turn the spesh off, right?
because it really seems that this keeps happening even with the spesh off 21:16
which leaves me as clueless as a bat in the microwave oven
ab5tract Okay, so my initialization of a name variable in Actions could look like: `my $name := self.r('Name').new($<longname>)` ? 21:25
21:27 ispyhumanfly joined
ab5tract Nemokosch: I wish MVM_SPESH_DISABLE noted its existence somewhere in the run output 21:27
tellable6 ab5tract, I'll pass your message to Nemokosch
Nemokosch yep, that would be nice 21:28
Voldenet you can easily verify it
21:28 NemokoschKiwi left
Voldenet MVM_SPESH_LOG=eh MVM_SPESH_DISABLE=True raku whatever 21:29
with disabled spesh log will be empty
btw, I can break it back again for you
m: multi sub bar (str $s) { "voila".&say }; bar("abc")
camelia Cannot resolve caller bar(Str:D); none of these signatures matches:
(str $s)
in block <unit> at <tmp> line 1
Nemokosch 🧠
21:31 ispyhumanfly left
Voldenet m: multi sub bar (str $s) { .say }; bar("abc") 21:38
camelia Cannot resolve caller bar(Str:D); none of these signatures matches:
(str $s)
in block <unit> at <tmp> line 1
Voldenet this makes you think, doesn't it
you can remove or add some characters to get the same output 21:39
nine Have you tried running it with rakudo --optimize=0 ?
nine@sphinx:~/rakudo (main =)> rakudo -e 'multi sub bar (str $s) { "voila".say }; bar("abc")' 21:40
21:40 snonux_ left, snonux left
nine voila 21:40
nine@sphinx:~/rakudo (main =)> RAKUDO_RAKUAST=1 ./rakudo-m -e 'multi sub bar (str $s) { "voila".say }; bar("abc")'
Cannot resolve caller bar(Str:D); none of these signatures matches:
nine@sphinx:~/rakudo (main =)> rakudo --optimize=0 -e 'multi sub bar (str $s) { "voila".say }; bar("abc")' 21:41
Cannot resolve caller bar(Str:D); none of these signatures matches:
21:41 snonux joined 21:42 snonux_ joined
Voldenet in fact, say isn't necessary 21:42
Nemokosch going from optimize=1 to optimize=2 seems to be the entry point of this bug 21:43
Voldenet m: sub do-not-say($x) { }; multi sub bar(str $s) { do-not-say "voila" }; bar("abc")
camelia Cannot resolve caller bar(Str:D); none of these signatures matches:
(str $s)
in block <unit> at <tmp> line 1
Nemokosch XDD
m: sub do-not-say($x) { }; multi sub bar(str $s) { "voila" }; bar("abc")
Raku eval
Nemokosch liar...
Voldenet I mean, any subroutine triggers this bug
Nemokosch arguably the subroutines were the right behavior - or intended, at the very least 21:44
the idea is that str and Str should be separately dispatchable 21:45
21:47 MoC joined
Voldenet Yes, most likely so 21:47
m: sub do-not-say($x) { }; multi sub bar(str $s) { do-not-say "voila" }; bar(my str $ = "abc")
camelia ( no output )
21:49 lichtkind left
Nemokosch also, only subs do upgrade strs to Strs which is I'd say a pragma > dogma choice 21:49
but none of that has anything to do with poor optimizer messing up signatures 😦
nine My guess is the static inliner is to blame. Seems to think this sub can be inlined when it shouldn't 21:50
Yes, pretty clear when comparing output of --target=ast with --target=optimize 21:52
Nemokosch ha, don't underestimate the value of these little hints of where you are looking for clues 21:53
Voldenet either way, RakuAST have fixed this already :) 21:56
Nemokosch because it has no optimizer I think 21:57
so yeah, it fixed it by the implicit --optimize=0, lol
ab5tract nevermind my last question, it's obvious that $<longname> comes in "as" a RakuAST::Name 22:05
This is some pretty brain-bendy stuff though
22:08 rf left 22:12 NemokoschKiwi joined
NemokoschKiwi .seen thundergnat 22:12
tellable6 NemokoschKiwi, I saw thundergnat 2023-01-30T00:24:54Z in #raku: <thundergnat> *your
NemokoschKiwi thundergnat: are you around by any chance? 22:13
tellable6 NemokoschKiwi, I'll pass your message to thundergnat
22:15 tg57 left 22:16 NemokoschKiwi left 22:22 pingu joined
pingu . 22:22
22:27 ab5tract left 22:31 MoC left 22:36 NemokoschKiwi joined
NemokoschKiwi weekly: 5ab5traction5.bearblog.dev/i-raku-...structors/ 22:36
notable6 NemokoschKiwi, Noted! (weekly)
22:36 NemokoschKiwi left 22:37 ispyhumanfly joined
pingu can raku jump out of code early 22:40
so like GOTO
but only used to jump forwards not back
Nemokosch like... return? or what do you mean 22:43
22:46 ispyhumanfly left
pingu kinda 22:52
I have a bunch of non nested if statements, if one is false it should quit the whole program not skip to the next if statement 22:53
err, if one is true*
if one is true quit the program otherwise jump to the corresponding else statement# 22:54
also there isnt a function to return from
22:56 sena_kun left
pingu if (@x[0][0] ne chr(32)) { exit(); }else{ #'{do stuff}`} if (@x[0][1] ne chr(32)) { exit(); }else{ #'{do stuff}`} 22:57
like that
so kinda like break;
just exiting until label that is below all of the if statements is fine 22:58
exiting to a label*
from there I can just have the program end by typing nothing
docs.raku.org/type/Label
23:00 rf joined
Nemokosch idk if this works with non-loops though 23:01
a hack could be to throw and CATCH 23:02
quite an ugly hack tbh
Voldenet control flow exceptions are not that hacky
python uses that approach excessively everywhere 23:03
however imo the best way is creating a subroutine inside of your subroutine with some code that returns 23:04
pingu if (@x[0][0 ] eq chr(32) or @x[0][0 ] eq chr(9)){last END}else{print(@x[0][0 ], "\n");} 23:06
if (@x[0][1 ] eq chr(32) or @x[0][1 ] eq chr(9)){last END}else{print(@x[0][1 ], "\n");}
END:
this isnt real code im just messing around
Voldenet m: sub thing { for ^$^i -> $num { sub process-one { return if $num %% 2; return if $num %% 3; say $num }; process-one } }; thing(42) 23:07
camelia 1
5
7
11
13
17
19
23
25
29
31
35
37
41
Voldenet or even 23:09
m: sub thing { for ^$^i -> $num { sub { return if $num %% 2; return if $num %% 3; say $num }() } }; thing(42)
camelia 1
5
7
11
13
17
19
23
25
29
31
35
37
41
Voldenet in this case there's only one variable captured, so it's easy to refactor this outside of this scope, but it's not always the case
Nemokosch control flow exceptions are a surprisingly bad decision in Python xD 23:11
Voldenet coroutines are utterly horrible thanks to that :) 23:12
pingu even goto is bad in C (unless you use it to only jump forwards
and polymorphism
though that is sometimes useful if you dont care about debugability 23:13
like in skyfall :p
can raku do polymorphism?
Voldenet Yes 23:14
m: class X is Exception {}; sub t { $^n %% $^t and X.new().throw }; sub thing { for ^$^i -> $num { CATCH { when X { next } }; t($num, 2); t($num, 3); say $num }; }; thing(42) 23:15
camelia 1
5
7
11
13
17
19
23
25
29
31
35
37
41
Voldenet the same code as above, but with exceptions, it's useful if "return" statement needs to be deeply nested 23:16
23:16 thundergnat_ joined
thundergnat_ . 23:16
tellable6 2023-01-31T22:13:47Z #raku <NemokoschKiwi> thundergnat: are you around by any chance?
thundergnat_ I am now...
My available time for IRC is very sporadic, though I read the logs pretty regularly. 23:17
Nemokosch it was just "unbuffered terminal" stuff, you know, not many people I could think of 23:18
23:19 lichtkind joined
what I didn't know is that ab5tract also had a fair share of low-level terminal work so the "original poster" found what they wanted to know 23:19
thundergnat_ Ah. 👍 23:20
Nemokosch sometimes it seems more effective to try to "chase someone down" specifically than to be like "anybody who might know about unbuffered terminal, feel addressed", haha
thundergnat_ Sadly my unbuffered terminal knowledge is mostly gained by trying dozens, if not hundreds of things that didn't work. When I finally stumbled across something that did, I wrote it down. 23:23
pingu heres what I mean onlinegdb.com/Z4AxRK4HG
the code above I don't understand yet :| 23:24
it works tho
23:24 tg57 joined
pingu so im not sure how to change it to suit the rest of my code 23:24
Nemokosch don't worry, Voldenet has a thing for baroque code 23:26
anyway, if you have a justified reason to do this, you might actually throw an exception or return 23:29
this is also a priceless post 5ab5traction5.bearblog.dev/fixing-...s-windows/ 23:45
so many people wish they knew it...
23:48 simcop2387 left 23:49 perlbot left, tg57 left 23:53 simcop2387 joined, perlbot joined 23:54 ispyhumanfly joined 23:58 ispyhumanfly left