🦋 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
|
|||
Xliff | m: say "198' ~~ / \d+ <!( $/[0] < 255}> | 00:20 | |
camelia | ===SORRY!=== Error while compiling <tmp> Unrecognized backslash sequence: '\d' at <tmp>:1 ------> say "198' ~~ / \⏏d+ <!( $/[0] < 255}> expecting any of: argument list double quotes term |
||
Xliff | m: say "198' ~~ / \d+ <!( $/[0] < 255}> / | 00:21 | |
camelia | ===SORRY!=== Error while compiling <tmp> Unrecognized backslash sequence: '\d' at <tmp>:1 ------> say "198' ~~ / \⏏d+ <!( $/[0] < 255}> / expecting any of: argument list double quotes term |
||
Xliff | m: say "198" ~~ / \d+ <!( $/[0] < 255}> / | ||
camelia | ===SORRY!=== Unrecognized regex metacharacter < (must be quoted to match literally) at <tmp>:1 ------> say "198" ~~ / \d+ <!⏏( $/[0] < 255}> / Unable to parse regex; couldn't find final '/' at <tmp>:1 ------> say "198" ~~ … |
||
Xliff | m: say "198" ~~ / \d+ <!( $/[0] < 255}> / | ||
camelia | ===SORRY!=== Unrecognized regex metacharacter < (must be quoted to match literally) at <tmp>:1 ------> say "198" ~~ / \d+ <!⏏( $/[0] < 255}> / Unable to parse regex; couldn't find final '/' at <tmp>:1 ------> say "198" ~~ … |
||
Xliff | m: say "198" ~~ / \d+ <(! $/[0] < 255}> / | ||
camelia | ===SORRY!=== Unrecognized regex metacharacter ! (must be quoted to match literally) at <tmp>:1 ------> say "198" ~~ / \d+ <(⏏! $/[0] < 255}> / Unable to parse regex; couldn't find final '/' at <tmp>:1 ------> say "198" ~~ … |
||
Xliff | WTF? | ||
guifa_ | did you mean <{ and not <( ? | 00:22 | |
Xliff | m: say "198" ~~ / \d+ <!{ $/.Int < 255}> / | 00:23 | |
camelia | Nil | ||
Xliff | The above | ||
That should return a match, yes? | |||
m: say "198" ~~ / \d+ <{ $/.gist.say }> / | 00:24 | ||
camelia | #<failed match> 「198」 「19」 「」 「98」 「」 Nil |
||
guifa_ | $/.Int < 255 will return True. <!{ … }> checks if the value is False. It is not, so the match fails. | ||
s/False/Falsey | |||
Xliff | m: say "198" ~~ / \d+ <?{ $/.Int < 255}> / | ||
camelia | 「198」 | ||
guifa_ | you probably want <?{ … } | ||
Xliff | Oho! Reversed logic. Silly. | ||
m: say "198" ~~ / \d+ <?{ $/.Int .. (..255}> / | 00:25 | ||
camelia | ===SORRY!=== Error while compiling <tmp> Preceding context expects a term, but found infix .. instead. at <tmp>:1 ------> say "198" ~~ / \d+ <?{ $/.Int .. (..⏏5255}> / |
||
Xliff | m: say "198" ~~ / \d+ <?{ $/.Int ( 0.. 255}> / | ||
camelia | ===SORRY!=== Error while compiling <tmp> Two terms in a row at <tmp>:1 ------> say "198" ~~ / \d+ <?{ $/.Int⏏ ( 0.. 255}> / expecting any of: infix infix stopper statement end statemen… |
||
Xliff | m: say "198" ~~ / \d+ <?{ $/.Int ~~ ( 0.. 255}> / | ||
camelia | ===SORRY!=== Error while compiling <tmp> Unable to parse expression in parenthesized expression; couldn't find final ')' (corresponding starter was at line 1) at <tmp>:1 ------> y "198" ~~ / \d+ <?{ $/.Int ~~ ( 0.. 255⏏}> / … |
||
Xliff | m: say "198" ~~ / \d+ <?{ $/.Int ~~ ( 0.. 255)}> / | ||
camelia | 「198」 | ||
00:44
RonaldR34g4m left,
Vyrus joined
00:58
derpydoo joined
01:36
kybr left,
kybr joined
01:51
MasterDuke joined
02:17
teatwo joined
02:19
teatime left
02:51
derpydoo left
03:30
gabiruh left,
gabiruh joined
03:50
rf left
04:50
reportable6 left,
squashable6 left,
unicodable6 left,
bloatable6 left,
greppable6 left,
evalable6 left,
committable6 left,
coverable6 left,
sourceable6 left,
notable6 left,
quotable6 left,
benchable6 left,
tellable6 left,
releasable6 left,
bisectable6 left,
shareable6 left,
linkable6 left,
statisfiable6 left,
nativecallable6 left
04:51
squashable6 joined,
notable6 joined,
statisfiable6 joined
04:52
evalable6 joined,
bloatable6 joined,
sourceable6 joined,
reportable6 joined,
linkable6 joined,
coverable6 joined,
tellable6 joined,
bisectable6 joined
04:53
greppable6 joined,
shareable6 joined,
nativecallable6 joined,
releasable6 joined,
benchable6 joined,
committable6 joined,
unicodable6 joined,
quotable6 joined
05:53
notable6 left,
linkable6 left,
coverable6 left,
unicodable6 left,
bisectable6 left,
benchable6 left,
committable6 left,
statisfiable6 left,
quotable6 left,
evalable6 left,
tellable6 left,
nativecallable6 left,
bloatable6 left,
releasable6 left,
sourceable6 left,
greppable6 left,
reportable6 left,
shareable6 left,
squashable6 left
05:54
evalable6 joined,
sourceable6 joined,
statisfiable6 joined,
benchable6 joined,
releasable6 joined
05:55
linkable6 joined,
quotable6 joined,
squashable6 joined,
notable6 joined,
nativecallable6 joined,
committable6 joined,
tellable6 joined
05:56
unicodable6 joined,
bisectable6 joined,
greppable6 joined,
coverable6 joined,
reportable6 joined,
bloatable6 joined,
shareable6 joined
06:00
reportable6 left
06:02
reportable6 joined
06:37
silug left,
silug joined
07:11
grondilu joined
|
|||
grondilu | I just tried and it did | 07:12 | |
grondilu | Hi. Few days ago I watched a YT vid about "5 fastest programming languages". To my surprise the winner was Zig, a language I had never heard about. | 07:14 | |
07:14
jpn joined
|
|||
grondilu | Also it won by quit a large margin. Beating C and Rust, notably. | 07:14 | |
Apparently zig provides its own C compiler, which is called as 'zig cc' | 07:15 | ||
Out of curiosity I tried to compile rakudo with it. | 07:16 | ||
So I edited the makefile to 'M_CC=zig cc' and 'M_LD=zig cc' | 07:17 | ||
and apparently that worked. | |||
grondilu thought this was worth pointing out | 07:18 | ||
lizmat | was it able to run the spectest ? | ||
grondilu | that I don't know | ||
I'm not even sure it really used zig and not gcc for some reason | |||
is there a way to check from the raku exec? | 07:19 | ||
in any case I can run 'make test' and see what that gives | |||
it seems to work fine | |||
'All tests successful' | 07:20 | ||
I suppose I could also time it and see if there is a speed gain | |||
07:22
jpn left
|
|||
grondilu does that | 07:24 | ||
lizmat | m: say "$_.raku()\n" for Compiler.verbose-config<moar><>.sort(*.key) | 07:25 | |
camelia | :ar("ar") :arflags("rcs") :arout("") :as("as") :asm(".s") :asmout("-o ") :asmswitch("-S") :auxclean("\@:") :be("0") :bindir("/home/camelia/rakudo-m-inst-1/bin") :booltype("_Bool") :can_specific_we… |
||
lizmat | it's probably in there somewhere | ||
grondilu | I don't see any real speed gain | 07:26 | |
though moarvm was not compiled with zig in my test | |||
lizmat | I guess it needs more makefile tweaking than you did | 07:27 | |
grondilu | How can I specify the C compiler from the Configure.pl scrip call? | ||
--compiler option perhaps? | 07:29 | ||
grondilu tries --moar-option='--compiler="zig cc"' | 07:31 | ||
lizmat doesn't know | 07:33 | ||
grondilu | nevermind, I get "FAIL, unsupported compiler 'zig cc'" | ||
I do know that it's possible to compile moarvm with zig though, as I had tried and succeeded to do it from the separated moarvm repo | 07:34 | ||
by editing the makefile the same way as described above | 07:35 | ||
07:36
abraxxa joined
|
|||
grondilu | I even did it after uninstalling gcc on my system to make sure I was actually using zig | 07:36 | |
I was kind of suprised that it worked | 07:37 | ||
lizmat | perhaps leave an issue in the MoarVM repo for someone to investigate? | 07:42 | |
07:44
jpn joined
|
|||
Nemokosch | When you look at it, Zig is... really not a nice language. BUT. If it integrates with existing systems programming toolchains this well, and it is actually insanely fast in return for the boilerplate-ish syntax, that's a very solid offer. | 07:47 | |
07:48
jpn left
07:58
Sgeo left
08:07
sena_kun joined
|
|||
Voldenet | grondilu: zig is faster, but zig cc might not be – the simplest reason is that zig is a lot more modern | 08:47 | |
than C | |||
Nemokosch: zig introduces a lot of good ideas into the language, for instance @frame/suspend, slices, comptime things, function pointers compared to C… | 08:51 | ||
tellable6 | Voldenet, I'll pass your message to Nemokosch | ||
Nemokosch | yes but that's not really a "killer feature" when the gazillion of C killer languages all do the same, in more concise (much more concise, even) ways | 08:53 | |
Voldenet | The problem with "C killer languages" is that they don't aim to adhere to C philosophy too much | 08:54 | |
tbh. zig's power is in creating firmwares for hardware | 08:55 | ||
there's not a single better language for this | |||
Nemokosch | you definitely do have a point there | 08:56 | |
Zig's motto could be something like "nothing is obvious, except what you type out" | 08:57 | ||
ziglang.org/documentation/master/#Zen this is the polar opposite of Raku on all points, lol | 09:00 | ||
09:01
kurahaupo left
|
|||
lizmat | .oO( think like a computer ) |
09:01 | |
09:02
abraxxa left
|
|||
Voldenet | there's also points that signify what zig isn't for | 09:04 | |
> Runtime crashes are better than bugs. | |||
that's not great for http servers, perhaps | |||
09:05
abraxxa joined
|
|||
Nemokosch | Yep, clearly it doesn't try to be a language for everything | 09:05 | |
although to be frank, "let it crash" has worked once in telecommunications 😛 | 09:06 | ||
Voldenet | erlang doesn't crash in c language sense | 09:07 | |
;> | |||
Nemokosch | well, if you meant http servers as in Apache nginx stuff, those should probably rather crash than have bugs tbh | 09:14 | |
if you meant apps behind a http server, those crash rather the erlang sense | |||
09:17
kurahaupo joined
09:18
jpn joined,
kurahaupo left
09:22
grondilu left
09:24
jpn left
|
|||
Voldenet | I meant http server with the app as a single binary – it's common practice in java or C# | 09:31 | |
Nemokosch | well that's interesting because ASP.NET Core stuff with Kestrel had the usual "run this behind a reverse proxy" disclaimer | 09:38 | |
but at the end of the day, it probably doesn't matter how the crashes > bugs take should be interpreted in a web backend story - the language is kinda unfriendly for this sort of tedious but not very critical task | 09:39 | ||
Zig seems to be a language that doesn't necessarily try to impress "the masses", it rather has a very specific goal, and I suppose if it does meet that goal, the target audience will be pleased by the working systems created, rather than the language being fun and stuff | 09:42 | ||
Voldenet | In that aspect it's a bit like golang, which isn't fun either | 09:52 | |
Nemokosch | yes, I just started talking about it to someone and had the same idea | 09:53 | |
Go was the only one among the "C killer languages" that even attempted to keep it simple | |||
then it turned out that "keeping it simple" does work, with a different audience in the case of that language | 09:54 | ||
El_Che | Voldenet: Go is a lot of fun because you can program like you do with dynamic languages, while keeping static typing | 09:57 | |
(because of the fast compilation) | |||
Nemokosch | except maybe that there isn't a dynamic language as ugly | 10:03 | |
holmdunc | it will refuse to compile any time there is an unused variable or import, so not that light and breezy to use | 10:08 | |
Nemokosch | to be fair, they treat that as a feature | 10:09 | |
Go's killer feature is this insane extent of opinionatedness | 10:10 | ||
10:11
jpn joined
|
|||
holmdunc | the thing I mentioned manifests itself as many times you comment out some code, you're probably going to be met with a spurious failed compile and have to go and fiddle with the import statements at the top of the file | 10:15 | |
10:16
jpn left
|
|||
Nemokosch | I mean, we are talking about a language that thinks of dependency management as "go get" | 10:17 | |
like they didn't even try xD | 10:18 | ||
holmdunc | like you said, prime example of extreme opinionation... namely "we aren't having compiler warnings, period, so it has to be an error" | 10:23 | |
El_Che | Nemokosch: with Perl family background etc, let's say the eye of the beholder applies :) | 10:38 | |
tellable6 | El_Che, I'll pass your message to Nemokosch | ||
11:16
evalable6 left,
linkable6 left
11:18
linkable6 joined,
evalable6 joined
11:19
jpn joined
11:22
jpn left
|
|||
ugexe | Go is kind of fun to me, because the tooling around it makes you feel powerful | 11:50 | |
at least until i reach some code that i need to test through multiple levels of abstractions, then i want to die | 11:52 | ||
im also jealous their standard library has a https client and tar client | 11:56 | ||
12:00
reportable6 left
12:01
reportable6 joined
12:26
jgaz left,
jgaz joined
12:33
peder left
12:34
peder joined
12:36
nine left,
m_athias left
12:37
nine joined,
m_athias joined
|
|||
El_Che | ugexe: lol :) | 12:52 | |
true dat, the abstraction thing | |||
uzl[m] | stackoverflow.blog/2023/05/08/the-...-now-live/ | 12:56 | |
Yup that was me lol. I tried to resurface it haha | 12:57 | ||
lizmat | note that the survey lists Raku as a language! | 12:58 | |
13:00
abraxxa1 joined
|
|||
uzl[m] | Yes, it does!!! | 13:02 | |
13:03
abraxxa left
|
|||
sjn submitted in the survey, making sure to mention Comma as an editor :-) | 13:22 | ||
13:23
andinus left
|
|||
lizmat | as did I :-) | 13:31 | |
13:38
jpn joined
14:01
xinming joined,
jpn left
|
|||
tbrowder__ | uh, for retired folks, better check former professional or hobbyist. if you select other it says goodbye, no do overs or back button | 14:02 | |
14:07
sena_kun left
14:10
andinus`` left,
sena_kun joined,
sena_kun left,
abraxxa1 left
14:11
andinus joined,
sena_kun joined
|
|||
lizmat | meh | 14:14 | |
14:16
tea3po joined,
tea3po left
14:17
tea3po joined
14:19
tea3po left,
teatwo left,
tea3po joined
|
|||
Voldenet | El_Che: golang is not fun because it doesn't let me construct things that are impossible to debug | 14:29 | |
tonyo | could merge tar from fez in to core | 14:34 | |
14:35
jpn joined
14:40
jpn left
14:44
xinming left
14:46
xinming joined
14:52
zara joined
15:10
zara left,
Sgeo joined
|
|||
ugexe | to be more clear: go has tar + gz extraction in core | 15:14 | |
tonyo | i have a BST index persisting to a file that could speed up the module resolution | 15:16 | |
ugexe | i'm not sure we can speed up module resolution for the core. the goal with the core at least is to get close enough to our current resolution speed that its a reasonable tradeoff for the potential features / easy-of-use it enables | 15:21 | |
it can speed up module resolution for something like zef though | 15:22 | ||
tonyo | does module resolution just hash the X in `use X`? i thought it still had to go through resolution in core | 15:25 | |
ugexe | speed it up eventually anyway... at the current ecosystem sizes zef is pretty fast at that | ||
basically yeah basically it can hash the name and then use that hash to lookup a small subset of meta data in a file name using that hash | 15:26 | ||
so it does not usually need to read or parse the json for whatever distributions | 15:27 | ||
tonyo | guessing that takes first available then | ||
ugexe | the hash that is generated involves a file that contains the meta data subset for all dists matching that short-name | 15:28 | |
15:31
jpn joined
|
|||
ugexe | the thing is, its all incredibly confusing even though it really isnt | 15:32 | |
so if the performance was close enough, it might be worth using it in the core to make that area of code more accessible | |||
tonyo | ah i see | 15:34 | |
once you have an index file it's pretty quick | 15:35 | ||
indexing the current fez eco takes less than a second | |||
here's the timings for searching through an index file vs searching through the BST in memory: | 15:36 | ||
empty: 0.144 wallclock secs (0.130 usr 0.016 sys 0.146 cpu) @ 69433.836/s (n=10000) | |||
empty-file: 1.342 wallclock secs (1.081 usr 0.284 sys 1.365 cpu) @ 7448.867/s (n=10000) | |||
not-empty: 0.124 wallclock secs (0.109 usr 0.015 sys 0.124 cpu) @ 80942.822/s (n=10000) | |||
not-empty-file: 1.111 wallclock secs (0.825 usr 0.284 sys 1.110 cpu) @ 8999.896/s (n=10000) | |||
15:37
jpn left
|
|||
ugexe | i dunno what that would mean in the real world. for instance any increase for `raku -e ''` would be unacceptable, and an increase in like 0.2+ for `raku -e 'use Some::Module'` would probably be too much as well | 15:37 | |
tonyo | empty is an exhaustive search, not-empty finds one that is pretty well buried in the tree | ||
well, it's .124 seconds for all 10000 searches, so it's resolving in .0000124s | 15:38 | ||
ugexe | i wonder if there is a way to avoid parsing even the entire namespaces part | ||
tonyo | what do you mean | ||
ugexe | for instance if the index was sorted a certain way then it can stop searching once it finds the first match | 15:39 | |
tonyo | it is a sorted tree | ||
if the root node is Green, and it's right is empty, you're looking for Text::CSV, it'll halt after the first node | |||
for it to be useful in zef it needs to be able to do an exhaustive search for partials, no? | 15:40 | ||
ugexe | partial as in the short name (`zef search Foo::`)? that can just use a slow path | 15:43 | |
tonyo | it's difficult to know, though which to use..if someone does `zef se Fo` that should tell you Foo also exists | 15:45 | |
? | |||
ugexe | `zef search Foo` isnt an important command and thus its fine to be slow. inside of zef itself it is easy to know if the search needs to do an exact search or not because a parameter :$strict is passed in github.com/ugexe/zef/blob/710034fe...C5-L146C32 | 15:47 | |
tonyo | got it | ||
where do you want me to put this bst? | 15:48 | ||
ugexe | `zef install Foo` (and the dependency lookups) use strict = true, `zef search Foo` uses strict = false | ||
tonyo | it'd be easy enough to add a partial search to this tree too, btw - it's pretty quick | 15:49 | |
ugexe | no idea. inside of zef it would be implementing a Repository like lib/Zef/Repository/Ecosystems.rakumod | ||
and adding the appropriate config to resources/config.json, and probably disabling lib/Zef/Repository/Ecosystems.rakumod in the config | 15:50 | ||
tonyo | i'll take a look after implementing a non-strict search | 15:51 | |
fez could just provide the index file as well, rather than the huge json blob | |||
15:59
jpn joined
16:04
jpn left
|
|||
ugexe | right | 16:09 | |
tonyo | the exhaustive partial returns in 1/90th of a second | 16:13 | |
running these benchmarks against the entire fez meta index | 16:14 | ||
16:27
Ekho left
16:55
jumpnbrownweasel joined
17:05
tea3po left
17:16
Ekho joined
17:17
xinming left
17:22
jpn joined
17:29
abraxxa-home joined
17:32
jpn left
17:56
sena_kun left
18:00
reportable6 left
18:01
reportable6 joined
18:03
abraxxa-home left
18:05
sena_kun joined
18:19
abraxxa-home joined
18:28
abraxxa-home left
18:43
abraxxa-home joined
18:49
abraxxa-home left
18:58
Vyrus left
19:00
Vyrus joined
19:03
abraxxa-home joined,
euandreh left
19:23
[Coke] left
19:25
Xliff left,
[Coke] joined
19:39
codesections joined
|
|||
gfldex | m: role R[T] { method ::(T.^name)() { $.value } } | 20:01 | |
camelia | ===SORRY!=== Error while compiling <tmp> Invalid typename 'T' in parameter declaration. at <tmp>:1 ------> role R[T⏏] { method ::(T.^name)() { $.value } } |
||
gfldex | m: role R[::T] { method ::(T.^name)() { $.value } } | ||
camelia | ===SORRY!=== Name ::(T.^name) is not compile-time known, and can not serve as a method name |
||
gfldex | Is there any way to make that work. The MOP is not helpful because ParametricRole doesn't sport .^add_method. | 20:02 | |
20:09
Vyrus left,
Vyrus joined
20:16
abraxxa-home left,
deoac joined
20:22
codesections left
|
|||
tonyo | m: role R[::T] { has $.value; submethod TWEAK(|) { self.^add_method(T.^name, sub (\self) { self.value; }); }; }; R[Int].new(value=>5).Int.say | 20:27 | |
camelia | 5 | ||
tonyo | gfldex: ^ | 20:28 | |
m: role R[::T] { has T $.value; submethod TWEAK(|) { self.^add_method(T.^name, sub (\self) { self.value; }); }; }; R[Int].new(value=>5).Int.say; R[Str].new(value=>"test").Str.say R[Str].new(value=>'str').Int.say; | 20:32 | ||
camelia | ===SORRY!=== Error while compiling <tmp> Missing infix inside S at <tmp>:1 ------> ; R[Str].new(value=>"test").Str.say R[S⏏tr].new(value=>'str').Int.say; expecting any of: bracketed infix infix … |
||
tonyo | works as expected with the param | ||
m: role R[::T] { has T $.value; submethod TWEAK(|) { self.^add_method(T.^name, sub (\self) { self.value; }); }; }; R[Int].new(value=>5).Int.say; R[Str].new(value=>"test").Str.say; R[Str].new(value=>'str').Int.say; | |||
camelia | 5 Package 'R[Str]' already has a sub 'Str' (did you mean to declare a multi method?) in submethod TWEAK at <tmp> line 1 in block <unit> at <tmp> line 1 test |
||
tonyo | oop, guess you need to check for it first | ||
gfldex | tonyo: thanks, I ended doing something similar in COERCE and got odd results. Didn't think of TWEAK. | 20:33 | |
My version solves that, blog post incomming. | 20:34 | ||
I'm messing with .^method_table . And yes, I'm doing something really wild. :-> | 20:35 | ||
20:41
jumpnbrownweasel left
|
|||
tonyo | the orm i wrote in raku used it extensively, something was tweaked a few years ago and now it's just unusable but the mop is wild (in a cool way) | 20:44 | |
20:48
jpn joined
|
|||
tonyo | hmm..thinking about it that was 6 years ago | 20:49 | |
gfldex | m: role R[::T] { method ::T() { T } }; my R[Str] \type; type.^method.say; | 21:00 | |
camelia | ===SORRY!=== Error while compiling <tmp> Term definition requires an initializer at <tmp>:1 ------> { method ::T() { T } }; my R[Str] \type⏏; type.^method.say; |
||
gfldex | m: role R[::T] { method ::T() { } }; my R[Str] \type; type.^method.say; | 21:01 | |
camelia | ===SORRY!=== Error while compiling <tmp> Term definition requires an initializer at <tmp>:1 ------> T] { method ::T() { } }; my R[Str] \type⏏; type.^method.say; |
||
gfldex | m: role R[::T] { method ::T() { } }; my R[Str] $type; $type.^method.say; | ||
camelia | No such method 'method' for invocant of type 'Perl6::Metamodel::CurriedRoleHOW' in block <unit> at <tmp> line 1 |
||
gfldex | m: role R[::T] { method ::T() { } }; my R[Str] $type; $type.^methods.say; | ||
camelia | No such method 'methods' for invocant of type 'Perl6::Metamodel::CurriedRoleHOW' in block <unit> at <tmp> line 1 |
||
gfldex | m: role R[::T] { method ::T() { } }; my $type = R[Str]; $type.^methods.say; | ||
camelia | No such method 'methods' for invocant of type 'Perl6::Metamodel::CurriedRoleHOW' in block <unit> at <tmp> line 1 |
||
gfldex | m: role R[::T] { method ::T() { } }; my $type = R[Str].new; $type.^methods.say; | 21:02 | |
camelia | (T) | ||
gfldex | I think that should work. | ||
tonyo | m: role R[::T] { method ::T() { } }; my $type = R[Str].new; say $type.Str | 21:08 | |
camelia | R[Str]<6229179804320> | ||
Nemokosch | well a method name is not a type object, that much is for sure | 21:13 | |
21:17
sena_kun left
21:20
teatime joined
21:28
rf joined
|
|||
tonyo | m: role R[::T] { method ::T() { } }; my $type = R[Int].new; say $type.Int | 21:43 | |
camelia | Cannot resolve caller Int(R[Int]:D: ); none of these signatures matches: (Mu:U \v: *%_) in block <unit> at <tmp> line 1 |
||
21:43
codesections joined
|
|||
tonyo | yea that's a weird way for that to work | 21:43 | |
esp since that role can't be composed until T is of a known type | |||
21:47
jpn left
21:55
jpn joined
22:20
jpn left
23:05
rf left
23:15
jpn joined
23:19
jpn left
23:52
codesections left
|