🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). This channel is logged for the purpose of keeping a history about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Log inspection is getting closer to beta. If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 25 August 2021. |
|||
00:02
reportable6 left
00:10
jjido left
00:13
simcop2387 left
00:14
perlbot left
00:19
swaggboi joined
00:20
djerius left
00:21
djerius joined
00:43
simcop2387 joined
00:52
perlbot joined
01:04
reportable6 joined
01:26
berber44 joined
01:32
berber4489 joined,
berber4489 left,
squashable6 joined
01:36
berber44 left
02:36
bloatable6 left,
evalable6 left,
committable6 left,
squashable6 left,
shareable6 left,
quotable6 left,
greppable6 left,
coverable6 left,
nativecallable6 left,
bisectable6 left,
benchable6 left,
statisfiable6 left,
linkable6 left,
sourceable6 left,
unicodable6 left,
reportable6 left,
tellable6 left,
notable6 left,
releasable6 left,
statisfiable6 joined
02:37
notable6 joined,
releasable6 joined,
greppable6 joined,
evalable6 joined,
bloatable6 joined,
shareable6 joined
02:38
nativecallable6 joined,
committable6 joined,
linkable6 joined,
sourceable6 joined
02:39
squashable6 joined,
quotable6 joined
02:56
Guest7274748449 joined,
Guest7274748449 left,
Guest7274748449 joined
02:57
Guest7274748449 left,
Guest7274748449 joined,
Guest7274748449 left,
Guest7274748449 joined
02:59
Guest7274748449 left,
Guest21 joined
03:00
Guest21 left,
Guest2356 joined
|
|||
moon-child | somebody remind me how I make a regex from a string again? | 03:18 | |
03:24
Guest2356 left
|
|||
moon-child | hm, looks like <{thestring}> | 03:24 | |
03:36
bisectable6 joined
03:38
tellable6 joined,
benchable6 joined
03:42
justsomeguy joined
04:22
berber44 joined
04:25
xinming_ joined
04:29
a3r0_ joined
04:36
berber44 left,
unicodable6 joined
04:37
coverable6 joined
05:00
justsomeguy left
06:00
linkable6 left,
evalable6 left
06:05
anser joined
06:15
abraxxa joined
06:24
abraxxa left
06:25
abraxxa joined
07:01
linkable6 joined
07:04
patrickb joined
07:05
reportable6 joined
07:46
Sgeo left
07:47
abraxxa left
07:53
jjido joined
08:47
jjido left
08:53
mfiano joined
08:54
eseyman joined
|
|||
mfiano | Hello all. I'm a newbie exploring the terrain...coming from CL :) | 08:55 | |
eseyman | hello and welcome, mfiano | 08:57 | |
mfiano | Thanks. I was told this language is semantically very similar to CL, so I'll give it a fair chance. | 08:58 | |
(I haven't used Perl for about 20 years since I was in college, and I think I forgot everything about it) | |||
El_Che | there is no perl knowledge needed to learn raku | 08:59 | |
mfiano | Good. I have exclusively used CL for many years. | 09:01 | |
lizmat | mfiano: feels to me you will be able to write more self-documenting code in Raku :-) | ||
tellable6 | 2021-10-07T21:04:15Z #raku <[Coke]> lizmat any suggestions for monochromec's request for someone to talk about Raku on a podcast? | ||
mfiano | lizmat: Why is that? | ||
lizmat | I was looking at the description at en.wikipedia.org/wiki/Control_Language | ||
mfiano | That is not the CL I was referring to | ||
lizmat | aaah... *phew* :-) | 09:02 | |
mfiano | Common Lisp :) | ||
lizmat | ah, I see ok | ||
09:02
evalable6 joined
|
|||
lizmat | mfiano: I assume you read www.codesections.com/blog/raku-lisp-impression/ and the discussion on /r/rakulang: www.reddit.com/r/rakulang/comments...mpression/ | 09:03 | |
mfiano | Does Rakudo implement all of the specification. I am a little hesitant on learning a language that has a specification maintained by the same party as implementors. ANSI defines the CL standard, in contrast. | 09:04 | |
History has been terrible for languages teams that specify the language themselves/only have 1 implementation | 09:05 | ||
lizmat: Not yet, will do. | 09:06 | ||
lizmat | mfiano: in Raku, it is roast that defines the implementation, really | 09:07 | |
Nemokosch | > History has been terrible for languages teams that specify the language themselves/only have 1 implementation | ||
there is a difference between the two statements, though | |||
lizmat | but at the moment, there is only 1 implementation in active development, so there is a risk indeed... | ||
mfiano | I see | 09:08 | |
That's ok. I can ignore that for now. | 09:09 | ||
My other hesitation is more serious. | |||
Nemokosch | Why is that? | 09:10 | |
mfiano | I am mostly a low-level game engine developer, and data visualization programmer. As such I have used the extremely performant Common Lisp for about 20 years. My research leads me to believe Rakudo currently struggles to perform better than Python in some simple programs I've seen. I still think Raku is interesting to learn, but I just don't know what I'd use it for. | 09:11 | |
Nemokosch | It doesn't seem like Python suffered by not having an external standard | 09:12 | |
mfiano | This is a issue of performance, not standardization. As I mentioned, I am ignoring the previous issue for now. | ||
Nemokosch | I can't see where you mentioned that | 09:13 | |
mfiano | mfiano │ That's ok. I can ignore that for now. | ||
lizmat | well, most of the work on the new-disp the past 18 months was about performance | ||
mfiano | But is it suitable for soft real-time applications? | 09:14 | |
Nemokosch | Well okay, that said nothing about performance 😅 whatever | ||
lizmat | and that was only setting up the foundation on which to implement further optimzations | ||
mfiano: I know people use it in audio applications... | |||
mfiano | Is it garbage collected? | ||
lizmat | yes | ||
mfiano | Good. | ||
Do you know what type of GC Rakudo uses? | 09:15 | ||
I hope pauseless | |||
lizmat | moarvm.org/features.html | 09:16 | |
at the moment, GC is still "stop the world" type, afaik | |||
you might want to ask MoarVM specific questions on the #moarvm channel though | |||
"When multiple threads are running, collection can run in parallel (meaning that the world is stopped, and multiple threads work on the collection job to get it done more swiftly)." | 09:17 | ||
mfiano | I see, so not Pauseless, but parallel, so pretty good. | 09:21 | |
lizmat | yeah... plans are to make it pauseless as well, but getting it working in parallel without too many bugs, is already quite an achievement :-) | 09:25 | |
mfiano | Indeed | 09:26 | |
Thanks for answering my questions so far. I guess I'll just keep reading the documentation to get a better idea. | 09:29 | ||
lizmat | you're welcome... of course there's no such thing as actually trying stuff | 09:30 | |
also, you might want to check out Comma (commaide.com) if you're into IDE's :-) | |||
mfiano | I'm not. I prefer vim :) | ||
But thanks | 09:31 | ||
lizmat | mfiano: perhaps a recent discussion could be of interest in that respect: www.reddit.com/r/rakulang/comments...n_writing/ | 09:32 | |
mfiano | Are there any notable published books? | 09:47 | |
lizmat | raku.org/resources/ has a list | 09:51 | |
some of them still refer to Perl 6, but you get the gist :-) | |||
mfiano | That leads me to another question | 09:52 | |
> The Perl 6 programming language has a long story. It emerged in 2000 and got its first stable specification in 2015. "Perl 6 at a Glance" is the first book based on the standard 6.c of the language. | |||
If I were to read a Perl 6 reference rather than a Raku one, how do I know by how much the language differs by? | 09:54 | ||
It's unclear to me the version history of the specification other than a commit log in the roast repository. | |||
Similarly, if I were to read a "Raku" book, how will I know how much it differs from the specification version that Rakudo targets? | 09:56 | ||
lizmat | mfiano: it is basically s/Perl 6/Raku | ||
mfiano | Then what is 6.c? | 09:57 | |
lizmat | any differences you might find between the modern Perl 6 books and Raku, is what you would also see between versions of Raku | ||
6.c is the language version released in 2015 | |||
6.d is the language version released in 2018 | 09:58 | ||
mfiano | I see. I'm not used to this and I can see it being a major problem for compatible and future-proof code. In CL, there is only one version of the standard that will never change because it is defined by an international standards organization and the language definition is powerful enough for users to extend any aspect. | ||
lizmat | late this year / early next year 6.e will be released | ||
it is the intent that any Raku implementation should support up to 3 language versions back transparently | 09:59 | ||
mfiano | I see. It will just take me some getting used to, because in CL, there is code from the 1960's that will still run. | 10:00 | |
lizmat | when you say "use v6.c" in a compilation unit, you are guaranteed the semantics of that language version in that compilation unit | ||
likewise, if you load a module with a version specification, you are guaranteed *that* version of the module | 10:01 | ||
use Foo::Bar:ver<0.42> | |||
10:02
evalable6 left,
linkable6 left
|
|||
mfiano | Ok | 10:03 | |
lizmat | multiple versions of the same module can be installed at the same time :-) | ||
and be used inside the same program, as imports are lexical | 10:04 | ||
mfiano | I will admit, the feature (from Lisp) that attracts me the most is multiple dispatch | ||
10:04
linkable6 joined
10:05
evalable6 joined
|
|||
lizmat | m: sub ok(\a) { say "foo" }; { use Test; ok 1 }; ok 1 | 10:05 | |
camelia | ok 1 - foo |
||
lizmat | mfiano: yeah, multiple dispatch is a very nice and useful feature :-) | ||
mfiano | Does Raku have a meta object protocol? | 10:06 | |
Doubtful, but worth asking :) | |||
It seems there is no OpenGL bindings module? That shoots down about 90% of the things I'd use it for. | 10:20 | ||
lizmat | mfiano: yes, Raku most definitely has a MOP | 10:23 | |
10:23
whatnext joined
|
|||
lizmat | mfiano: docs.raku.org/language/mop | 10:24 | |
whatnext | hello all :) I have a question: what is the best way to alias long package names? I am struggling to find any reference to this | ||
moritz_ | a super simple way is constant ShortName = A::Much::Longer::Name; | 10:26 | |
whatnext | ah ok - that looks good! | 10:27 | |
moritz_ | m: constant I = Int; sub f(I) { }; f 'foo'; | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Calling f(Str) will never work with declared signature (Int) at <tmp>:1 ------> 3constant I = Int; sub f(I) { }; 7⏏5f 'foo'; |
||
moritz_ | you can see in this example that you can use the aliased name this way in type constraints, and the compile-time checker picks up on it | ||
(because constants are evaluated at compile time) | |||
whatnext | yes that looks like the answer - thanks! | 10:28 | |
mfiano | I see. No GPU driver API support yet is going to be a deal-breaker. I'll check back some other time. | 10:29 | |
github.com/Raku/raku-most-wanted/b...interfaces | |||
Lists both OpenGL and Vulkan as wanted and not yet even WIP | |||
I understand though. It took years for us to do so in Lisp | 10:30 | ||
10:40
whatnext left
|
|||
lizmat | mfiano | 10:42 | |
too bad... please do check in again from time to time | |||
patrickb | Raku can interface directly with C libraries / functions. So especially with something like the OpenGL API a dedicated wrapper might be something you don't actually need in practice. | 10:43 | |
Nemokosch | Isn't using Lisp for OpenGL pretty uncommon per se? | 10:46 | |
10:52
jjido joined
10:53
sena_kun joined
|
|||
timo | mfiano: very possibly out of date, that repo, tbh | 11:30 | |
github.com/YellowApple/p6-GLFW hasn't been touched in a while, though | 11:31 | ||
but SDL2::Raw already handles creating opengl context for you and you can bind all the opengl functions by hand as you encounter the ones you need haha | |||
11:31
frost joined
|
|||
timo | github.com/bartschuller/perl6-OpenGL is also a thing | 11:32 | |
but that is also untouched for a long while | |||
fortunately opengl uses basically no structs? vulkan on the other hand ... oof | 11:35 | ||
12:02
reportable6 left
12:03
reportable6 joined
12:16
ggoebel joined
12:59
jjido left
13:20
happy-dude left,
CIAvash left,
demostanis[m] left,
juanfra left,
AlexDaniel left
13:22
juanfra joined
13:42
AlexDaniel joined,
CIAvash joined,
happy-dude joined,
demostanis[m] joined
14:04
frost left
14:20
Sgeo joined
|
|||
moritz_ | structs aren't a problem, if the C API treats them as opaque (gives you getters/setters/constructors/destructors for them) | 14:25 | |
timo | vulkan doesn't do that, to my knowledge | 14:29 | |
14:30
RaycatWhoDat joined
|
|||
RaycatWhoDat | Running into a bit of an issue implementing the `[` and `]` operators in BF: github.com/RayMPerry/kitchen-sink/...r.raku#L25 | 14:31 | |
How can I backtrack or change the currently matched target? | 14:32 | ||
Or am I thinking about this wrong? | |||
timo | you may want to just store the positions of all brackets and match the pairs up later | ||
or you can have a "match bf code between matching brackets" style | 14:33 | ||
in which case bf programs with unmatched brackets will fail to parse if you don't put in an error handling case | |||
oh, you're trying to have the interpreter in the actions methods | |||
i guess in that case the second one is your best bet | 14:34 | ||
but causing the action methods for the inner code to re-run sounds tricky | |||
tonyo_ | RaycatWhoDat: are you trying to find matched `[` `]` in a regex? | ||
RaycatWhoDat | tonyo_: Kinda. I'm trying to loop inside of the actions. But more generally, I'm just trying to figure out if you can ignore certain matches or move the pointer back to a previous `[` | 14:37 | |
previous Match * | |||
14:38
anser left
|
|||
RaycatWhoDat | However, I can also accept that grammars aren't really structured for that kind of movement | 14:38 | |
It would be nice tho | |||
tonyo_ | it might be easier instead of trying interpret it directly to turn it into a raku code block, like an ast | 14:39 | |
[ -> while <whatever> {, ] -> } | |||
RaycatWhoDat | Got it. I'll try all three. | 14:40 | |
tonyo_ | the grammar/action would be able to produce an AST for that and then the interpreter just runs the ast (then you can cache it, show the execution plan, etc) | 15:01 | |
15:04
ggoebel left
15:10
ggoebel joined
15:20
ggoebel left
16:03
silug left,
silug1 joined
|
|||
mykhal | Hi, i'm looking fort short rakudiom (Raku idiom) for Python-like stripping, e.g. "abarbaraaaa".strip("a") -> "barbar", without regexp. Could't trim(Str, Str) work like that? Aren't they trimming always something in reality, instead of whitespace-like nothing? | 16:17 | |
moritz_ | why without regex? | 16:24 | |
mykhal | it would be 2 OR-ed regexp, too tedious | 16:26 | |
.. s/exp/exps/ | 16:27 | ||
Altreus | wat :) | 16:28 | |
moritz_ | $s.subst(/^a+/, '').subst(/a+$/, '') | 16:29 | |
codesections | mykhal: If you _really_ want to avoid a Regex, there are plenty of ways to do so. Here's the first one that came to mind, which is a bit verbose but reads well enough: | 16:36 | |
m: with "abarbaraaaa" { say .substr: .comb.first(* ne 'a'):k, .comb.first(:end, * ne 'a'):k } | |||
camelia | barbar | ||
codesections | That said, if you're looking for an _idiomatic_ Raku solution, then yeah, a regex (or two in a chain as moritz_ showed) is the way to go. | 16:37 | |
Altreus | that definitely counts as any definition of "tedious" I can come up with :) | 16:38 | |
16:40
patrickb left
|
|||
mykhal | pity, however in bash it's not trivial as well (unlike for one-ended solution) | 16:40 | |
codesections | That's fair :) I'd probably do it with a regex myself, though not one with any ors. I'd use S/^a* (.*?) a*$/$0/ | ||
m: say with "abarbaraaaa" { S/^a* (.*?) a*$/$0/} | 16:41 | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Unsupported use of bare "say". In Raku please use: .say if you meant to call it as a method on $_, or use an explicit invocant or argument, or use &say to refer to the function as a noun. at <tmp… |
||
codesections | m: with "abarbaraaaa" { say S/^a* (.*?) a*$/$0/} | ||
camelia | barbar | ||
codesections | m: say "abarbaraaaa".subst: /^a* (.*?) a*$/, $0 # if you prefer the method call form | 16:42 | |
camelia | Use of Nil in string context in block <unit> at <tmp> line 1 |
||
16:48
jjido joined
|
|||
mykhal | stril not fully compliant with DRY principle :) | 16:49 | |
wouldn't you love feature req. for trim solution mentones? fortunately, currently it raises error, instead of doing something (else) | 16:51 | ||
Altreus | Perfect is the enemy of good | ||
mykhal | m: "abarbaraaa".trim("a") | ||
camelia | Too many positionals passed; expected 1 argument but got 2 in block <unit> at <tmp> line 1 |
||
mykhal | mykhal: ???? s/mentones/mentioned/ | 16:53 | |
or m: "abarbaraaa".trim(/a+/) | 16:54 | ||
Altreus | you could also use MONKEY-TYPING; and augment Str :) | 16:57 | |
17:04
jjido left
|
|||
mykhal | right, but that would be mre tedous than using regexp ;) | 17:06 | |
today 'm lossy | 17:07 | ||
Altreus | but DRYer | 17:08 | |
you can't have both, apparently | |||
mykhal | in curr. ver. | 17:09 | |
17:29
chloekek joined
17:59
sena_kun left
18:02
reportable6 left
18:08
berber44 joined
18:15
berber44 left
18:40
gordonfish left
18:55
gordonfish joined
|
|||
SmokeMachine | have EXPORT-POST-CHECK-PASS already changed name? I'm trying to use it on RakuAST branch with RAKUDO_RAKUAST env var set to 1 with no luck | 18:59 | |
19:01
nebuchadnezzar left
19:04
reportable6 joined
|
|||
Geth | doc: a354a2dfa1 | (Marcel Timmerman)++ (committed using GitHub Web editor) | doc/Language/concurrency.pod6 Update concurrency.pod6 |
19:17 | |
linkable6 | Link: docs.raku.org/language/concurrency | 19:18 | |
19:19
dogbert17 left,
dogbert17 joined
19:31
clarjon_1 joined
19:32
clarjon1 left
19:34
xkr47 left
19:35
xkr47 joined
19:39
xkr47 left
19:40
xkr47 joined
20:17
clarjon_1 is now known as clarjon1
21:17
linkable6 left,
evalable6 left,
evalable6 joined
21:19
linkable6 joined
21:36
ggoebel joined
22:06
ggoebel left
22:18
berber44 joined
22:38
ggoebel joined,
berber44 left
22:49
colemanx left
22:51
chloekek left
23:01
ggoebel left
23:26
Petr joined
23:29
Petr left
|