🦋 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:02 reportable6 joined 00:18 perlbot left 00:19 simcop2387 left 00:27 simcop2387 joined 00:28 perlbot joined 00:33 jpn joined 00:36 simcop2387 left 00:39 jpn left 00:44 perlbot left 00:45 perlbot joined 00:48 perlbot left
SmokeMachine I've been playing with an idea of creating a package with "tools" to make it easier use Raku as a shell. I'm trying to "make it a shell" that instead of "pipe string" "pipe data structures" something like what nushell does but using Raku instead of creating a new language for that. Does anyone here think that make any sense? usercontent.irccloud-cdn.com/file/.../image.png 00:48
github.com/FCO/RakuSH 00:50
00:54 simcop2387 joined 01:06 perlbot joined 01:17 simcop2387 left, simcop2387 joined 01:33 razetime joined 01:54 simcop2387 left, simcop2387 joined, perlbot left 01:58 simcop2387 left 01:59 perlbot joined 02:00 simcop2387 joined
Anton Antonov @SmokeMachine Sort of makes sense. 🙂 I think more explanations are needed... 02:00
@SmokeMachine I did not figure out what is that package all about after looking at the examples for like 5-7 min. 02:02
02:02 jmcgnh left 02:15 jmcgnh joined 02:20 jpn joined 02:25 jpn left
SmokeMachine Anton Antonov: it creates the “data structures” piped between “processes” that automatically transforms into pretty format when said. It also creates some commands (for now ls, file and open) and also implemented some (multi) subs to handle that data (grep, AT-POS and ignore-columns for now). It also starts changing repl to add, for example, a way to change the prompt and adds a default prompt, but will also, probably, play 02:28
with completions in the future…
03:04 rf left 03:29 razetime left, derpydoo left 03:42 Oshawott joined 03:46 archenoth left 04:08 jpn joined 04:14 jpn left 04:31 simcop2387 left 04:32 simcop2387 joined 04:45 derpydoo joined 05:02 cm left 05:10 cm joined 06:00 reportable6 left, reportable6 joined 06:09 codesections left 06:11 codesections joined 06:33 razetime joined 06:48 tea3po joined 06:49 tea3po left, tea3po joined, tea3po left 06:50 tea3po joined 06:51 jpn joined 06:52 teatwo left 06:56 jpn left 07:00 jpn joined 07:01 tea3po left, tea3po joined 07:06 jpn left 07:21 perlbot left 07:22 abraxxa joined 07:23 Sgeo left 07:24 perlbot joined 07:27 tea3po left, tea3po joined 08:03 tea3po left, tea3po joined 08:04 perlbot left 08:05 jpn joined, tea3po left, simcop2387 left, tea3po joined 08:06 razetime left, simcop2387 joined, tea3po left, perlbot joined 08:07 tea3po joined 08:10 jpn left 08:20 simcop2387 left 08:21 simcop2387 joined 08:22 perlbot left 08:24 perlbot joined 08:25 razetime joined 08:39 razetime left 08:56 dakkar joined 09:04 raiph joined 09:05 raiph left
Nemokosch FCO a Raku shell would be very welcome 09:20
SmokeMachine Nemokosch: Yes, I think so! :) and I think Raku already has almost everything we would need in a shell. 09:23
tellable6 SmokeMachine, I'll pass your message to Nemokosch
09:24 ab5tract joined
Nemokosch Unfortunately I still haven't gotten around SpitSH, that's sort of the opposite but it could also be super useful 09:40
09:59 gfldex left 10:00 gfldex joined 10:10 seekr left 10:20 synthmeat left 10:22 synthmeat joined 11:05 jpn joined 11:09 synthmeat left 11:10 synthmeat joined 11:11 perlbot left 11:12 perlbot joined 11:16 simcop2387 left 11:17 perlbot left 11:21 simcop2387 joined 11:23 perlbot joined
Anton Antonov @Nemokosch Thanks for mentioning "SpitSH" : I was looking for it few weeks ago, unsuccessfully, because I forgot the name. 11:40
12:00 reportable6 left 12:01 reportable6 joined 12:14 jpn left 12:25 derpydoo left
@SmokeMachine Well, generally speaking, I am trying to do something very similar though "conversational agent" Finite State Machines (FSMs) for data acquisition and data wrangling. Those FSMs can be run via sequences of commands -- similar to the pipelining you mention. See github.com/antononcube/Raku-DSL-Fi...teMachines . You seem to be doing something more general, so, I am very curious about the 12:42
development of that idea.
13:10 jgaz joined 13:35 derpydoo joined 13:43 jpn joined 14:06 jpn left 14:07 jpn joined 14:09 razetime joined 14:14 kolibrie joined 14:31 perlbot left, perlbot joined 14:41 jpn left 14:51 Sgeo joined
[Coke] can we get tellable6 in #raku-doc ? 15:09
15:32 jpn joined 15:45 rf joined, kolibrie left, razetime left
rf morning 15:47
tonyo SmokeMachine: if there was a nicer version of fish available i'd probably switch from bash
rf Ive used only ksh for the last 5 years
Would recommend
[Coke] used bash for so long and is trying to use zsh because it's the new mac default. 15:48
tonyo i gave ksh a try
zsh seems to meld all of the worst parts of shells into one central place 15:49
rf Yup hahaha
Nemokosch so you're telling me there is a difference in how much they suck? xD 15:54
rf I wouldn't want to be stuck in a TTY with just zsh or just fish
Nemokosch Bash was bad enough, but then ksh really seems like lame Bash 15:55
I've seen csh a couple of times, I genuinely don't get the idea...
rf Ksh has a super hackable codebase that is why I like it 15:56
And, it's POSIX
Nemokosch I think the core concept of POSIX shells is rotten to ground. No proper data structures and no variables; if that wasn't enough, control structures and functions are just a hack 15:57
This horrible mess is the explanation for Perl
Perl will always triumph if this is the competition 15:58
15:59 [Coke] left
rf Problem is there is a lot of shell in the world already 16:00
If I could re-write all of them to Perl I would
tonyo perl is a very underrated language, usually hated by zealots 16:01
rf totally agree tonyo 16:02
Same with Raku :^)
Nemokosch I wouldn't say so. The more time I spend with Raku, the more I hate the Perl that remained. 16:03
tonyo and bash is a shell, not a language, it serves a different purpose. zsh seems designed around "fixing bash" where it makes scripting easier but 99% of the time i'm not writing a script and it doesn't do basic shell functions well. fish confoundingly just copied the bad parts of bash and thinks fixing them is a bad idea
Nemokosch but Perl needs to be understood in the context of Shell scripting, where it will always win big time 16:04
tonyo it wins in a lot of other areas, it's just a different philosophy from the typical language 16:05
code reviews, as an example, make it very obvious who's used other languages extensively
Nemokosch Perl is actually not a pragmatic language, in any other context than system scripting 16:06
to the extent that its redesign was ongoing even in the Perl 5 prime days
tonyo all the big code bases i've used perl in seemed to work pretty well (even with 300 people hacking on it simultaneously) 16:07
better than the python ones, at any rate
Nemokosch this is a good example of survivor bias. Of course, only the ones that were sufficiently solid, stuck with Perl and stayed operational with it. 16:08
then came Ruby, Python, and eventually languages that had some extra offer, like Go 16:09
tonyo the go code bases i've been have been a nightmare, even the ones with three señor devs 16:10
Nemokosch I mean, the Go language itself is ugly as hell 16:11
16:12 discord-raku-bot left, discord-raku-bot joined
but the "buzzwords" are there: fast compilation and you get a small deployable binary that runs quite fast 16:12
tonyo i like go..just the opinions of the zealots make it difficult to be productive in..writing if err != nil gives me flash backs to when i was ostricized from nodejs for criticizing callback hell (before it was the norm in the language)
Nemokosch Anyway, Perl has had its well-understood problems, the "action at a distance" narrative wasn't born yesterday. And it did get switched to languages that didn't even have a significant "killer feature", so it makes you wonder. 16:14
tonyo if i ignore the history of computing then i'd agree 16:15
Nemokosch ironically enough, Perl looks like a language that ignores the history of computing 16:16
good old "what happens if" - what happens if you call an apparent function in your code? it's debatable if exceptions were a good idea to begin with but besides the usual two cases (the function returns, an exception is thrown and propagated until caught), there are other cases 16:21
your loop may terminate, step or start over - to make it worse, this can also escalate to your callers
how are you even gonna document that? how do you do static analysis on code that invokes anything external? 16:23
and I wouldn't care, if this thing didn't somehow make it to Raku
rf Perl and Raku are both strong languages. I wouldn't be opposed to starting a large project in either 16:39
All languages have bad parts, pointing them out doesn't really emphasize anything, the reason features are there or not cannot be judged without understanding why the developers made the decisions they did. 16:41
Anton Antonov @rf Depending who you are going to work with in those projects.
rf Anton, True. But I think it wouldn't be tooo hard to teach a team Perl or Raku 16:42
Anton Antonov @rf I disagree. 🙂 Perl and Raku are hard to teach. (Except Raku grammars.)
rf I taught a team Haskell that was really hard, I think it wouldn't be as hard as that 16:43
I am not saying it will be super easy, just saying not too hard :)
Anton Antonov I advice junior colleagues not to start learning Raku, except if they have: 1) strong linguistic abilities, and/or 2) like learning programming language technologies. Otherwise, they would not get much from it. (Granted, I talk to data analysts / scientists most of the time.) 16:46
rf I don't work with many Juniors so maybe that is where our experiences differ 16:47
tea3po I am a junior and I found Raku to be very fun and engaging, interesting, but tbh it was also pretty hard. lots of syntax. lots of concepts. not as hard as haskell though. 16:50
16:51 [Coke] joined 16:52 squashable6 left
tonyo i work with a lot of juniors, of the same opinion as rf 16:52
tea3po fun and engaging goes a *long* way tbh, I suppose 16:53
tonyo C and asm kept me engaged long enough to get me a job in perl (from 10 until 32)
16:54 squashable6 joined
tonyo raku has a lot of very interesting parts to it 16:55
16:55 nima joined
tonyo want to write FP? you can get pretty close.. want to hack around in the MOP? knock yourself out. want to reinvent error handling? gopher it 16:55
want to write macros? bust out the c preprocessor and write a makefile hahahahaha 16:56
rf Yeah freedom and options to explore is everything for me
The source of rakudo is fairly hackable too 16:57
Its nice to be able to lookup that stuff
nima hello good people, perl noob here.. I'm trying to get a Cro websocket app going on MacOS. I have rakudo-star installed via brew and do zef install Cro and zef install Cro::WebSocket. But in my script when I add use Cro::WebSocket I get an error a "Could not find Cro::WebSocket in: ~/.raku, /homebrew/Cellar/rakudo-star/.... ..." 16:58
Can anyone tell me what could be the issue here? zef shows successful installation. I'm using zsh if that matters..
rf How did you install rakudo-star? 16:59
nima brew install rakudo-star
rf Ah, I would recommend rakubrew.org/
And remove the brew version
then repeat your steps with Rakubrew instead
nima ok thx let me try that
17:04 jpn left
nima got rakubrew installed and did a `rakubrew download`. both raku and zef are added to path as expected. Did `zef install --/test Cro Cro::WebSocket` and ran the script again, but received the same error ;(  any advice? 17:06
rf Hmm, how are you running the script? 17:07
nima `raku myscript.p6` 17:08
tonyo what is the output of `which raku` ?
rf we use .raku now, but that shouldn't cause an issue
tonyo may still be using the brew version
nima `/Users/myuser/.rakubrew/versions/moar-2023.02/bin/raku`
rf tonyo++ that was going to be my next question
which zef
nima `/Users/myuser/.rakubrew/versions/moar-2023.02/share/perl6/site/bin/zef` 17:09
rf Are you sure it's succeeding on the install?
I know there's some SSL dependencies on Cro::WebSocket that can fail installing
nima this is the last line I see: `===> Installing: Cro::WebSocket:ver<0.8.9>:auth<zef:cro>`
is there a way to get more verbose with zef? 17:10
rf -v
and omit --/test
Hmm I get the same it is possible that Cro::WebSocket does not have an exported module as you expect 17:11
nima: github.com/croservices/cro-websock...6.json#L32 17:12
These are it's exports, it does not export Cro::WebSocket rather other exports
nima I see! thank you very much for the help. I asked chatgpt to write the script so maybe it's using outdated knowledge... :b 17:14
rf Lol
No problem.
Nemokosch Actually, I think (or at least believe) that Raku can be taught in a non-overwhelming way 17:30
17:30 dakkar left
moreover it can be used to illustrate a whole lot of ideas about programming 17:31
17:31 simcop2387 left 17:32 simcop2387 joined
however, I also strongly believe that Perl has grown a really bad advisor over time, both from management and language design point of view 17:32
They doubled down on keeping legacy stuff alive, hence basically sacrificing the future for the past. Regardless whether this was a good decision or not - Raku cannot walk this path because there isn't a starting user base to manage wisely 17:33
Also, it really seems that certain stuff persisted too long, even when it should have been fairly apparent that the Perl community is not willing to adopt the Six. The quoted "leaky loop control" is only one example but to name some "new" examples: the concept of Cool and its broad application, single values pretending to be one-element lists, Scalar containers pretending to be items... 17:39
I only named things that I do think could be changed without tearing the language apart; the last point is the only one that might contain traps. The rest could really be introduced in, say, version 6.f, it is mostly a matter of decision. 17:41
17:44 derpydoo left
honestly, the situation is simple: take a look at the blog posts and articles about the language, and collect the positives. If a trap has no influence on a declared positive, chances are that it's just "language noise", not a defining characteristic. 17:45
17:58 nima left 18:00 reportable6 left, reportable6 joined
tonyo i'm doubtful that no news is bad news 18:05
no one is writing blog posts about how cool for loops are but you'd be lost without them
rf That is a good anology lol 18:17
18:20 Xliff joined
Nemokosch that's why I said "trap". For example, nobody ever said how good it is that @variables cannot be swapped. Everybody talks about how sigils express plurality and perhaps list assignment. 18:21
18:22 ab5tract left
This is quite literally what I had in mind. @variables and $variables could be more similar, and if you read all the articles, you probably won't ever come across 1. how different they are implementation-wise 2. what is good about that, and this should give you an idea 18:23
tonyo then that's a counter example to your point, the sigils would go away if you used that analysis 18:25
Nemokosch no, they would only contain what people actually talk about with them 18:33
the conclusion was a bit weird, unless you meant to say that there were no articles about sigils in Raku
18:37 derpydoo joined
lizmat fwiw, I would like to spend mind cycles on these questions *after* we get 6.e on the road 18:41
any cycles spent on that before the release of 6.e are of the "selling the hide of the bear before shooting it" 18:42
Nemokosch that's perfectly understandable. 6.e is going to be a huge release anyway 18:45
both with regards to time and sweat involved, and the actual features 18:46
lizmat I'm glad you're understanding 18:47
18:48 tea3po left, tea3po joined 18:50 teatwo joined 18:51 teatwo left, teatwo joined 18:53 tea3po left 19:00 teatwo left, teatwo joined
Voldenet traps, eh 19:17
m: say [+] (1, 2) Z- (3, 4)
camelia -4
Voldenet my $x = (1, 2); my $y = (3, 4); say [+] $x Z- $y
evalable6 0
Voldenet I really like those 19:18
m: my $x = (1, 2); my $y = (3, 4); say $x Z– $y 19:22
camelia ===SORRY!=== Error while compiling <tmp>
Missing required term after infix
at <tmp>:1
------> my $x = (1, 2); my $y = (3, 4); say $x Z⏏– $y
expecting any of:
Voldenet m: my $x = (1, 2); my $y = (3, 4); say $x Z-- $y
camelia (4)
lizmat hmmm... that probably shouldn't run at all, as -- only accepts 1 arg ? 19:30
19:32 tobs left 19:33 tobs joined 19:34 RakuIRCLogger left, RakuIRCLogger joined
Nemokosch m: my $x = (1, 2); my $y = (3, 4); say [+] $x Z- $y 19:47
Raku eval 0
Nemokosch huh 19:48
m: my $x = (1, 2); my $y = (3, 4); say $x Z- $y
Raku eval (0)
rf I can't remember the syntax if I wanted to add a new method to a class 19:49
lizmat m: my $x := (1, 2); my $y := (3, 4); say $x Z- $y # containerized Lists are assumed to be items
camelia (-2 -2)
rf thought it was something like: alter Foo { method bar() { * } }
Nemokosch augment 19:50
lizmat augment
rf lizmat++ Nemokosch++ thanks!
lizmat but please don't do that unless you really have to
Nemokosch "containerized Lists are assumed to be items" - this is tough because I can imagine that sometimes this is useful. I'm not sure but couldn't rule it out. 19:51
lizmat m: my $x = (1, 2,3); my $y = (3, 4); say $x Z- $y # basically 3 - 2
camelia (1)
Nemokosch "Scalar containers pretending to be items" is definitely the toughest situation of the three I named earlier 19:52
the least clear and probably the hardest to reasonably change 19:53
19:53 nine left, nine joined
it's still tempting because of the commonness of for loops over containerised data (e.g nested Array) 19:54
rf lizmat, i'm just playing around this code doesn't matter much :) 20:03
Can I convert a CPointer to a repr<CStruct> class? 20:04
tbrowder__ howd! ref windows.yml module gir workflow test failures (TAP module fails). is there any alternative way around using workflow testing without using TAP? 20:05
*howdy! 20:06
rf lizmat: What was that phaser that would run whenever something was GC'd? 20:09
Or *potentially* when it was GC'd 20:10
lizmat DESTROY
actually, an object that gets GCed is put on a list to have DESTROY called on it, at some point
you don't want to execute HLL code inside a GC 20:11
20:12 derpydoo left
rf Do CStruct objects get gc'd? I'm thinking of DESTROY { free(self); } 20:19
lizmat if they have a repr of P6Opaque, then yes 20:20
otherwise, I'm not sure
20:27 raiph joined 21:05 jgaz left 21:14 raiph left 22:05 jpn joined, jpn left 22:19 jpn joined 22:40 jpn left 22:46 abraxxa left
rf I have a repr<CPointer> class but for some reason I get `Cannot resolve caller infix:<===>(JSON::Simd::simdjson_element, Str:U); none of these signatures matches` when trying to compile 23:22
I never use === anywhere
23:25 ProperNoun left
Nemokosch ngl having to write 23:28
{ key: f'param/{value}' for key, value in file_paths.items() } 23:29
or something like this in Python, really feels like a lot of hassle for nothing, when in Raku I could write
'param/' <<~<< %file-paths
lol 23:30
I mean, that's part of the reason I want to rewrite that particular Discord bot; I want more moments like the latter 23:31
rf: what do you use that might use comparison? also, I wonder if --ll-exception can give some hints here 23:32
rf I don't do any comparison 23:37
Just gonna start cutting stuff until it works 23:38
Nemokosch hashing, for example, uses the same representation that === uses 23:39
rf Can you iterate a CArray? 23:45
Xliff Yes
rf Hmm was wondering if that was the issue but doesn't look like it 23:46
Xliff m: use NativeCall; my $c = CArray[Str].new( <a b c> ); .say for $c;
camelia NativeCall::Types::CArray[Str].new
Xliff m: use NativeCall; my $c = CArray[Str].new( <a b c> ); .say for $c[];
camelia No such method 'ZEN-POS' for invocant of type
in sub postcircumfix:<[ ]> at /home/camelia/rakudo-m-inst-1/share/perl6/core/sources/1AF93A80CAC9B4CAA082D4D1CDCA0BDE0E610B52 (NativeCall) line 416
in block <unit…
Xliff Oh... I guess no, then.
m: use NativeCall; my $c = CArray[Str].new( <a b c> ); .say for $c[^3];
camelia a
rf m: use NativeCall; my $c = CArray[Str].new( <a b c> ); for $c -> $foo { say $foo }
camelia NativeCall::Types::CArray[Str].new
rf m: use NativeCall; my $c = CArray[Str].new( <a b c> ); for @$c -> $foo { say $foo } 23:47
camelia a
rf There
Xliff I thought that CArray had the Iterator role at one point.
m: use NativeCall; my $c = CArray[Str].new( <a b c> ); .say $c ~~ Iterator
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> my $c = CArray[Str].new( <a b c> ); .say⏏ $c ~~ Iterator
expecting any of:
infix stopper
statement end
Xliff m: use NativeCall; my $c = CArray[Str].new( <a b c> ); say $c ~~ Iterator
camelia False
Xliff m: use NativeCall; my $c = CArray[Str].new( <a b c> ); say $c ~~ Positional
camelia True
Xliff Ah... it is a Positional 23:48
Nemokosch maybe you meant Iterable?
rf m: use NativeCall; my @c = CArray[Str].new( <a b c> ); .say for @c;
camelia NativeCall::Types::CArray[Str].new
Xliff m: use NativeCall; my $c = CArray[Str].new( <a b c> ); say $c ~~ Iterable
camelia False
Nemokosch huh, interesting
rf m: use NativeCall; my $c = CArray[Str].new( <a b c> ); .say for @$c;
camelia a
Nemokosch Positional but not Iterable...
rf That seems funky
Xliff Indeed
rf I guess it allows you to segfault
so it makes sense kind of
m: use NativeCall; my $c = CArray.new( <a b c>, 123 ); .say for @$c; 23:49
camelia CArray cannot be used without a type
in method AT-POS at /home/camelia/rakudo-m-inst-1/share/perl6/core/sources/28485B4A4AFB9691B968E5ABC378EE127800E2B7 (NativeCall::Types) line 102
in method new at /home/camelia/rakudo-m-inst-1/share/perl6/co…
rf What makes a CArray int* or int**? 23:52