Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6, 2016-08-16

Perl 6 | Reference Documentation | Rakudo

| Channels | #perl6 index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:03 dataangel p6: class zz { has @.yy is readonly; }; my $xx = zz.new(yy => [1, 2]); say $xx.yy; $xx.yy = [3, 4]; say $xx.yy; # why am I able to reassign it if it is read only?
00:03 camelia rakudo-moar 6cd6ef: OUTPUT«[1 2]␤[3 4]␤»
00:04 gfldex should .f on a dangling symlink throw an exception?
00:05 gfldex the consequence is that any program that is working with files has to special case dangling symlinks
00:06 pierre_ joined #perl6
00:11 dataangel Why bother having classes and roles instead of just roles? They seem strictly better, you get errors instead of confusing behavior
00:12 mcmillhj joined #perl6
00:12 pi____ joined #perl6
00:14 canopus joined #perl6
00:15 jdv79 roles can't do a bunch of things.  they are fundamentally different.
00:18 timotimo is there some context to that role vs class thing you just said?
00:18 timotimo we might want to emit errors or warnings for "is readonly" on @ or % sigiled attributes
00:18 dataangel timotimo: roles give you errors when you have conflicting method names, and apparently classes don't
00:19 timotimo readonly will only cause a getter (not a getter-setter) to be generated
00:19 timotimo but that's only about changing the value of "outer" scalar containers
00:19 timotimo you can only have conflicting method names when you do multiple inheritance
00:19 timotimo otherwise inheritance has the explicit feature to replace a method with the same name by another
00:20 timotimo though we may want at some point to have something like java's @Override that forces you to say which class you override a method from
00:20 dataangel timotimo: oh you can't do virtual's with roles
00:20 timotimo on the other hand, you can still always $theThing.Class::method(...)
00:20 timotimo you totally can
00:20 timotimo but a role that gets "does"ed into a class acts just like if you had just written the contents of the role { ... } into the class {...} itself
00:20 dataangel timotimo: what is the purpose of only generating a getter if you can reassign the array anyway?
00:21 timotimo it's not really re-assigning
00:21 timotimo it's "storing into"
00:23 timotimo we don't have "deep read-only-ness" or "deep immutability" anyway, because that's *really* hard
00:26 canopus joined #perl6
00:28 BenGoldberg joined #perl6
00:29 rkazak joined #perl6
00:35 pi____ m:  class Account-Holder { has $!name; my class Account { has $!account-number; } }
00:35 camelia rakudo-moar 6cd6ef: ( no output )
00:35 pi____ how do i access the account number in the above code?
00:36 timotimo there are multiple ways. one of them is to make it "our class Account" and go Account-Holder::Account
00:36 timotimo another is to build a little accessor that does nothing but return Account
00:36 pi____ would that accessor be a method inside the Account class?
00:38 timotimo i'd imagine so
00:38 timotimo methods don't have to be called on an instance, if they don't access attributes of self
00:38 pi____ hmm, could i bother you for an example?
00:39 timotimo m:  class Account-Holder { has $!name; my class Account { has $!account-number; }; method get-acc-class { Account } }; my $foo = Account-Holder.get-acc-class.n​ew(:account-number(9999999)); say $foo
00:39 camelia rakudo-moar 6cd6ef: OUTPUT«Account-Holder::Account.new␤»
00:39 timotimo ah, private attributes don't get set by the default constructor, nor are they output by the default .perl
00:41 timotimo i'm about to go home so i can sleep :)
00:41 pi____ all right haha thanks
00:41 timotimo have fun with perl6 :)
00:41 pi____ you bet!
00:46 cdg joined #perl6
00:51 lambd0x joined #perl6
00:54 lambd0x m: my @a = <1 2 3 4>; sub no ([$pivot, $pivot2, *@a]) { say $pivot ~ " " ~ $pivot2;} ; say no(@a);
00:54 camelia rakudo-moar 6cd6ef: OUTPUT«1 2␤True␤»
00:54 mcmillhj joined #perl6
00:55 lambd0x that's so nice
00:56 lambd0x Guys does the * here turns @a into a pointer from which I take the first, second... element for the sub?
01:03 gfldex it's the rest
01:04 * grondilu is reading http://perl6.party/post/Th​e-Awesome-Errors-of-Perl-6
01:04 grondilu m: say "foo" . "bar";
01:04 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unsupported use of . to concatenate strings; in Perl 6 please use ~␤at <tmp>:1␤------> 3say "foo" .7⏏5 "bar";␤»
01:05 grondilu ^seems a bit excessive to assume that strongly that a concatenation was intended.
01:05 timotimo m: sub infix:<.>($a, $b) { $a ~ $b }; say "hello" . "world"
01:05 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unsupported use of . to concatenate strings; in Perl 6 please use ~␤at <tmp>:1␤------> 3x:<.>($a, $b) { $a ~ $b }; say "hello" .7⏏5 "world"␤»
01:05 timotimo m: sub infix:<.>($a, $b) { $a ~ $b }; say "hello"."world"
01:05 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Quoted method name requires parenthesized arguments. If you meant to concatenate two strings, use '~'.␤at <tmp>:1␤------> 3$a, $b) { $a ~ $b }; say "hello"."world"7⏏5<EOL>␤»
01:05 timotimo hm. i guess.
01:06 grondilu I would have said something like "undefined use of '.' as a binop between string.  In Perl 6, string concatenation is done with ~."
01:06 timotimo i think it should be possible to override .
01:06 grondilu or seomthing like that.
01:06 timotimo "between strings" isn't all, though
01:06 timotimo as you can use string concat to stringify, too
01:07 grondilu yeah.
01:09 grondilu maybe just add a "presumably" adverb.
01:10 grondilu like:  "Unsupported use of ., presumably to concatenate strings."
01:11 grondilu I would agree that it's no big deal at all though.  The current message is not too bad.  Just bugged me slightly.
01:13 cpage_ joined #perl6
01:14 mcmillhj joined #perl6
01:15 cdg joined #perl6
01:28 mcmillhj joined #perl6
01:28 SmokeMachine____ how can I add elements on a SetHash inside of a hash?
01:29 SmokeMachine____ m: my SetHash %a; %a<new_sethash><str_element_of_sethash> = True; %a.perl.say
01:29 camelia rakudo-moar 6cd6ef: OUTPUT«Type check failed in assignment to %a; expected SetHash but got Hash (${})␤  in block <unit> at <tmp> line 1␤␤»
01:29 timotimo it can't automatically create the SetHash for you, i'm afraid
01:29 timotimo maybe that's buggable
01:30 timotimo m: my SetHash %a; %a<new_sethash> .= new; say %a.perl
01:30 camelia rakudo-moar 6cd6ef: OUTPUT«(my SetHash % = :new_sethash(SetHash.new()))␤»
01:30 timotimo m: my SetHash %a; %a<new_sethash><a> = 1; say %a.perl
01:30 camelia rakudo-moar 6cd6ef: OUTPUT«Type check failed in assignment to %a; expected SetHash but got Hash (${})␤  in block <unit> at <tmp> line 1␤␤»
01:30 timotimo m: my SetHash %a is default(SetHash); %a<new_sethash><a> = 1; say %a.perl
01:30 camelia rakudo-moar 6cd6ef: OUTPUT«Type check failed in assignment to %a; expected SetHash but got Hash (${})␤  in block <unit> at <tmp> line 1␤␤»
01:30 timotimo so autovivification apparently doesn't work with typed hashes
01:30 kalkin-_ joined #perl6
01:31 timotimo so you'll have to //= .new before accessing a sethash-inside-the-hash to make sure it exists
01:31 timotimo well, //= bleh.new
01:31 SmokeMachine____ m: my Hash of SetHash $a .= new; $a<bla><ble>++; dd $a
01:31 camelia rakudo-moar 6cd6ef: OUTPUT«Hash[SetHash] $a = (my SetHash % = :bla(${:ble(1)}))␤»
01:32 SmokeMachine____ but as a scalar it works... why?
01:32 SmokeMachine____ m: my Hash of SetHash $a .= new; $a<bla><ble> = "not a possible set value"; dd $a
01:32 camelia rakudo-moar 6cd6ef: OUTPUT«Hash[SetHash] $a = (my SetHash % = :bla(${:ble("not a possible set value")}))␤»
01:32 SmokeMachine____ now that doesn't make sense...
01:33 timotimo that's pretty weird
01:33 timotimo looks to my tired eyes like a rakudobug
01:35 SmokeMachine____ timotimo: the scalar and the hash versions should do the same, right?
01:37 timotimo not sure
01:37 timotimo you can see if the generated code is the same with --target=ast :)
01:38 timotimo i can see if my pillow is still on my bed with --target=sleep
01:38 timotimo o/
01:39 SmokeMachine____ :) have a good night!
01:40 timotimo have a good * :)
01:49 gfldex m: my (Bool :$foo, Bool :$bar) = True; dd ?$foo, ?$bar
01:49 camelia rakudo-moar 6cd6ef: OUTPUT«Bool::True␤Bool::False␤»
01:53 sammers ola perl6
01:57 mcmillhj joined #perl6
01:58 sammers are there any examples of capturing keystrokes as a Supply?
02:00 gfldex sammers: you need to set the terminal to raw mode what may clash with concurrency
02:00 gfldex see https://github.com/krunen/term-termios
02:02 sammers gfldex, thanks I will take a look. I have been messing around with this example, https://trizen.gitbooks.io/perl6-rosettacode/co​ntent/programming_tasks/K/Keyboard_macros.html
02:12 mcmillhj joined #perl6
02:15 AlexDaniel .seen raiph
02:15 yoleaux I saw raiph 13 Aug 2016 18:25Z in #perl6: <raiph> dataangel: Most Perl 6 string and numeric types implicitly coerce between string and numeric interpretations by default; you have to be explicit if you don't want that
02:16 noganex_ joined #perl6
02:17 AlexDaniel .tell raiph Using readable names for placeholder values (like $^key and $^value) is a footgun, please consider not recommending it publicly
02:17 yoleaux AlexDaniel: I'll pass your message to raiph.
02:20 SmokeMachine____ m: Str(Numeric) ~~ Int
02:20 camelia rakudo-moar 6cd6ef: ( no output )
02:20 SmokeMachine____ m: say Str(Numeric) ~~ Int
02:20 camelia rakudo-moar 6cd6ef: OUTPUT«False␤»
02:21 SmokeMachine____ Shouldn't be true? Why?
02:22 SmokeMachine____ m: say Int ~~ Str(Numeric)
02:22 camelia rakudo-moar 6cd6ef: OUTPUT«False␤»
02:23 SmokeMachine____ m: say Str(Int) ~~ Int
02:23 camelia rakudo-moar 6cd6ef: OUTPUT«False␤»
02:24 SmokeMachine____ m: say Str(Int) ~~ Str
02:24 camelia rakudo-moar 6cd6ef: OUTPUT«False␤»
02:24 mcmillhj joined #perl6
02:27 gfldex sammers did you manage to get the terminal into raw mode? Seams not to work for me.
02:28 gfldex sammers: got it :)
02:28 dan joined #perl6
02:32 harmil joined #perl6
02:35 wamba joined #perl6
02:36 zacts joined #perl6
02:39 mcmillhj joined #perl6
02:51 gfldex sammers: that's how far I got https://gist.github.com/60ec​413cc652bbbc6e08d5b413338237
02:51 canopus joined #perl6
02:52 timotimo does start { ... }.Supply really work like that? i don't think so.
02:52 mcmillhj joined #perl6
02:53 timotimo i think you're just turning the promise into a supply that'll emit exactly once when the promise is kept
02:53 timotimo i.e. when you've entered 10 keystrokes, you'll get a result from the started block
02:53 timotimo i'd expect the emit in that case to fall through to the outermost react { ... } that your stuff is in
02:53 timotimo and thus be completely ineffective for the whenever loop you've meant to use it for
02:54 timotimo but i think it should error out instead
02:54 timotimo it doesn't have a supplier in its dynamic environment, i don't think
02:54 timotimo back to trying to get to sleep ...
03:05 BenGoldberg m: say Str(Int).WHAT;
03:05 camelia rakudo-moar 6cd6ef: OUTPUT«(Str(Int))␤»
03:21 kyclark joined #perl6
03:22 salparadise joined #perl6
03:25 gfldex sammers: this works: https://gist.github.com/60ec​413cc652bbbc6e08d5b413338237
03:27 mcmillhj joined #perl6
03:28 labster joined #perl6
03:36 thor_ joined #perl6
03:45 mcmillhj joined #perl6
03:49 holyghost joined #perl6
03:52 Lamjarred joined #perl6
03:54 Lamjarred Gabor Szabo?
03:54 Lamjarred hello all
04:00 mcmillhj joined #perl6
04:06 broquaint joined #perl6
04:17 dalek perl6-examples: 22ed552 | (David Warring)++ | t/categories/parser (2 files):
04:17 dalek perl6-examples: rename t/categories/parser-SimpleString.t -> t/categories/parsers/SimpleStrings.t
04:17 dalek perl6-examples: review: https://github.com/perl6/perl​6-examples/commit/22ed55236f
04:17 dalek perl6-examples: 2300b77 | (David Warring)++ | / (2 files):
04:17 dalek perl6-examples: add some basic CSSGrammar tests. Fix `@page` rule
04:17 dalek perl6-examples: review: https://github.com/perl6/perl​6-examples/commit/2300b77203
04:20 harovali joined #perl6
04:24 Cabanossi joined #perl6
04:29 harovali joined #perl6
04:31 mcmillhj joined #perl6
04:35 andrzejku joined #perl6
04:49 pierre_ joined #perl6
04:57 andrzejku joined #perl6
04:58 pierre_ joined #perl6
05:17 pierre_ joined #perl6
05:28 brrt joined #perl6
05:28 rkazak joined #perl6
05:35 pierre_ joined #perl6
05:49 mcmillhj joined #perl6
05:53 pierre_ joined #perl6
06:01 CIAvash joined #perl6
06:02 darutoko joined #perl6
06:11 pierre_ joined #perl6
06:13 mcmillhj joined #perl6
06:24 tadzik joined #perl6
06:26 firstdayonthejob joined #perl6
06:30 nadim joined #perl6
06:30 pierre_ joined #perl6
06:35 pierre_ joined #perl6
06:41 mcmillhj joined #perl6
06:45 movl joined #perl6
06:48 Lemy_ joined #perl6
06:53 M-Illandan joined #perl6
06:53 Matthew[m] joined #perl6
06:54 mcmillhj joined #perl6
06:57 movl joined #perl6
07:08 zakharyas joined #perl6
07:09 mcmillhj joined #perl6
07:11 cschwenz joined #perl6
07:13 pecastro joined #perl6
07:22 mcmillhj joined #perl6
07:26 movl joined #perl6
07:27 labster joined #perl6
07:33 bjz joined #perl6
07:39 mcmillhj joined #perl6
07:57 domidumont joined #perl6
08:00 g4 joined #perl6
08:01 domidumont joined #perl6
08:03 Wiertek joined #perl6
08:05 araujo joined #perl6
08:06 RabidGravy joined #perl6
08:11 dakkar joined #perl6
08:13 mcmillhj joined #perl6
08:17 sno joined #perl6
08:22 movl joined #perl6
08:31 bjz joined #perl6
08:32 mcmillhj joined #perl6
08:34 pdcawley_ joined #perl6
08:39 Upasaka joined #perl6
08:46 mcmillhj joined #perl6
08:50 movl joined #perl6
08:51 kjs_ joined #perl6
08:58 TheLemonMan joined #perl6
08:58 bjz joined #perl6
09:00 labster joined #perl6
09:01 mcmillhj joined #perl6
09:04 test joined #perl6
09:11 jonas2 joined #perl6
09:13 cschwenz1 joined #perl6
09:18 mcmillhj joined #perl6
09:22 cschwenz1 left #perl6
09:29 rindolf joined #perl6
09:29 mcmillhj joined #perl6
09:32 dLeCamarae joined #perl6
09:44 pdcawley joined #perl6
09:44 melezhik joined #perl6
09:45 melezhik Hi all!
09:45 DrForr Howdy!
09:45 melezhik A hopefully simple question on perl6 subroutines
09:45 melezhik given a perl6 module Foo::Bar
09:45 movl joined #perl6
09:45 melezhik and I want to call a subroutine foo which is defined at this module
09:46 melezhik by "full" name
09:46 melezhik like in perl5 I will have something like Foo::Bar::foo()
09:46 melezhik how can I do this in perl6?
09:47 melezhik also, my module gets used in runtime
09:47 DrForr m: class Foo::Bar { sub bar { say "hi" } } Foo::Bar::bar();
09:47 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Strange text after block (missing semicolon or comma?)␤at <tmp>:1␤------> 3class Foo::Bar { sub bar { say "hi" } }7⏏5 Foo::Bar::bar();␤    expecting any of:␤        infix␤        infix stoppe…»
09:47 DrForr m: class Foo::Bar { sub bar { say "hi" } }; Foo::Bar::bar();
09:47 camelia rakudo-moar 6cd6ef: OUTPUT«Could not find symbol '&bar'␤  in block <unit> at <tmp> line 1␤␤Actually thrown at:␤  in block <unit> at <tmp> line 1␤␤»
09:47 melezhik sub module_run($name, %args = %()) is export {    my $mod_name = 'Sparrowdo::' ~ $name;    require ::($mod_name);  }
09:48 melezhik so I can't hardcode a name of module as it resolved in runtime
09:48 melezhik so having "require ::($mod_name); " i want to call some $mod_name's subroutines
09:49 melezhik and last thing it should be module, not class
09:49 gfldex melezhik: if you load a module at runtime you have to do a runtime lookup for the symbol
09:50 melezhik yes, sure
09:50 melezhik I know how to do this in perl5
09:50 melezhik I just need a hint on perl6 syntax
09:50 kjs_ joined #perl6
09:50 gfldex ::("YourClassHere")
09:50 tadzik require 'Foo'; ::('Foo').symbol
09:50 domidumont joined #perl6
09:51 melezhik tadzik. I can't hardcode a Foo; as Foo is in $mod_name
09:51 gfldex ::("$YourClassHere")
09:52 TimToady DrForr: you need an 'our' for that to work
09:52 yoleaux 15 Aug 2016 01:21Z <gfldex> TimToady: you may want to spend some attention on m: sub f { 42 }; my ($i where * == 2) = f; (backlog: http://irclog.perlgeek.de/p​erl6/2016-08-15#i_13023085)
09:52 DrForr 'our sub... ' yeah, forgot. As usual, doing more things in the background.
09:52 mcmillhj joined #perl6
09:52 DrForr Also, (Terry Riley)++
09:53 tadzik melezhik: yes, that's why I used a string in there in both cases :)
09:53 tadzik so in your case, require $mod_name; ::($mod_name).blabla
09:54 melezhik tadzik : can I have this? - :($mod_name).$funcname ?
09:54 melezhik not sure ... really
09:54 tadzik in that case you may need ::("$funcname::$mod_name") .....I think
09:54 melezhik ahhh . funcname is defined and could be a constant ... so you example will be fine
09:55 tadzik I always used that for methods
09:55 melezhik tadzik. will try and let you know, thanks
09:59 dakkar joined #perl6
10:03 AlexDaniel joined #perl6
10:03 Hor|zon_ joined #perl6
10:03 rburkholder joined #perl6
10:05 mvorg joined #perl6
10:10 melezhik tadzik, looks like your way relates to class, not module; my case: use v6;  unit module Sparrowdo::Nginx;  use Sparrowdo;  sub tasks { .... };
10:10 melezhik I have an error - Method 'tasks' not found for invocant of class 'Sparrowdo::Nginx'
10:11 melezhik when try this code -  $name = 'Nginx'; my $mod_name = 'Sparrowdo::' ~ $name;    require ::($mod_name);   ::($mod_name).tasks
10:11 tadzik right, how about the one I suggested later?
10:11 melezhik what exactly?
10:11 melezhik sorry, if missed something ...
10:13 arnsholt The $thing.method is purely for invoking methods
10:14 arnsholt What tadzik is referring to is `::$("$mod_name::$func_name")` I think
10:14 arnsholt Which probably also requires you to make it `our sub tasks { ... }`
10:14 arnsholt If you want to make the methodcall syntax work, you could make it `unit class` and `method tasks`
10:15 melezhik hm . I don't want a methods, I want plain subroutines
10:15 melezhik what about this?
10:15 gregf_ m: class Foo::Bar { method bar() { say "Bar!" } }; say Foo::Bar.bar # should this work melezhik ?
10:15 camelia rakudo-moar 6cd6ef: OUTPUT«Bar!␤True␤»
10:15 melezhik I don't want call this as class methods, while it's doable, but I need I simple subroutines
10:16 melezhik it probably will work, but what about calling some module's function, using Foo::Bar::name style , like I would have in perl5?
10:17 nine melezhik: just do it?
10:17 nine melezhik: it's exactly the same syntax in Perl 6
10:17 melezhik just do what?
10:17 melezhik ahh, ok
10:17 gregf_ well, it doesnt have to be just like in Perl5 *literally* - *smiles*... Perl6 is a new language ;)
10:18 nine m: module Foo::Bar { our sub foo { say "hello"; } }; Foo::Bar::foo;
10:18 camelia rakudo-moar 6cd6ef: OUTPUT«hello␤»
10:18 melezhik yeah, this is why I told style, not way ... )))
10:18 gregf_ melezhik: Foo::Bar->bar() # is how youll do this in moose as well,
10:18 gregf_ nine has the solution! next question :)
10:18 tokomer joined #perl6
10:19 melezhik ahhh, guys, again I don't want to call it like class method .... ok, I will try a Foo::Bar::func ... and will let you know ...
10:19 nine melezhik: also why exactly is the module loaded at runtime?
10:19 melezhik ok, I see nine's example will try it too ...
10:21 tadzik yep, I meant what arnsholt++ said :)
10:21 melezhik nine, it's about upper API style, I don't want users will "use Some::Module" and just have some other syntax, but probably I will need to go a "standard" way, getting use modules explicitely ...
10:22 pdcawley_ joined #perl6
10:22 nine melezhik: Sorry, I don't think I understood what you're trying to say?
10:24 melezhik nine I mean I use a runtime module loading for the sake of simplicity of upper code relying in the modules, but nevermind now )))
10:24 arnsholt I suspect using classes will give you a cleaner inheritance and composition story, even if the classes aren't instantiable/don't have any instance methods
10:25 sammers hi perl6
10:25 DrForr Afternoon, sammers
10:25 arnsholt Since it lets you provide default implementations for trivially implemented methods and the like
10:25 DrForr (at least locally)
10:25 arnsholt G'noon =)
10:25 sammers afternoon, yeah, here it is ~19:30
10:26 sammers so, I am trying to make a single react / whenever respond to multiple supplies, is this possible?
10:26 jnthn whenever Supply.merge($s1, $s2, ...) { }
10:26 sammers ah, great
10:27 melezhik arnsholt I got your point, the code is pretty raw , I am at the begining of the desing, will take your words into account ...
10:27 arnsholt jnthn++ to the rescue!
10:27 TheLemonMan hmm, when is it advised to use sigilless parameters for functions? from what I glean from the documentation it is another "lighter" way to pass readonly content
10:29 timotimo sigilless is equivalent to "is raw"
10:30 jnthn When you don't want to enforce any context on the argument, generally
10:31 TheLemonMan oh, I didn't get you'd completely lose the context. Thanks for the heads-up
10:32 timotimo you don't lose it, yo ujust don't force any context on the argument
10:32 jnthn m: sub foo($a) { for $a { .say } }; foo([1,2,3])
10:32 camelia rakudo-moar 6cd6ef: OUTPUT«[1 2 3]␤»
10:32 jnthn m: sub foo(\a) { for \a { .say } }; foo([1,2,3])
10:32 camelia rakudo-moar 6cd6ef: OUTPUT«[1 2 3]␤»
10:33 jnthn Um...well that didn't do what I expected :P
10:33 jnthn oh, duh
10:33 jnthn m: sub foo(\a) { for a { .say } }; foo([1,2,3])
10:33 camelia rakudo-moar 6cd6ef: OUTPUT«1␤2␤3␤»
10:33 jnthn It'll only do what I expect if I type it right :P
10:34 jnthn Anyway, the $a means "this is an item", so when you iterate you're just going to get a single iteration
10:34 jnthn Whereas \a is non-commital. If the original thing would iterate as many items then that'll happen.
10:38 TheLemonMan hmm, I'm slightly less confused now heh
10:41 melezhik finally I decided to go a class way and it works. thansk to all!
10:41 tadzik so the ::("$foo::$bar") syntax didn't?
10:48 bob777 joined #perl6
10:48 melezhik this is what I get when try to this in none class way:
10:48 melezhik ::('Sparrowdo::Nginx::tasks')(%args)
10:49 melezhik unit module Sparrowdo::Nginx; sub tasks () {...}
10:49 melezhik and error is:
10:49 melezhik No such symbol 'Sparrowdo::Nginx::tasks'
10:49 timotimo i'd think you'd have to manually split on :: and use the :: operator each time?
10:49 timotimo ::('Sparrowdo')::('Nginx')::tasks
10:49 melezhik well, let me try
10:51 melezhik the same error - No such symbol 'Sparrowdo::Nginx::tasks'
10:51 melezhik when try to invoke via - ::('Sparrowdo')::('Nginx')::tasks(%args);
10:52 timotimo OK
10:52 melezhik head lib/Sparrowdo/Nginx.pm6 - use v6;  unit module Sparrowdo::Nginx;  use Sparrowdo;  sub tasks (%args) {
10:52 timotimo well, for one, you could also type that Sparrowdo::Nginx::tasks :)
10:52 timotimo and only make the parts that are dynamic use the ( )
10:53 arnsholt I experimented with camelia and couldn't get it to work
10:53 timotimo OK
10:53 arnsholt m: module Foo { our sub foo { say "foo" } }; Foo::foo() # works
10:53 camelia rakudo-moar 6cd6ef: OUTPUT«foo␤»
10:53 timotimo i don't know much about this part of things
10:53 arnsholt m: module Foo { our sub foo { say "foo" } }; ::("Foo")::foo() # nope?
10:53 camelia rakudo-moar 6cd6ef: OUTPUT«No such symbol 'Foo::foo'␤  in block <unit> at <tmp> line 1␤␤Actually thrown at:␤  in block <unit> at <tmp> line 1␤␤»
10:54 arnsholt Rakudobug perhaps?
10:54 melezhik arnsholt: let me try ...
10:54 timotimo m: our module Foo { our sub foo { say "foo" } }; ::("Foo")::foo()
10:54 camelia rakudo-moar 6cd6ef: OUTPUT«No such symbol 'Foo::foo'␤  in block <unit> at <tmp> line 1␤␤Actually thrown at:␤  in block <unit> at <tmp> line 1␤␤»
10:55 timotimo m: our module Foo { our sub foo { say "foo" } }; ::("Foo")
10:55 camelia rakudo-moar 6cd6ef: ( no output )
10:55 timotimo m: our module Foo { our sub foo { say "foo" } }; ::("Foo")::.keys.say
10:55 camelia rakudo-moar 6cd6ef: OUTPUT«()␤»
10:55 timotimo m: our module Foo { our sub foo { say "foo" } }; ::("Foo")::('&foo')
10:55 camelia rakudo-moar 6cd6ef: ( no output )
10:55 timotimo that's the magic ingredient
10:55 timotimo you need the sigil in there, as it's part of the name
10:55 timotimo not sure why it doesn't show up in the .keys, though
10:55 movl joined #perl6
10:55 melezhik yeah,  arnsholt: you had it right, I need an our sub ...
10:56 melezhik "our" is vital part ...
10:56 timotimo without "our" it won't be accessible via the package at all
10:56 timotimo for subs, the default is "my", which means "only available in the lexical scope"
10:56 melezhik yeah, now I see ...
10:56 CIAvash Am I the only one who thinks our errors don't look good when you compare it to Rust and Elm's?
10:57 timotimo isn't elm one of the haskell-to-javascript languages?
10:57 CIAvash yes
10:59 CIAvash well, not exactly haskell, it has similarities
11:00 movl joined #perl6
11:01 ufobat joined #perl6
11:01 ufobat ola p6 :-)
11:01 melezhik unfortunately this code still does not work:   my $func_name = 'Sparrowdo::' ~ $name ~ '::tasks';    ::($func_name)(%args);
11:01 melezhik No such symbol 'Sparrowdo::Nginx::tasks'
11:02 melezhik not sure what I had wrong ...
11:02 melezhik my module code is - use v6;  unit module Sparrowdo::Nginx;  use Sparrowdo;  our sub tasks (%args) { ... }
11:02 timotimo you forgot to put the & before tasks
11:02 bjz timotimo: it's like haskell, but with all the astronautical type system stuff ripped out and a simpler syntax (ie. less syntactic sugar)
11:03 grondilu joined #perl6
11:03 melezhik timotimo - works! thanks a lot!
11:03 melezhik )))
11:03 timotimo yay
11:04 melezhik so I did a subroutine/modules way too!
11:04 melezhik at least I have to ways by hand now )))
11:05 CIAvash look at this comment for example, "The second error needs multiple paragraphs to explain. Why isn't it instead something like:" https://www.reddit.com/r/programming/comments​/4xuo1r/the_awesome_errors_of_perl_6/d6j42wh
11:06 melezhik arnsholt:  - thank you too!
11:06 timotimo CIAvash: yeah, we should really put the eject sign at the beginning of the block, not at the end
11:08 CIAvash timotimo: it's not just the eject sign. the amount of code to show in the error, the explanations and where they appear
11:08 melezhik a final working version is - sub module_run($name, %args = %()) is export {   require ::('Sparrowdo::' ~ $name);   ::('Sparrowdo::' ~ $name ~ '::&tasks')(%args); }
11:09 TheLemonMan I don't quite like the eject sign tbh
11:09 TheLemonMan probably the fact that I never configured urxvt font fallbacks correctly concurs to that
11:11 CIAvash I also like the way Elm and Rust show the line numbers
11:15 CIAvash JIC someone has not seen it yet: https://blog.rust-lang.org/2016/0​8/10/Shape-of-errors-to-come.html http://elm-lang.org/blog/c​ompiler-errors-for-humans
11:18 CIAvash also, is there a reason run-time errors don't show the code in the error?
11:18 timotimo you have to set an env var if you want that
11:19 timotimo RAKUDO_VERBOSE_STACKTRACE or something along those lines
11:19 CIAvash oh
11:22 * lizmat clickbaits https://p6weekly.wordpress.com/2016/​08/15/2016-33-where-did-we-go-wrong/
11:25 lizmat CIAvash: the value of RAKUDO_VERBOSE_STACKFRAME is the number of lines before/after you want to see
11:28 CIAvash thanks
11:28 DrForr lizmat: Feeling better?
11:29 lizmat DrForr: yeah, it's mostly nagging bruises now
11:29 tokomer joined #perl6
11:29 lizmat I never thought I would have green fingers, but now I have
11:29 DrForr Good to hear. (see, actually)
11:30 DrForr That sounds serious. Ow.
11:30 lizmat oddly enough, no trouble with typing...
11:30 DrForr I was wondering about that...
11:30 lizmat but picking up heavier things with my left hand is still too painful
11:31 AlexDaniel lizmat: sounds great! According to my linear predictions, csv tests should be under one second now… so please catch up!
11:31 AlexDaniel on a slightly more serious note, I'm glad that you feel better :)
11:32 lizmat AlexDaniel DrForr thank you for your kind words  :-)
11:32 timotimo lizmat: i'm hoping for speedy, complication-free, and effortless recovery :)
11:33 AlexDaniel .oO( compilation-free? )
11:33 lizmat timotimo: thank you
11:33 timotimo hah
11:36 bob777 joined #perl6
11:42 unmatched} CIAvash: TBH, I feel like people are putting these examples on a pedestal and showing them off without proper context. The problem with all those "^^^^ this bit blah blah" IMO is the errors are always different. I have to scan for the "^^^" bits amid my code. Whereas if the error always looks the same, I can just look at the spot where the line number is or where the short code sample is. If I see ".^name"
11:42 unmatched} (the carret makes it easy to spot), I already know it's the unitialized Str warning and I can just skim to the end of the line to see the line number. It wouldn't be so easy with giant code samples in the way. Also, I wonder how all of that ASCII-art-in-code style looks with real-world code rather than crafted code samples. Some of the lines in Rakudo source are over 80 chars, much over. If I have an error at
11:42 unmatched} the end of such a line and the error displayer shoves a long error at the end of it, we're looking at a line that won't even fit into my terminal.
11:44 El_Che I am trying to add perl6 support to vim syntastic (a linter) and a must say the free form of errors has been trying for my limited vimscript skills
11:44 * unmatched} regrets writing that article now
11:45 jnthn El_Che: But most errors are structured objects
11:45 unmatched} We have bigger problems to focus on right now than what trolls on Reddit think about our error messages.
11:45 jnthn El_Che: Which you could dump out in some easy-to-handle form (JSON or so)
11:45 arnsholt jnthn: Which are then passed as unstructured text into the next stage of the pipeline >.<
11:46 jnthn Wat?
11:46 jnthn Which pipeline? :)
11:46 timotimo the user's terminal
11:46 timotimo in this case, at least
11:46 arnsholt Like in El_Che's vimscript example, the raw string of the error message is passed as-is into the linting stuff
11:47 arnsholt Which is, as you rightly point out, not a very good idea
11:47 arnsholt I guess making Rakudo capable of dumping exceptions as JSON shouldn't be too onerous?
11:47 El_Che oh, maybe I hijacked the wrong conversation
11:47 smls joined #perl6
11:47 El_Che let me explain
11:48 arnsholt An env-var/command-line parameter to toggle it, and some code in the top-level exception handler?
11:48 jnthn Yes, my point was that you would probably be better off writing a small wrapper script that compiles the code to lint, CATCHes the compilation exception, and dumps it in some standard form :)
11:48 El_Che I loved Perl6 errors. They are clear for the user
11:48 andreoss joined #perl6
11:48 jnthn Then you can deal in type names and pull out structured info
11:48 andreoss can i forbid .new to be called on class?
11:48 El_Che (terrible wifi here, let me read the backlog)
11:49 jnthn method new(|) { die "Can't new this" }
11:49 timotimo can't newt his what?
11:49 ilmari is it really a class if you can't .new it?
11:49 arnsholt jnthn: Yeah, exactly. My background in NLP just makes me particularly allergic to the traditional Unix way of flinging unstructured text around and expecting robust software to somehow magically occur =)
11:49 El_Che I kind of got most of the syntastic perl6 support working, but it's fragile as it indeed parses the "perl6 -c" output
11:50 arnsholt andreoss: `method new { die "Nope!" }` should do the trick, shouldn't it?
11:50 El_Che and some errors have the same pieces of information in an other place
11:50 andreoss jnthn: `subtype Null is Foo; # singleton `
11:50 arnsholt Alternatively, is repr('Uninstantiable')
11:50 andreoss this would not be correct?
11:50 El_Che so a json error switch would be a wow
11:50 CIAvash unmatched}: I just referred to one part of the reddit comment. Blog posts and discussions sometimes can lead to good things, don't regret it :)
11:51 jnthn I don't think you can .new on a subset type either, so that's another way
11:51 andreoss m: class Nil3 is repr('Uninstantiable') { }; Nil3.new.say
11:51 camelia rakudo-moar 6cd6ef: OUTPUT«You cannot create an instance of this type (Nil3)␤  in block <unit> at <tmp> line 1␤␤»
11:51 andreoss *subset
11:52 El_Che also similar on the perl5 linter (perl -c), the perl 6 one will be disabled out of the box because of security concerns regarding -c
11:53 tokomer joined #perl6
11:54 tokomer joined #perl6
11:54 nine ilmari: it can still have other constructors beside .new. Also it could be a static class.
11:55 gfldex unmatched}: if you would have written the same blog post about rust, you would have seen the same amount of hate. There are always folk who feel threaten by change but wont express the reason for their irrational behaviour.
11:56 pierre_ joined #perl6
11:57 gfldex unmatched}: assholes have a function in human society, they teach use humility.
11:57 andreoss m: class Foo { has $.a } ; subset Bar is Foo where *.a ~~ Int;
11:57 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Method 'add_parent' not found for invocant of class 'Perl6::Metamodel::SubsetHOW'␤at <tmp>:1␤»
11:57 andreoss is this supposed to work?
11:57 timotimo no
11:58 timotimo it has to be "subset Bar of Foo"
11:58 gfldex LTA tho
11:58 timotimo if you just write "subset Bar", you get a subset of Any. then you say "it's derived from Foo"
11:58 timotimo yeah, the error could be made clearer by a bit of special-case knowledge
11:58 timotimo thing is, class derivement is just one case of "is"
11:59 timotimo and it stands to reason you want to add some traits to your subsets
12:00 timotimo if add_parent doesn't exist, the "is" trait for derivation could say "you cannot derive a SubsetHOW from a class"
12:00 timotimo thought that sounds like "you can't make subsets out of types" which is kind of bogus
12:00 timotimo and we'd have to run to the end of the statement to figure out if there's an "of Bar" that comes after the "is Bar"
12:01 timotimo to figure out if the user left out the "of" part by accidentaly writing "is" instead
12:01 timotimo *shrug*
12:01 timotimo i'm sure someone will find a cleverer way than what i'm thinking of :)
12:03 andreoss is it not possible to write somehthing like `subset Foo(Int $a, $b) of Bar;`?
12:03 gfldex unmatched}: thinking about it, you did make one mistake. You forced the opinion that those errors are awesome on the reader - in the very first line. You may want to leave it to them to make that judgement.
12:04 gfldex andreoss: what would you want the signature do in that case?
12:07 andreoss gfldex: attribute list
12:08 lizmat andreoss: we even have an exception for it: X::Cannot::New
12:10 domidumont joined #perl6
12:10 andreoss i thought it would be posible to use subsets as ADTs.
12:10 andreoss `role List {}; subset Nil of List; subset Cons($a, List $b) of List;`
12:11 andreoss m: subset Foo($a);
12:11 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '$a' is not declared␤at <tmp>:1␤------> 3subset Foo(7⏏5$a);␤»
12:12 gfldex Sir, please lay down that Nil!
12:12 andreoss so it's legal to have singature in subset definition? what can i put there?
12:13 gfldex m: my $a; subset Foo($a);
12:13 camelia rakudo-moar 6cd6ef: OUTPUT«Cannot invoke this object (REPR: Uninstantiable; Foo)␤  in block <unit> at <tmp> line 1␤␤»
12:14 jnthn andreoss: No, subset types are refinement types
12:14 jnthn They take an existing type and add a condition (the "where")
12:14 gfldex being not-illegal doesn't mean it works.
12:15 jnthn All that's doing is invoking the subset
12:15 jnthn Which doesn't do anything useful :)
12:16 gfldex m: subset Foo of Str; sub f(Foo){}; &f.signature.params[0].say
12:16 camelia rakudo-moar 6cd6ef: OUTPUT«Str $ where { ... }␤»
12:16 gfldex there is no introspection for subsets directly, but you can get there via a signature
12:17 unmatched} gfldex: nah, the title was deliberately provocative :) My regret is not the reddit comments themselves but I have two Perl 6 channels open and both of them are discussing Perl 6's errors based on commentary of those reddit trolls, and some people even proposing we start opening RT tickets for a whole category of error "LTA-ness".
12:17 unmatched} I feel that's a distraction.
12:18 jnthn gfldex: You can introspect the refinement and the refinee using the MOP
12:18 jnthn m: subst Foo of Str where *.chars > 10; say Foo.^refinee
12:18 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Two terms in a row␤at <tmp>:1␤------> 3subst Foo of Str7⏏5 where *.chars > 10; say Foo.^refinee␤    expecting any of:␤        infix␤        infix stopper␤        postfix␤        statement…»
12:18 jnthn m: subset Foo of Str where *.chars > 10; say Foo.^refinee
12:18 camelia rakudo-moar 6cd6ef: OUTPUT«(Str)␤»
12:18 jnthn m: subset Foo of Str where *.chars > 10; say Foo.^refinement
12:18 camelia rakudo-moar 6cd6ef: OUTPUT«{ ... }␤»
12:18 El_Che jnthn: this is a very naive implementation of wrapper like you said using EVALFILE: http://paste.ubuntu.com/23061364/ . My question: is there something like EVALFILE that would implement the perl6 -c behaviour? Some magic with the $lang option?
12:18 jnthn m: subset Foo of Str where *.chars > 10; say Foo.^refinement('abc')
12:18 camelia rakudo-moar 6cd6ef: OUTPUT«Too many positionals passed; expected 2 arguments but got 3␤  in any refinement at gen/moar/m-Metamodel.nqp line 3441␤  in block <unit> at <tmp> line 1␤␤»
12:19 jnthn m: subset Foo of Str where *.chars > 10; say Foo.^refinement().('abc')
12:19 camelia rakudo-moar 6cd6ef: OUTPUT«False␤»
12:19 gfldex ENOSUCHDOC
12:19 * gfldex takes notes
12:20 jnthn El_Che: Not yet, but if use "use nqp;" then you can nqp::getcomp('perl6') and it's got methods on to let you do that...
12:20 jnthn (Bit tied up with $dayjob at the moment to find an example, sorry)
12:20 El_Che jnthn: thx. No haste
12:21 El_Che jnthn: the question is if I continue trying to parse the error string and learn more vimscript of try to get into nqp :)
12:21 El_Che I can't win
12:22 lizmat jnthn: isn't the code in sub EVAL (except the last line) really what we want ?
12:22 El_Che (I thought that adding perl6 support to syntastic was't nothing more than copying the existing perl5 one with a few adaptations. Famous last words. At least it kind of work already, but as I say, too fragile)
12:23 CIAvash unmatched}: The reddit comments didn't make me discuss the errors, if that's what you're implying. I was thinking about it before even the Rust article.
12:30 n1lp7r joined #perl6
12:32 andreoss can i subset anonymous role/class?
12:32 gfldex m: subset Foo of role :: {};
12:32 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Invalid typename 'role'␤at <tmp>:1␤------> 3subset Foo of role7⏏5 :: {};␤»
12:32 gfldex m: subset Foo of class :: {};
12:32 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Invalid typename 'class'␤at <tmp>:1␤------> 3subset Foo of class7⏏5 :: {};␤»
12:32 unmatched} CIAvash: I guess it's not just the fallout from the article that bugs me, but a ton of LTA error tickets in RT queue. They all feel disjointed, with no master plan for them. Last week I changed a content of a warning, to close a ticket, only to realize it was changed earlier not so long ago, also due to "LTA error" ticket. And today's discussion technically means that warning is LTA again and needs to be
12:32 gfldex nope
12:32 unmatched} changed again. So we just keep changing stuff about any time someone has an alternate view on what the text should read.
12:33 nine El_Che: what lizmat said :)
12:33 nine El_Che: have a look at src/core/control.pm
12:34 lizmat nine: wonder whether we should expose this as COMPILE()
12:34 unmatched} CIAvash: and maybe there should be (or maybe there already is) a mechanism for a module-space module to take all these exceptions these errors actually are and output them and format them any way the module pleases. We can have Exceptions::Rust Exceptions::Elm Exceptions::Trans::Russian, whatever
12:34 unmatched} *shrug*
12:35 El_Che nine, lizmat: having a look
12:36 El_Che nine, lizmat: although alternative structured (like yaml or json) error would also be cool: perl6 -c --errors-as-json :)
12:37 El_Che nine: suprisingly, the crappy github functionality gave me the correct file as the second match. It never does that
12:37 El_Che most of the time I end up cloning and using ack :)
12:38 dalek ecosystem: c924372 | (Alexey Melezhik)++ | META.list:
12:38 dalek ecosystem: Sparrowdo module to install Nginx web server.
12:38 dalek ecosystem: review: https://github.com/perl6/e​cosystem/commit/c924372c0d
12:38 dalek ecosystem: 43c634f | (Zoffix Znet)++ | META.list:
12:38 dalek ecosystem: Merge pull request #233 from melezhik/master
12:38 dalek ecosystem:
12:38 dalek ecosystem: Sparrowdo module to install Nginx web server.
12:38 dalek ecosystem: review: https://github.com/perl6/e​cosystem/commit/43c634f301
12:41 CIAvash unmatched}: I understand what you mean, but I don't think just dicussing it would hurt anybody. I'm not saying we have to do something right now, or do it based on someone's comments on reddit. And you can just share your opinion like you did, discussions shouldn't necessarily lead to some action.
12:41 kid51 joined #perl6
12:42 arnsholt El_Che: The Perl 6 IPython kernel has an example of getcomp and friends, just gimme a sec to find it
12:42 andreoss gfldex: is it bug/NYI?
12:43 melezhik joined #perl6
12:43 kyclark joined #perl6
12:44 unmatched} andreoss: what's the usecase for this? If you're "throwing" the role away anyway, why not make it be right from the start, without a subset?
12:44 arnsholt El_Che: https://github.com/timo/iperl6kern​el/blob/7ae64a3967dca010b962d468dc​7c524783630ef3/lib/IPerl6.pm6#L177 is the code that evaluates incoming code
12:44 gfldex andreoss: i don't think it makes sense in the first place. But then, I do think a lot of odd things.
12:44 arnsholt It's a bit complex due to having to thread the context of the previously evaluated code around the new code
12:44 andreoss unmatched}: to add attributes to subtype. `subset Foo of role :: { does Bar; has $.zzz }; `
12:45 jnthn A subtype doesn't have state
12:45 arnsholt There are two places you want to look at for examples of how Rakudo does it today: src/Perl6/Compiler.nqp in the rakudo repo, and src/HLL/Compiler.nqp in nqp
12:45 jnthn *subset type
12:45 unmatched} andreoss: so just do role Foo does Bar { has $.zzz }
12:45 jnthn So no, it doesn't make sense.
12:46 movl joined #perl6
12:46 prammer joined #perl6
12:47 andreoss http://paste.debian.net/789857/
12:47 andreoss unmatched}: i was trying to use subsets as ADTs
12:48 andreoss which now i see is mis-use
12:48 kid51 left #perl6
12:52 nilptr joined #perl6
12:53 gfldex m: subset Nil of Str;
12:53 camelia rakudo-moar 6cd6ef: ( no output )
12:53 gfldex o.0
12:53 El_Che arnsholt: thx. But I think you code really executes the code (that would imply getting -I right), while I think for I linter I just need to compile it. So back to the last line of EVAL like liz said.
12:54 pmurias joined #perl6
12:54 unmatched} m: class Nil {}; role Str {};
12:54 camelia rakudo-moar 6cd6ef: ( no output )
12:55 gfldex that takes obfuscation to a completely now level :)
12:57 arnsholt El_Che: Yeah, for that there are different methods on the compiler object you can call. I *think* the one you want is simply called compile
12:57 arnsholt Which returns a callable object which can be invoked to do the execution
12:59 unmatched} m: sub say { put "You shall not say! $^a" }; sub infix:<+> { $^a - $^b }; say 2 + 2
12:59 camelia rakudo-moar 6cd6ef: OUTPUT«You shall not say! 0␤»
13:02 arnsholt I should probably write up some kind of description of how to get at and interact with the compiler object; it's less horrifyingly guts hackery than you might expect
13:03 arnsholt In my ample spare time, in between thesis, new job and baby >.<
13:03 El_Che arnsholt: yeah, join the club
13:04 El_Che arnsholt: that should go right in to the doc (next to the blog). To useful to get lost in a random post
13:04 wamba joined #perl6
13:05 andreoss m: class Str {}; say "hi";
13:05 camelia rakudo-moar 6cd6ef: OUTPUT«===SORRY!===␤This type cannot box a native string: P6opaque, Str␤»
13:06 andreoss why no "Redeclaration of symbol Str"?
13:06 unmatched} You can shadow all of the builtins by default.
13:06 unmatched} *by design
13:06 jnthn Because the existing one is a lexical symbol
13:06 jnthn And so the new package-scoped decl doesn't conflict
13:07 arnsholt The setting is an outer lexical scope, so you get shadowing instead
13:07 jnthn Right
13:07 mcmillhj joined #perl6
13:07 arnsholt It's like "my $a = 1; { my $a = 2; }"
13:07 andreoss m: our class Bar {} ;  { local class Bar {} };
13:07 camelia rakudo-moar 6cd6ef: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Redeclaration of symbol Bar␤at <tmp>:1␤------> 3our class Bar {} ;  { local class Bar7⏏5 {} };␤    expecting any of:␤        generic role␤»
13:08 andreoss m: my class Bar {} ;  { my class Bar {} };
13:08 camelia rakudo-moar 6cd6ef: ( no output )
13:09 jnthn Closer to "my $a = 1; { our $a = 2; }" I guess, but yeah.
13:09 unmatched} m: my class Bar {} ;  { class Bar {} };
13:09 camelia rakudo-moar 6cd6ef: ( no output )
13:09 pierre_ joined #perl6
13:13 pmurias unmatched}: re comments on reddit, most of them seemed people nit picking for arguments sake
13:15 SmokeMachine____ m: say Str(Int) ~~ Int
13:15 camelia rakudo-moar 6cd6ef: OUTPUT«False␤»
13:15 cdg joined #perl6
13:15 SmokeMachine____ Shouldn't it be true?
13:17 SmokeMachine____ If it shouldn't, how can I get the Str and the Int from the Str(Int)?
13:19 SmokeMachine____ Something like: Str(Int).final-type == Str && Str(Int).from-type == Int
13:19 SmokeMachine____ Is there something like that?
13:22 vincentbosch joined #perl6
13:24 skids joined #perl6
13:25 rba__ joined #perl6
13:27 inokenty joined #perl6
13:28 RabidGravy er
13:30 unmatched} m: my $v = Str(Int); say $v.^methods
13:30 camelia rakudo-moar 6cd6ef: OUTPUT«Method 'methods' not found for invocant of class 'Perl6::Metamodel::CoercionHOW'␤  in block <unit> at <tmp> line 1␤␤»
13:30 RabidGravy It's not a type as such, though it looks weird - it's a type coercion of a type object, I'd expect a different result
13:31 unmatched} m: my $v = Str(Int); say $v.^target_type
13:31 camelia rakudo-moar 6cd6ef: OUTPUT«(Str)␤»
13:31 unmatched} m: my $v = Str(Int); say $v.^constraint_type
13:31 camelia rakudo-moar 6cd6ef: OUTPUT«(Int)␤»
13:31 RabidGravy yeah
13:32 RabidGravy my brane wants  Str(Int) to be an undefined string
13:34 gfldex Perl6::* are missing in the docs, are they in roast?
13:35 Hor|zon joined #perl6
13:35 gfldex seams not so
13:36 RabidGravy gfldex, they are documented as MetaModel::* e.g. https://docs.perl6.org/type/Metamo​del$COLON$COLONAttributeContainer
13:36 ptolemarch joined #perl6
13:36 gfldex a few are
13:37 RabidGravy so CoercionHOW isn't
13:37 RabidGravy well it's add the ones that are tested and not documented
13:43 gregf_ m: my $v = Str(Int); say $v.^name
13:43 camelia rakudo-moar 6cd6ef: OUTPUT«Str(Int)␤»
13:43 gregf_ m: my $v = Str(Int); say $v.^name; $v = 10.29;
13:43 camelia rakudo-moar 6cd6ef: OUTPUT«Str(Int)␤»
13:44 sufrostico joined #perl6
13:44 TheLemonMan hmm, the exception backtrace from a broken promise points to the block where await is called, quite counterintuitive when you have to debug some code gone wild
13:45 gfldex known bug
13:45 unmatched} Is it really a bug, rather than merely a limitation?
13:45 gfldex you can add a CATCH inside the thread and .say the exception
13:45 unmatched} TheLemonMan: it's cause it's on another thread. Stick a CATCH { default { warn $_; warn .backtrace} }
13:45 unmatched} somewhere inside that thread
13:46 TheLemonMan that's much better
13:46 unmatched} \o/
13:47 unmatched} Definitely an area of improvement to be made in. Gets pretty annoying when you got lots of starts and supplies and things
13:48 TheLemonMan you'd have to somehow raise the exception (or pass some more informations about the call-site) rather than just passing the Exception object as a result
13:49 gfldex IIRC it's in a Failure already but await is messing it up
13:50 TheLemonMan afaics await is just calling .result on the promise, which in turn just calls .throw
13:51 khw joined #perl6
13:51 RabidGravy I think if you catch the exception from the await and get the inner exception or something it's right
13:52 ugexe you have to catch the 3rd exception, but only during a blood moon
13:52 unmatched} :D
13:56 TheLemonMan hmm, will a full moon suffice ?
13:56 ugexe are you willing to part with your first born?
13:58 RabidGravy speaking of blood sacrifice I'd better be testing the Net::AMQP with this new rabbitmq version
14:14 dalek ecosystem: 51b7ca0 | (Alexey Melezhik)++ | META.list:
14:14 dalek ecosystem: Sparrowdo module to install/update Sparrow Toolchain on target host.
14:14 dalek ecosystem: review: https://github.com/perl6/e​cosystem/commit/51b7ca0981
14:14 dalek ecosystem: 4376a98 | (Zoffix Znet)++ | META.list:
14:14 dalek ecosystem: Merge pull request #234 from melezhik/master
14:14 dalek ecosystem:
14:14 dalek ecosystem: Sparrowdo module to install/update Sparrow Toolchain on target host: https://github.com/melezhik​/sparrowdo-sparrow-update/
14:14 dalek ecosystem: review: https://github.com/perl6/e​cosystem/commit/4376a98f44
14:14 kyclark joined #perl6
14:16 SmokeMachine____ unmatched}: thanks!
14:18 movl joined #perl6
14:24 pmurias new nqp-js blog post: http://blogs.perl.org/users/pawel_​murias/2016/08/nqp-js-update.html
14:27 unmatched} pmurias++
14:28 kyclark joined #perl6
14:29 CIAvash pmurias++
14:38 mst awesome!
14:38 mst defend perl6's naming on twitter, get yelled at by stmuk
14:39 unmatched} ooo drama :D
14:39 unmatched} mst: link? :)
14:40 mst https://twitter.com/shadowcat_​mst/status/765536253764837377
14:42 RabidGravy moar popcorn needed, between that and people roasting UKIP :)
14:42 _4d47 joined #perl6
14:43 unmatched} Ah, great, ribasushi calling my words schizzophrenic.
14:43 * unmatched} sighs
14:43 RabidGravy there are some particularly uncivilised people around
14:43 gfldex twitter could be so nice without all those humans
14:44 mst unmatched}: I thought my defence was really quite nice
14:44 mst until for some reason the star release manager turned up and started yelling at me and the perl6 person in the thread :(
14:44 gregf_ heh.. cool down guys.. its Perl *runs*
14:44 El_Che ah, I am famous. I am in the twitter thread (nxadm)
14:45 unmatched} mst: I don't see those comments though for some reason
14:46 mst https://twitter.com/nxadm/​status/765545028026527745
14:46 El_Che unmatched}: it starts here https://twitter.com/ribasush​i/status/765500776034758656
14:47 unmatched} heh
14:47 kyclark joined #perl6
14:47 RabidGravy everyone will be famous for some multiple of 160 characters
14:47 El_Che anyway, there seems to be some bad blood there. Not much of a discussion after a few tweets
14:48 Wiertek joined #perl6
14:48 mst I was trying to constructively point out that the will to rename wasn't even -really- there on the perl5 side
14:49 mst given my plan got basically ignored
14:49 mst also, 'larry gets to name things perl' <- uh, yeah, that's why I was hoping we'd end up with 'pumpkin perl' and 'camelia perl' as being what people said
14:49 El_Che same same but different, not cool - let's be friends - I tried to fix it but nobody moved - shut up - shut up you first
14:49 El_Che there you go :)
14:50 mst right
14:50 mst still confused why smtuk decided to jump in and start attacking people
14:50 mst but, whatever
14:52 jdv79 i wonder if that squabble will ever die
14:52 mst I like my answer of "I tried, people didn't, let's file it under 'actually people don't care that much'"
14:53 unmatched} No, of course not. People don't really give a shit about the name, they just want their 5 minutes of fame yelling about things.
14:53 unmatched} They could call it Rakudo, but no one cares enough.
14:53 pmurias I hope the better Perl 6 becomes the better the relations with the Perl 5 community will be
14:53 canopus joined #perl6
14:53 mcmillhj joined #perl6
14:54 El_Che while the battle are the Field of Despair rages for days, people outside the echochamber thought: WUT, people still use PERL? :)
14:55 mst indeed
14:55 mst this is why my current project is building something non-perl people will want to use that's incidentally implemented in perl
14:55 mst it will probably eventually be implemented in a mixture of perl5 and perl6
14:56 mst but I figure the best way to advocate a language is to have people want to learn it because they're already using it for something
14:56 mst there's plenty of people who only know PHP because they needed to beat wordpress or mediawiki with a stick etc.
14:56 El_Che mst: that why I learn Ruby (Puppet)
14:56 El_Che t
14:56 unmatched} pmurias: if it weren't for mst, my relations would consist of (1) "Mojolicious developers shitlisting me for an exasperated tweet about their work and having a discussion about me for several hours" (2) Ribasushi parading my comments about wanting to live in peace as "schizzo". I can totally see this ending up in a breaking point and me stopping to care what Perl 5 folks think or do, since my only point of
14:56 unmatched} contact is through these sort of interactions.
14:57 mst what I'm upset about is that I went to the trouble of stepping in to defend from the perl5 side
14:57 mst and then got yelled at by a perl6 person
14:57 mst it makes me not want to bother
14:57 El_Che mst in an ambassador role. Who would have thought :)
14:57 unmatched} :)
14:57 lizmat El_Che: you might be surprised  :-)
14:58 El_Che I ... am
14:58 El_Che :)
14:58 mst El_Che: ironically, the only reason Chef was written in ruby was that their early customers were all rails shops
14:58 mst the prototype was a Catalyst app
15:00 nowan joined #perl6
15:00 El_Che mst: I was told that the first prototypes/versions of puppet were in perl, but the author moved to ruby for better dsl support
15:01 El_Che I can't find a verification of it though
15:01 mst El_Che: yes, that's *puppet*. I said *chef*.
15:01 mst I was around for the birth of both.
15:02 El_Che that sounds creepy :)
15:02 El_Che mst the ghost of christmas past
15:13 obfusk joined #perl6
15:18 timotimo i don't see stmuk be a part of that discussion at all, strangely
15:18 mst starts from https://twitter.com/nxadm/​status/765545028026527745 with him attacking El_Che for no apparent reason
15:19 timotimo oh, man. twitter is hard to navigate.
15:20 timotimo *shrug* :\
15:22 gregf_ imho "radically different languages" doesn't sound quite right :|
15:23 gfldex m: use variables :D; my @a; @a[0] = Any;
15:23 camelia rakudo-moar c159f0: OUTPUT«Type check failed in assignment to @a; expected Any:D but got Any (Any)␤  in block <unit> at <tmp> line 1␤␤»
15:24 mcmillhj joined #perl6
15:27 perlpilot joined #perl6
15:39 rindolf joined #perl6
15:41 stmuk El_Che: there is a FLOSS Weekly interview with the Puppet authors where they say they were Perl people who used Ruby for pragmatic reasons
15:42 mspo I recall it
15:42 mspo back in the great ruby DSL trend days
15:42 timotimo the great DSL wars
15:43 mspo and puppet is dog slow to prove how ruby-esque it is
15:43 mspo my puppet runs are 30s - 3m now-a-days
15:43 mspo it's painful
15:44 unmatched} What's an R operator? Trying to search for it on docs site is proving impossible :/
15:44 timotimo it's a metaoperator
15:44 timotimo it reverses the arguments to an operator
15:44 TheLemonMan m: my @y is default(42); say @y;
15:44 camelia rakudo-moar c159f0: OUTPUT«[]␤»
15:44 timotimo m: say 5 - 10; say 5 R- 10
15:44 camelia rakudo-moar c159f0: OUTPUT«-5␤5␤»
15:44 timotimo m: say 5 / 10; say 5 R/ 10
15:44 camelia rakudo-moar c159f0: OUTPUT«0.5␤2␤»
15:44 unmatched} Oh
15:44 unmatched} m: say 5 R, 1
15:44 camelia rakudo-moar c159f0: OUTPUT«(1 5)␤»
15:44 unmatched} Thanks
15:45 timotimo m: 10 R= my $foo; say $foo
15:45 camelia rakudo-moar c159f0: OUTPUT«10␤»
15:45 unmatched} 0.o
15:45 Ulti SmokeMachine____ your example with the scalar and hash version of SetHash the % named variables are all Hashes so if you say SetHash %variable you end up declaring a Hash[SetHash] where the keys are typed iirc
15:45 El_Che mspo: I restricted my puppet use to a run in a tmp space on a remote server to create the persistent configuration of docker containers (using among other hiera-eyaml for gpg encryption of secrets)
15:45 unmatched} m: my @y is default(42); say @y[^3]; # TheLemonMan, the default applies to elements that don't have values
15:45 camelia rakudo-moar c159f0: OUTPUT«(42 42 42)␤»
15:45 timotimo Ulti: nope, for typed keys you need to Hash{SetHash}
15:45 Ulti timotimo its more it ends up being that
15:46 Ulti not saying the square bracket thing is syntax
15:46 timotimo Ulti: the role arguments for Associative and Hash are "reversed" for that reason
15:46 Ulti just a description
15:46 El_Che mspo: so the puppet/ruby lib code is nowadays pretty simple and small (it used to be huged and complicated)
15:46 TheLemonMan unmatched}, ugh, that's confusing
15:46 Ulti %thing is a hash I noticed this when someone else was asking about the exact same thing with BagHash
15:46 timotimo but they want a hash that has BagHash-es stored in it
15:47 Ulti no they want the %thing to be the BagHash at least in the person previously
15:47 unmatched} TheLemonMan: what did you think it would end up as?
15:47 gfldex m: my %h is SetHash.=new; dd %h.push(a => 1)
15:47 camelia rakudo-moar c159f0: OUTPUT«Cannot modify an immutable SetHash␤  in block <unit> at <tmp> line 1␤␤»
15:47 Ulti my BagHash %thing = BagHash.new;
15:47 unmatched} m: my $y is default(42); say $y;
15:47 camelia rakudo-moar c159f0: OUTPUT«42␤»
15:47 Ulti gfldex: hmm interesting
15:48 unmatched} m: my $y is default(42); $y = (1, 2, 3, 4,); say $y;
15:48 camelia rakudo-moar c159f0: OUTPUT«(1 2 3 4)␤»
15:48 TheLemonMan unmatched}, a compile-time error tbh heh, I originally mistyped the sigil in my code and was wondering what was going on
15:48 Ulti so the `is` is needed
15:48 timotimo Ulti: that's just a bug; i think it was already filed.
15:48 Ulti k k
15:49 SmokeMachine____ Util: no iPhone wanted a hash of SetHashes...
15:51 * [Coke] would give lizmat a hug, but is afraid that would hurt.
15:52 SmokeMachine____ My problem was I couldn't set values on a sethash inside of a hash...
15:52 lizmat [Coke]: there are still spots unbruised  :-)
15:52 El_Che lizmat: what happened?
15:52 kjs_ joined #perl6
15:52 lizmat last Sunday hit the concrete of the bikepath at 25km/hour
15:53 SmokeMachine____ m: my SetHash %a; %a<bla><ble>++
15:53 camelia rakudo-moar c159f0: OUTPUT«Type check failed in assignment to %a; expected SetHash but got Hash (${})␤  in block <unit> at <tmp> line 1␤␤»
15:53 El_Che lizmat: let me guess, you wanted to speed up stuff with at least 30%
15:53 El_Che :)
15:53 El_Che lizmat: something broken?
15:53 lizmat nothing broken, just a lot of scratches and bruises
15:53 lizmat I now have green fingers on my left hand  :-)
15:54 lizmat quite amazing  :-)
15:54 AlexDaniel lizmat: what about the bike? Is it alright?
15:54 lizmat yeah, mostly, one of the brakes needed adjusting
15:54 * [Coke] ROTFLS at el_che's comment. :)
15:57 SmokeMachine____ Shouldn't that work?
15:57 AlexDaniel lizmat: well, consider rethinking your priorities :D that being said, some people argue that while healhcare is free in some countries, bike parts are not…
15:58 unmatched} lol
15:58 lizmat AlexDaniel: and don't forget the labour  :-)
15:59 gfldex SmokeMachine____: no, it should not work
15:59 SmokeMachine____ Why not?
16:00 gfldex because you never told the compiler the shape of %a. Therefor it must assume that you want a "autovivified" shape.
16:00 gfldex and shaped Hashes are NYI
16:00 gfldex (i think)
16:00 gfldex m: my SetHash %a{1};
16:00 camelia rakudo-moar c159f0: ( no output )
16:01 gfldex m: my SetHash %a{1}; dd %a
16:01 camelia rakudo-moar c159f0: OUTPUT«Hash[SetHash,Int] %a = (my SetHash %{Int} = )␤»
16:01 mcmillhj joined #perl6
16:02 dalek doc: 8105200 | coke++ | util/list-missing-methods.p6:
16:02 dalek doc: whitespace cleanup
16:02 dalek doc: review: https://github.com/perl6/doc/commit/81052002d6
16:02 dalek doc: 6b162d4 | coke++ | doc/Type/Callable.pod6:
16:02 dalek doc: whitespace
16:02 dalek doc: review: https://github.com/perl6/doc/commit/6b162d43de
16:02 kjs_ joined #perl6
16:02 MilkmanDan joined #perl6
16:03 SmokeMachine____ I said that I wanted a hash of sethashes... Didn't I?
16:03 Ledmitz joined #perl6
16:03 gfldex m: my %a; %a<bla> = SetHash.new; %a<bla><blub>++; dd %a;
16:03 camelia rakudo-moar c159f0: OUTPUT«Hash %a = {:bla(SetHash.new("blub"))}␤»
16:04 SmokeMachine____ But why it's not autovivified?
16:04 unmatched} m: my SetHash %a; %a<bla> = SetHash.new; %a<bla><ble>++
16:04 camelia rakudo-moar c159f0: ( no output )
16:04 unmatched} m: my SetHash %a; %a<bla> = SetHash.new; %a<bla><ble>++; dd %a
16:04 camelia rakudo-moar c159f0: OUTPUT«Hash[SetHash] %a = (my SetHash % = :bla(SetHash.new("ble")))␤»
16:05 unmatched} SmokeMachine____: it is; it's just the autovivification uses a Hash, so you get the type mismatch error
16:05 gfldex m: my %a is default(SetHash.new); # it should do that but with a proper closure
16:05 camelia rakudo-moar c159f0: ( no output )
16:05 Ledmitz hello. this should be a simple one sine I don't know perl at all. having a problem with quoted text. I think the "s/" seems to be the problem. How can I treat as normal quote?
16:05 Ledmitz "/media/Silo/Projects/Audio/ManaSound/Done"
16:05 unmatched} Ledmitz: there's no problem in that string. We'll need more context.
16:06 unmatched} Ledmitz: also, what Perl is that? Perl 5 or Perl 6?
16:06 SmokeMachine____ m: my SetHash %a; %a<bla> .= new; %a<bla>++; dd %a
16:06 camelia rakudo-moar c159f0: OUTPUT«Method 'succ' not found for invocant of class 'SetHash'␤  in block <unit> at <tmp> line 1␤␤»
16:06 Ledmitz ok .. its the bfserve.pl script. I want to host sfx that I have made
16:07 unmatched} Ledmitz: are there error messages?
16:07 SmokeMachine____ But if I said that it's a sethash, shy it autovivifies as a hash?
16:07 Ledmitz OOOhhhh unmatched} ... I am Perl 5 here, I guess
16:07 gfldex SmokeMachine____: you may have stepped on a bug
16:08 Ledmitz unmatched}> shall I send a code snippet to you pm?
16:08 unmatched} Ledmitz: OK.
16:08 unmatched} Ledmitz: and error messages you're getting
16:08 zacts joined #perl6
16:09 SmokeMachine____ gfldex: already known bug?
16:09 gfldex _may_
16:09 zakharyas joined #perl6
16:09 Ledmitz unmatched}> no errors and I checked syntax online. all good, but terminal shows different color
16:09 gfldex the problem is that the type you provide, may require arguments to new to make sense. How should the compiler know?
16:11 gfldex autovivication with %h<foo>++ makes sense because ++ defaults to Int and Int.new defaults to 0 so you end with a foo => 1
16:11 unmatched} Ledmitz: erm, you're just using a dumb syntax highlighter that thinks it's the s/// operator, even though it's just a string.
16:11 unmatched} Ignore it.
16:12 SmokeMachine____ Shouldn't it looks at the type of the variable to get a hint?
16:12 mcmillhj joined #perl6
16:12 gfldex it doesn't get there for %a<bla><ble>++
16:13 Ledmitz unmatched}> ok.. just trying to track down why the server not functioning.
16:13 brrt joined #perl6
16:13 unmatched} Ledmitz: you might get better luck in one of... I'm assuming Battle Field... forms, since the problem is likely not with the script, but with your setup.
16:14 unmatched} *forums
16:14 gfldex m: my SetHash %a; %a.VAR.default.say
16:14 camelia rakudo-moar 05cdc1: OUTPUT«(SetHash)␤»
16:14 gfldex so the default value is a type object
16:15 gfldex m: my SetHash %a is default(Any); %a.VAR.default.say
16:15 camelia rakudo-moar 05cdc1: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Default value '(Any)' will never bind to a parameter of type Hash[SetHash]␤at <tmp>:1␤------> 3my SetHash %a is default(Any)7⏏5; %a.VAR.default.say␤    expecting any of:␤        constraint␤»
16:15 Ledmitz unmatched}> hm.... I'm guessing the script is really old and the pearl newest on Debian Unstable
16:15 SmokeMachine____ m: my SetHash %a; %a<bla>.^name.say
16:15 camelia rakudo-moar 05cdc1: OUTPUT«SetHash␤»
16:15 Ledmitz *new
16:16 unmatched} Ledmitz: it should still work fine. Maybe your config is wrong, dunno.
16:16 Ledmitz unmatched}> ok well ty. where do I go for forums?
16:16 SmokeMachine____ Shouldn't it give a hint?
16:16 unmatched} Ledmitz: no idea. This is a Perl 6 programming channel and your script is a Perl 5 server for a game :} Not exactly overlapping fields :)
16:17 Ledmitz unmatched}> well sorry bout that. I'm gonna try #hexchat. they might know. could be client settings
16:17 SmokeMachine____ m: my SetHash %a is default(SetHash.new); %a<bla><ble>++; dd %a
16:17 camelia rakudo-moar 05cdc1: OUTPUT«Hash[SetHash] %a = (my SetHash %)␤»
16:17 Ledmitz unmatched}> channel modes seem fine
16:17 harovali joined #perl6
16:17 Ledmitz thanks
16:18 unmatched} No problem.
16:18 Ledmitz left #perl6
16:18 brrt joined #perl6
16:19 gfldex is default(SetHash.new) will call .new at compile time
16:19 SmokeMachine____ Makes sense...
16:19 gfldex so you end up with the same Sethash in any slot of %a
16:20 MilkmanDan joined #perl6
16:21 lostinfog joined #perl6
16:22 gfldex m: my SetHash %h; %h but WHENCE({SetHash.new})
16:22 camelia rakudo-moar 05cdc1: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared name:␤    WHENCE used at line 1␤␤»
16:23 mcmillhj joined #perl6
16:24 cdg joined #perl6
16:25 gfldex is WHENCE implemented at all?
16:25 gfldex nvm, it's not in roast
16:26 lizmat gfldex: WHENCE *is* implemented at nqp level and is responsible for:
16:27 lizmat my %h; my $b := %h<a>; dd %h; $b = 42; dd %h
16:27 lizmat m: my %h; my $b := %h<a>; dd %h; $b = 42; dd %h
16:27 camelia rakudo-moar 05cdc1: OUTPUT«Hash %h = {}␤Hash %h = {:a(42)}␤»
16:27 lizmat afk&
16:30 edehont joined #perl6
16:30 pduh joined #perl6
16:31 timotimo oh wow, this is comedy gold
16:31 timotimo "it is literally the same meaning as its dictionary definition" - "no it's not, *links to oatmeal comic about 'literally'*" - "yeah, it is."
16:32 * unmatched} is confused
16:32 timotimo the "literally" was properly used in the original comment
16:32 timotimo and someone went "LITERALLY ISNT USED LIKE THAT"
16:32 SmokeMachine____ m: my %a is Hash of SetHash; %a<bla><ble>++; dd %a
16:32 camelia rakudo-moar 05cdc1: OUTPUT«(my SetHash % = :bla(${:ble(1)}))␤»
16:33 timotimo though of course you can debate whether a function "taking" a code block is an acceptable use of a word that literally means "taking"
16:33 * unmatched} feels like the context is missing...
16:33 timotimo just the comment thread about your blog post
16:33 SmokeMachine____ gdldex: looks that it worked...
16:33 unmatched} Ah
16:34 timotimo i wonder if clang had levenshtein based suggestions before rakudo did
16:34 unmatched} I like gobbling. It's cute and fun. An error in your code is a traumatic event, so humour is a good thing.
16:35 SmokeMachine____ Or not...
16:35 SmokeMachine____ m: my %a is Hash of SetHash; %a<bla><ble> = "qwer"; dd %a
16:35 camelia rakudo-moar 05cdc1: OUTPUT«(my SetHash % = :bla(${:ble("qwer")}))␤»
16:35 timotimo i think that's a bug there
16:36 timotimo probably already filed
16:36 timotimo *shrug*
16:38 timotimo apparently clang already had typo correction in 2011 at the latest
16:38 unmatched} Lool, 44 comments on that reddit thread. "Did you actually read the error?" "Did you actually read my comment?".. Yeah, I don't think I going to be reading them :}
16:39 mcmillhj joined #perl6
16:41 * unmatched} contemplates publishing "Perl 6 The Most Awesome Language You Ever Dreamed Of!"
16:41 unmatched} And then watch the world burn, as people argue themselves in the comments to death :D
16:41 unmatched} I might do it just to troll...
16:44 timotimo not sure how i'd like that
16:44 stmuk social media would be fine if it wasn't for the people that used it!
16:46 unmatched} timotimo: but it would be purely for my own entertainment :D
16:48 timotimo OK
16:48 edehont joined #perl6
16:50 kyclark left #perl6
16:51 unmatched} m: say (1 R, 2 R, 3 R, 4)
16:51 camelia rakudo-moar 05cdc1: OUTPUT«(2 1)␤»
16:52 mspo El_Che: so you just use it as a Dockerfile template machine?
16:53 mcmillhj joined #perl6
16:54 [Coke] unmatched}: precedence
16:55 unmatched} [Coke]: of what? I can't figure out how to put parens in
16:55 unmatched} m: say (1 R, (2 R, (3 R, 4)))
16:55 camelia rakudo-moar 05cdc1: OUTPUT«(((4 3) 2) 1)␤»
16:55 unmatched} Ah
16:55 unmatched} hm
16:56 unmatched} m: say (((1 R, 2) R, 3) R, 4)
16:56 camelia rakudo-moar 05cdc1: OUTPUT«(4 (3 (2 1)))␤»
16:56 unmatched} m: @a = (1 R, 2 R, 3 R, 4); dd @a
16:56 camelia rakudo-moar 05cdc1: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '@a' is not declared␤at <tmp>:1␤------> 3<BOL>7⏏5@a = (1 R, 2 R, 3 R, 4); dd @a␤»
16:56 unmatched} m: my @a = (1 R, 2 R, 3 R, 4); dd @a
16:56 camelia rakudo-moar 05cdc1: OUTPUT«Array @a = [2, 1]␤»
16:57 unmatched} Come come (1, 2, 3, 4) doesn't have this issue?
16:57 [Coke] m: say |(1 R, 2 ) R, |(3 R, 4)
16:57 camelia rakudo-moar 05cdc1: OUTPUT«(4 3 2 1)␤»
16:58 timotimo so the R metaop doesn't do well with list prefix ops?
16:59 unmatched} It's from this ticket: https://rt.perl.org/Ticket/Displ​ay.html?id=128703#ticket-history
17:00 [Coke] unmatched}: my plan on that ticket was to hope jnthn answered it. :|
17:00 zacts_pi joined #perl6
17:00 unmatched} :D
17:09 jnthn I suspect that it just ain't handling list associativity right
17:09 jnthn jnthn@lviv:~/dev/rakudo$ ./perl6-m --target=ast
17:09 jnthn ===SORRY!===
17:09 jnthn Cannot find method 'repl-loop' on object of type QAST::CompUnit
17:09 jnthn Well, bother.
17:10 jnthn Curiously though the AST looks kinda right
17:11 jnthn so does METAOP_REVERSE
17:12 jnthn Oh
17:12 jnthn The optimizer screws it
17:12 jnthn With --optimzie=off it works out fine
17:13 timotimo uh oh. i wonder if i tried to "optimize" the metaop reverse?
17:14 jnthn Probably :P
17:14 jnthn Compiling a patch
17:15 timotimo needs moar tests
17:15 prammer joined #perl6
17:16 jnthn yup, got a fix
17:16 stux|RC-only joined #perl6
17:16 unmatched} \o/
17:16 firstdayonthejob joined #perl6
17:19 jnthn Of course, my NQP and Rakudo builds are way behind HEAD... :)
17:20 jnthn m: use Test; is (1 R, 2 R, 3 R, 4), (4, 3, 2, 1)
17:20 camelia rakudo-moar 05cdc1: OUTPUT«not ok 1 - ␤␤# Failed test at <tmp> line 1␤# expected: '4 3 2 1'␤#      got: '2 1'␤»
17:22 unmatched} m: use Test; is-deeply (1 R, 2 R, 3 R, 4), (4, 3, 2, 1)
17:22 camelia rakudo-moar 05cdc1: OUTPUT«not ok 1 - ␤␤# Failed test at <tmp> line 1␤# expected: $(4, 3, 2, 1)␤#      got: $(2, 1)␤»
17:25 El_Che mspo: I am not a linux admin jobwise, so that part is on their team (jenkins, git setup etc). For our team I picked the pieces togethere and wrote what was needed to allow us to do our deployments on a safe way. We ended with a server that retrieve the configuration from git, build it, puts the secrets in (in git encrypted with gpg hiera-eyaml) and pushed the config to the docker host and restarts the
17:25 El_Che container (or retrieve the coorrect image from the registry)
17:28 brrt joined #perl6
17:31 mspo El_Che: oh okay
17:31 kyclark joined #perl6
17:32 El_Che mspo: it works pretty nice, a git-jenkins flow
17:34 El_Che mspo: but becasue of security concerns we needed a more specific flow (we are responsable for the AAI setup (infra & code), including everything related to ldap, ad, iam, radius, etc)
17:34 kyclark If I “run” with :merge, I never get anything back.  Minimal failing case:
17:34 kyclark http://pastie.org/10936630
17:35 jnthn unmatched}: Fix pushed, ticket closed :)
17:36 unmatched} kyclark: it's likely buggy. I get a coredump with my $p = run "echo", "hello", :merge; say $p.out.slurp-rest
17:36 unmatched} jnthn: that was fast :D \o/
17:36 harovali joined #perl6
17:37 jnthn Yeah, well, my alternative for the last 30 mins of work time today was continuing dealing with integrating with an oAuth2 impl whose authors can't read RFCs...so it wasn't really a hard choice. :P
17:37 unmatched} heh
17:40 domidumont joined #perl6
17:50 Woodi joined #perl6
17:52 zacts joined #perl6
17:55 djbkd joined #perl6
17:59 * stmuk remembers the YAPC::EU 14 oauth dance
17:59 canopus joined #perl6
18:00 Sgeo_ joined #perl6
18:05 cdg joined #perl6
18:07 brrt o... auth... :-(
18:07 brrt although, i was actually having problems with xauth today
18:07 brrt so
18:07 brrt always trouble
18:13 El_Che jnthn: come to saml2 if you want an overdose of RFCs and xml :)
18:19 kurahaupo joined #perl6
18:22 _28_ria joined #perl6
18:25 kurahaupo_ joined #perl6
18:26 prammer joined #perl6
18:32 leego joined #perl6
18:42 awwaiid joined #perl6
18:43 zacts joined #perl6
18:51 kyclark Is there a way to do more than one file test at a time. $file.IO.fe won’t give me “file” and “exists”
18:52 sjn kyclark: doesn't "file" imply "exists"?
18:52 trnh joined #perl6
18:52 trnh joined #perl6
18:53 kyclark Yes, bad example, what about “file” and “executable”?
18:53 kyclark I guess just $file.IO.e && $file.IO.f?
18:53 unmatched} kyclark: $file.IO ~~ :e & :f
18:53 kyclark Oooo, pretty~
18:53 kyclark !
18:53 unmatched} .e and .f given $file.IO
18:54 ugexe you used to be able to do .all<f e>
18:55 unmatched} kyclark: sorry, executable woulbe :x not :e
18:56 lizmat .
18:56 sjn btw, is there a reason for panda seemingly throwing an error when trying to install a module that's already installed?
18:57 ugexe thats actually rakudo that throws
18:58 kyclark Is it possible to set an INPUT_RECORD_SEPARATOR-somethingorother when reading files?
18:59 kyclark e.g., $/
18:59 ugexe nl-in and nl-out
18:59 smls kyclark: Pass the :nl ("newline") option to open()
18:59 dLeCamarae Has anyone built Rakudo for the Intel Galileo, or will I be the first?
19:00 sjn ugexe: stack trace refers to Panda::Installer line 61 <https://github.com/tadzik/panda/blo​b/master/lib/Panda/Installer.pm#L61>
19:00 ugexe $to.install is calling a method on a rakudo class
19:00 sjn CompUnit::Repository
19:01 ugexe ::Installation
19:03 prammer joined #perl6
19:07 lichtkind joined #perl6
19:09 kurahaupo joined #perl6
19:09 pdcawley joined #perl6
19:13 cyphase joined #perl6
19:16 rindolf joined #perl6
19:17 kjs_ joined #perl6
19:17 sno joined #perl6
19:20 rindolf joined #perl6
19:25 awwaiid joined #perl6
19:29 kjs_ joined #perl6
19:30 grondilu joined #perl6
19:30 awwaiid joined #perl6
19:31 TheLemonMan I dug a bit into the ticket #128803 because apparently it's how I now like wasting my time, found that what goes wrong is is-runtime doesn't return True when called in print-exception, I instrumented with some say the code and this is the output I got from running the first test-case outlined in the ticket https://ptpb.pw/jpWv I hope that's somehow useful :)
19:31 synopsebot6 Link:  https://rt.perl.org/rt3//Publ​ic/Bug/Display.html?id=128803
19:35 cyphase joined #perl6
19:38 unmatched} TheLemonMan: great! Can't wait for your fix :)
19:46 unmatched} m: X::OutOfRange.new(what => ".rotor position is", got => -1, range => "0..Inf", comment => "(ensure the negative gap is not larger than the length of the sublist)").new.throw
19:46 camelia rakudo-moar ba20d3: OUTPUT«Argument out of range. Is: <unknown>, should be in <unknown>␤  in block <unit> at <tmp> line 1␤␤»
19:46 unmatched} Weird that the got/range/comment don't get displayed :\
19:46 rindolf joined #perl6
19:47 unmatched} s: <a b c d b>, "rotor", \(1 => -2)
19:47 SourceBaby unmatched}, Sauce is at https://github.com/rakudo/rakudo/b​lob/1728139/src/core/List.pm#L1152
19:47 unmatched} Ah, two .news
19:47 unmatched} m: X::OutOfRange.new(what => ".rotor position is", got => -1, range => "0..Inf", comment => "(ensure the negative gap is not larger than the length of the sublist)").throw
19:47 camelia rakudo-moar ba20d3: OUTPUT«.rotor position is out of range. Is: -1, should be in 0..Inf; (ensure the negative gap is not larger than the length of the sublist)␤  in block <unit> at <tmp> line 1␤␤»
19:48 zacts joined #perl6
19:50 TheLemonMan unmatched}, heh I'm still trying to figure out how all the moving pieces work together
19:51 unmatched} TheLemonMan: if it's of help, there's an Internals course: http://edumentab.github.io/rak​udo-and-nqp-internals-course/
19:51 TheLemonMan oh, that's very nice, thanks unmatched}
19:52 unmatched} There's also this article; unsure of how useful it will be to you tho: http://perl6.party/post/Hacking-on-​Rakudo-Perl-6-Compiler-Mix-Your-Fix
19:52 TheLemonMan that's the article that made me try out Perl6 :)
19:53 [Coke] unmatched}++
19:54 TEttinger joined #perl6
19:57 lizmat unmatched} : seems like my fix borked the test for #127695 in t/spec/S19-command-line/repl.t ?
19:57 synopsebot6 Link:  https://rt.perl.org/rt3//Publ​ic/Bug/Display.html?id=127695
20:00 canopus joined #perl6
20:03 vendethiel joined #perl6
20:08 mcmillhj joined #perl6
20:10 cyphase joined #perl6
20:12 unmatched} TheLemonMan: that's music to my ears :)
20:12 vcv unmatched}++
20:13 unmatched} lizmat, I'll take a look closer when I get home, but it seems to be just another test that assumed the REPL starts up even if the requested module was not found
20:14 lizmat unmatched}: that makes sense, safe travels!
20:26 cdg joined #perl6
20:27 cdg joined #perl6
20:29 TheLemonMan from what I can tell it seems the backtrace is too shallow to reach the point where eval/print_control/compile is
20:33 pmurias joined #perl6
20:34 ggoebel joined #perl6
20:34 brrt joined #perl6
20:35 zacts joined #perl6
20:36 itaipu joined #perl6
20:37 zacts joined #perl6
20:39 domidumont joined #perl6
20:39 lizmat TheLemonMan: have you tried running with --ll-exception ?
20:40 TheLemonMan lizmat, yep, I've just learned about that switch heh
20:40 awwaiid joined #perl6
20:45 kyclark Given two arrays like @names and @values, how could I combine them into a single hash?
20:45 kyclark @names Z @values doesn’t quite do what I want
20:45 hoelzro @names Z=> @values
20:46 hoelzro that should do the trick, I think
20:46 hoelzro m: my @names = <foo bar baz>; my @values = 1..3; my %h = @names Z=> @values; say %h.perl
20:46 camelia rakudo-moar dd9b76: OUTPUT«{:bar(2), :baz(3), :foo(1)}␤»
20:47 kyclark Flippin’ sweet.
20:47 kyclark Heckin’ awesome.
20:47 perlpilot Perl 6 is just awesome that way  :)
20:48 mohae joined #perl6
20:48 AlexDaniel interestingly, I'm no longer impressed by stuff like this
20:49 AlexDaniel after seeing enough Perl 6 code it just feels normal
20:49 perlpilot This morning I was debugging some P5 and wanted to dump the value of a hashref on the 5th iteration of a loop.   I immediately typed say Dumper($thingy) is $++ == 4; and then got annoyed that I had to use an actual variable and had to declare it somewhere.
20:50 perlpilot s/is/if/
20:50 perlpilot Perl 6 is full of little "convenience" things like that that just make it more fun to use
20:51 AlexDaniel it also annoys me that you have to import Dumper…
20:51 perlpilot indeed
20:52 kjs_ joined #perl6
20:55 mvorg joined #perl6
20:59 mcmillhj joined #perl6
21:03 El_Che m: class foo { foo() }
21:03 camelia rakudo-moar dd9b76: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant value foo() in sink context (line 1)␤»
21:03 Ven joined #perl6
21:04 El_Che m: class foo { my $a = 'a'; foo }
21:04 camelia rakudo-moar dd9b76: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant value foo in sink context (line 1)␤»
21:04 unmatched} that looks like a coercer
21:06 El_Che about the errors message. Regular errors (typo's, wrong infixes, forgotten ';', etc) return the filename in the first line of the error output. "Undeclared" errors (e.g. Undeclared routine) does not return a filename what so ever
21:08 zengargoyle it's been a while, but i think i've seen horrid SHA hashes in some sorts of error messages or other outputs where one would expect a 'filename' of some sort.
21:09 El_Che zengargoyle: it doen't matter that much as long as the errors are consistent. The filename (and line nr) is needed by the vim linter (syntastic) in order to highlight the error line
21:11 zengargoyle sure, i'm just thinking more of the general useage case.
21:11 geekosaur zengargoyle, that was fixed some time ago so it gets translated to the user visible name
21:12 perlpilot zengargoyle: sounds like you're thinking of how files used to be shown from comp unit repos
21:12 geekosaur (actually it outputs both, because if you have two different modules that use the same user visible names but are distinct by, say, auth or ver, you need the hash to distinguish)
21:12 zengargoyle cool, thought i saw one a week or two ago.  but i haven't been doing much p6 for a while so ...
21:14 zengargoyle like i could have swore i saw it in like 'panda --help' or something where '/path/to/panda' was '/path/to/some-long-hash' or something.
21:14 perlpilot if you saw it a week or so ago, it must have been from an old perl6  :)
21:15 perlpilot or an old panda maybe
21:15 unmatched} Don't you still get the hash in the filename, it's just you're also told what module it is in parentheses?
21:15 zengargoyle nah, fresh rakudobrew. install.
21:16 zengargoyle maybe i missed the parenthesized part.
21:16 perlpilot must be
21:16 perlpilot (it's parenthetical ... how important could it be?  ;)
21:16 unmatched} m: class foo { foo().HOW.^name.say }
21:16 camelia rakudo-moar dd9b76: OUTPUT«Perl6::Metamodel::CoercionHOW␤»
21:16 unmatched} \o/
21:16 zengargoyle :)
21:17 geekosaur mm, this sounds like something different? like the script is printing its $*PROGRAM and that contains the hash because that's the actual name of the script within the filesystem?
21:17 geekosaur (or is it $?PROGRAM? sigh)
21:19 unmatched} $*PROGRAM
21:25 labster joined #perl6
21:28 zengargoyle ah, yeah. maybe it was some other older thing from pre precomp days that was printing out itself.
21:29 edehont joined #perl6
21:30 kyclark I have a MAIN that accepts a :$sep=‘,’ for parsing files that works fine with commas, but now I want to specify —sep=“\t” on the command line and it’s not working correctly to “split” the text.  Any ideas?
21:31 ugexe are you sending an actual tab or a literal slash literal t?
21:33 kyclark I’m not sure how to specify it from the command line.  I’ve tried —sep=\t —sep=“\t” —sep=\\t
21:33 kyclark None work
21:34 ugexe you have to do that yourself
21:34 kyclark Wow, an actual tab makes it funky
21:34 * geekosaur suspects it only understands literal characters, not backslash escapes
21:34 geekosaur you might want to try --sep=$'\t'
21:34 geekosaur (bash-ism)
21:34 avuserow_ try `--sep="<Ctrl+v><Ctrl+i>"` (e.g. pushing ctrl+v then ctrl+i while within the double quotes)?
21:35 ugexe or s/\\t/\t/ in your program
21:35 unmatched} There's a site someone linked to here that makes you solve all sorts of decoding challenges in HTTP headers. Anyone recall the URL?
21:35 unmatched} It was some different language, not English
21:36 kyclark geekosaur nailed it, but I guess I will have to detect literal ‘\t’ and set it to “\t” ???
21:36 geekosaur what ugexe said, basically
21:36 geekosaur except you probably want general character escape processing (hm. is that perhaps exposed somewhere convenient?)
21:37 ugexe just use .trans, there isnt that many instances
21:37 kyclark Oh, right.  ugexe got it, too
21:38 ugexe https://github.com/rakudo/rakudo/blob/no​m/src/core/Rakudo/Internals/JSON.pm#L107 along those lines
21:38 geekosaur until you try to use \x or \c...
21:41 prammer joined #perl6
21:42 unmatched} Ah, found that site: http://www.vg.no/
21:47 * avuserow_ prepares for a flight by cloning `perl6-all-modules`... never know when you need some light reading
21:56 Ven joined #perl6
22:00 masak hm, perl6-all-modules hasn't been updated since May...
22:01 masak 'night, #perl6
22:05 timotimo gnite masak
22:08 rkazak joined #perl6
22:08 kyclark Can the arguments to MAIN be made mutable?
22:09 kyclark Here’s what I have right now:
22:09 kyclark sub MAIN (Str $file!, Str :$sep=',', Int :$limit=0) {
22:10 kyclark I need to alter $sep if it’s “\t”
22:11 geekosaur m: sub aMAIN (Str $file!, Str :$sep is rw =',', Int :$limit=0) { }
22:11 camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Cannot use 'is rw' on an optional parameter␤at <tmp>:1␤»
22:11 geekosaur bleh
22:11 kyclark Yeah, that’s what I was seeing.  I wondered if I just had things in the wrong order.
22:11 heatsink joined #perl6
22:11 geekosaur so, you can but you can;t use the =',' shorthand, you need to check for it being defined and set it to ',' yourself in code
22:12 kyclark It’s not a big deal to copy to another variable.  Gives me an opportunity to discuss immutability.
22:12 geekosaur hm. no, tjat makes it mandatory. sigh
22:13 kyclark FWIW, I’m working up an intro to programming in Perl (6) for biologists (https://www.gitbook.com/book/​kyclark/metagenomics/details)
22:21 kyclark I don’t seem to be able to “run” a command with pipes e.g. “cut -f 1 | sort | uniq"
22:21 kyclark I can “shell” it, but it just goes to $*OUT
22:21 ugexe shell has the same options as run
22:23 El_Che are there perl 6 users using vim? I just pushed a fork of syntastic with perl6 support: https://github.com/nxadm/syntastic. It works for me (TM), but it still work in process (does the linter catch all the errors?) and need some work before sending a PR upstream. Perl6 info: https://github.com/nxadm/syntas​tic/blob/master/README-perl6.md
22:23 El_Che beware: ugly vimscript code
22:24 MilkmanDan joined #perl6
22:24 geekosaur you can also make run spawn a shell to run the pipeline, although using shell is better.
22:26 xfix joined #perl6
22:26 ugexe you can pipe with run by doing like `run ..., :in($other-proc.out.lines)`
22:26 AlexDaniel geekosaur: what do you mean by “better” ? ;)
22:27 geekosaur I'm imagining that run splits its string into words. I doubt it does so with shell quoting, so you'd have to do various ugly things to keep it from producing ["/bin/sh", "-c", "'cut", "-f", "1", "|", ...]
22:28 El_Che This is wat it the perl6 support on vim-syntastic looks like: https://snag.gy/7LYGPV.jpg
22:28 geekosaur in fact you might not be able to prevent that at all... I haven't looked at how it does its thing
22:28 geekosaur whereas shell doesn't need any string splitting hackery
22:30 sufrostico joined #perl6
22:31 kyclark OK, so I can run my pipeline with “shell” with a final redirect in to “> tmp” and then read that, but that’s fairly hackish, no?
22:32 stux|RC-only joined #perl6
22:35 AlexDaniel kyclark: .out.slurp-rest
22:36 AlexDaniel run() does not split anything, you give it the arguments and they're passed as is
22:38 AlexDaniel shell() might not need string splitting hackery, but I don't know of any reliable way to pass any variables to it yet… you can pass your stuff into its STDIN, I guess…
22:39 AlexDaniel so if you're choosing between splitting your arguments properly OR trying to prevent things to be evaled, I'd much rather choose the former
22:55 bjz joined #perl6
23:02 n1lp7r joined #perl6
23:08 prammer joined #perl6
23:17 kurahaupo joined #perl6
23:23 skids joined #perl6
23:32 dalek whateverable: 26c5749 | (Daniel Green)++ | Bisectable.p6:
23:32 dalek whateverable: Show short commit hashes for 'good' commit also
23:32 dalek whateverable: review: https://github.com/perl6/wha​teverable/commit/26c5749ebf
23:33 Ulti kyclark: in your book you might want to show given when with junctions rather than the if else for counting nucleotides
23:35 Ulti kyclark: also feel free to pinch anything from here https://perl6advent.wordpress.com/2014/12/15​/day-15-bioinformatics-and-the-joy-of-perl6/
23:35 timotimo m: constant FOOBAR == 4j # LTA error
23:35 camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Preceding context expects a term, but found infix = instead␤at <tmp>:1␤------> 3constant FOOBAR ==7⏏5 4j # LTA error␤»
23:35 timotimo the j was meant to be a ;, but oh well
23:35 timotimo j really looks a lot like a semicolon anyway
23:37 timotimo nxadm found that
23:44 El_Che timotimo: you type weird thing when testing the vim syntaxchecker :)
23:46 timotimo no, nxadm typed a weird thing when testing the vim syntaxchecker
23:46 El_Che I am nxadm
23:46 El_Che :)
23:48 El_Che and nxadm goed to bed, bye!
23:52 kyclark Ulti, thanks for all that!
23:53 kyclark Ulti, can you expand on your comment about junctions for counting nucleotides?
23:54 timotimo YOU ARE THAT!
23:58 prammer joined #perl6
23:58 MasterDuke kyclark: i think he means that: if    $letter eq 'a' || $letter eq 'A'       could instead be: if    $letter eq 'a' | 'A'
23:58 timotimo yes, except the optimization for that is - if i'm not mistaken - tsill b0rked at the moment

| Channels | #perl6 index | Today | | Search | Google Search | Plain-Text | summary

Perl 6 | Reference Documentation | Rakudo