»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
MasterDuke timotimo: i don't know how to read the actual output, but the output of perl6 --target=ast -e 'my $a = "A"; say "y" if $a eq "a" | "A";' is exactly the same as the output of perl6 --target=ast --optimize=0 -e 'my $a = "A"; say "y" if $a eq "a" | "A";' 00:08
unmatched} I'd write it as $letter.lc eq 'a'
(or ensure $letter has .lc from the get go) 00:09
MasterDuke for that example sure, but if you wanted different actual letters, e.g., "a" | "A" | "b" | "B" 00:10
which could then be $letter.lc eq 'a' | 'b', but you still neither either the junction or the or 00:11
*need either
unmatched} For DNA bases, it'd be ATCG 00:12
unmatched} As for the optimizer, even though it outputs stuff the same for the Junction, a more efficient way would be an eq whatever or eq whatever, but the optimizer doesn't do that ATM, which is what I believe timotimo was talking about 00:13
Not sure how that's to go about when Junctions will autothread ¯\_(ツ)_/¯
timotimo we are *not* going to spawn out threads for comparing a string against two different things 00:16
that's just pure overhead
unmatched} Yeah, I'd hope so 00:17
El_Che 7 00:20
skids well, unless they are all huge strings in which the first 1MB or so are the same :-) 00:33
timotimo OK, except in that case 00:34
but if they have ever been used in a hash, we do have the hash code ...
probably won't have it
skids If we had an opportunistic hashing thing going on in the background we might. Also if you are going to strcmp anyway it doesn't cost that much more to throw some instructions in to partially hash while pulling in cache lines. But that's all fantasy for now. 00:37
skids but then we get into dos-resistant versus rolling hashes and when to use which. 00:39
timotimo oh, i had meant to inspect the hash function we use for collisions in strings that are ascii representations of decimal numbers 00:42
MasterDuke would anybody mind if i add my (hopefully not too controversial two cents) to the Perl 6 errors are awesome or not discussion? or is that topic touchy? 00:48
skids You know actually "if you have N-strings for N>some_value and you compare them often, put them in a hash key" as a user-visible way of tweaking that behavior isn't so completely horrible.
timotimo MasterDuke: we're not going to tell you to do or not do :) 00:52
timotimo forgiveness is better than permission, after all 00:52
i don't think i have to tell you to be calm and respectful and all that ;)
i'm so annoyed i can't get "show comments newer than the last time you looked" outside of /r/perl6 00:53
MasterDuke that's pretty much what i figured, but if there is a lot of history i wasn't aware of i don't want to stir the pot unnecessarily
timotimo *shrug*, i don't think there really is 00:54
one person was presenting rakudo's error messages as a good example for the whole industry, commenters were like "no, those errors are shit"
that's all there is to it, if i'm not mistaken 00:55
sammers hi perl6
timotimo hey sammers
sammers hi timotimo
timotimo i wonder if people ever tell you to "go and make me a sammich, sammers" :o)
MasterDuke my feeling has always been that Perl 6's errors are good, but i'm sympathetic to whoever it was that complained that the list of "expecting any of" things wasn't all that helpful in the general case
sammers my wife
timotimo that's fair :D 00:56
sammers :)
timotimo MasterDuke: yeah, that's a very valid thing to say, and to add to the discussion
MasterDuke personally, i have never once gotten any useful information out of them
timotimo others have already weighed in with "we should perhaps filter the list to only have things the user would understand easily"
MasterDuke the messages that precede them are very helpful
sammers are there any examples of using an endless loop to emit to a Supply, without blocking?
timotimo yes, they can be uninformative at times
MasterDuke e.g. 00:57
m: .say if /asdf \s+ \/
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5===␤Regex not terminated.␤at <tmp>:1␤------> 3.say if /asdf \s+ \/7⏏5<EOL>␤Unable to parse regex; couldn't find final '/'␤at <tmp>:1␤------> 3.say if /asdf \s+ \/7⏏5<EOL>␤ expecting any of:␤ infix stoppe…»
timotimo sammers: since supplies are push-based, you can't emit in an endless loop without blocking a thread, unless you use something like an interval
sammers what about using Thread?
timotimo sure, that works 00:58
don't forget that things tapped to the supply will run on the same thread that does the emit
MasterDuke the first part, really helpful. the expecting any of i ignore
timotimo m: my $supply = start { supply { .emit for 1..* } }; $supply.tap({ .say; last if ++$ > 10 })
camelia rakudo-moar b00d92: OUTPUT«Method 'tap' not found for invocant of class 'Promise'␤ in block <unit> at <tmp> line 1␤␤»
sammers ah, so is there anyway to have a new Thread emit to a Supply on a different thread?
MasterDuke i understand that people doing fancy grammar related things probably do find them very useful 00:59
timotimo m: my $supply = await start { supply { .emit for 1..* } }; $supply.tap({ .say; last if ++$ > 10 })
camelia rakudo-moar b00d92: OUTPUT«No such method 'emit' for invocant of type 'Int'␤ in any at /home/camelia/rakudo-m-inst-2/share/perl6/runtime/CORE.setting.moarvm line 1␤ in block at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
timotimo oh
m: my $supply = await start { supply { .&emit for 1..* } }; $supply.tap({ .say; last if ++$ > 10 })
camelia rakudo-moar b00d92: OUTPUT«1␤2␤3␤4␤5␤6␤7␤8␤9␤10␤11␤»
timotimo sammers: how does that look?
sammers ok, I will play with it... thanks
timotimo actually, i don't think i even need the start there?
m: my $supply = supply { .&emit for 1..* }; $supply.tap({ .say; last if ++$ > 10 })
camelia rakudo-moar b00d92: OUTPUT«1␤2␤3␤4␤5␤6␤7␤8␤9␤10␤11␤»
timotimo yeah, neat.
unmatched} m: my $supply = supply { .emit for 1..* }; $supply.tap({ .say; last if ++$ > 10 }) 01:00
camelia rakudo-moar b00d92: OUTPUT«No such method 'emit' for invocant of type 'Int'␤ in any at /home/camelia/rakudo-m-inst-2/share/perl6/runtime/CORE.setting.moarvm line 1␤ in block at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
timotimo ah, of course!
unmatched} :(
timotimo the supply block gets run whet you tap the thing
MasterDuke but my impression is that most people "in the wild" writing Perl (5 or 6), are frequently doing command line text manipulation and things like that
timotimo unmatched}: you did see .&emit?
it's strange to have .take but not .emit 01:01
i do!
unmatched} timotimo: yeah, I kinda figured .emit would work :()
timotimo could be a rakudobug
MasterDuke and for them, the first part of the error message is extremely useful and the second part isn't
timotimo i.o.w.: please submit if you have time :)
unmatched} is too drunk to submit anything
timotimo fair enough! i'll do it, then 01:01
already submitted 01:02
unmatched} And my apartment smells like burt popcorn, because I'm not steeped enough in North American culture to know to take off the cardboard bit of the pan-like popcorn thingies :/
MasterDuke so i would be in favour of turning the second part (i.e, "expecting any of" and things like that) off in the general case and adding a flag to turn it on, like we already have --ll-exceptions 01:03
but if i were to add that as an RFC rakudobug, would i get summarily smacked down? 01:04
timotimo i don't think it'd be smacked down just like that 01:05
oh, yikes
REPL seems to be kind of b0rked at the moment
when you "my $a = 0" and then "say $a", you get "variable $a not declared"
we don't have a test that ensures such basic things in the repl? 01:06
unmatched} MasterDuke: as I whined about earlier today, I feel the entire branch of "LTA errors" of tickets is missing its mark. We need to have a solid plan of what the errors are meant to look like and possibly expose the interface for emitting them to module-space. ATM, we're just like dung-beetles, changing the text of errors any time someone complains, without any plan whatsoever
timotimo unmatched}: huh? but all those errors are already structured exception objects that give you pretty much all you need to work with them?
and LTA error tickets aren't only about wording, but also about what class to emit and what properties those should have 01:07
unmatched} timotimo: oh damn. Maybe that's why RT#127933 git fixed :/ REPL no longer remembers previous lines 01:08
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127933
MasterDuke unmatched}: i don't really have a problem with the existing tickets, but that's because as you say we don't have a concrete plan for errors overall
timotimo unmatched}: seems at least partially unrelated, because even with an int8 or similar you'll get "not declared" 01:09
i'm heading to bed now
unmatched} timotimo: they do, which is why module-space error writers would make a lot of sense. But tickets *are* a lot about wording. Last week I fixed the ticket for say Any ~ "x", which was actually in addition to previous LTA error message fixing it
buggable: rt 01:10
buggable: rt LTA
buggable unmatched}, TOTAL: 1361, UNTAGGED: 556, BUG: 421, LTA: 107, JVM: 62, NYI: 35, RFC: 31, SEGV: 31, UNI: 27, CONC: 25, PERF: 22, POD: 14, @LARRY: 14, PRECOMP: 10, TODO: 10, BUILD: 7, GLR: 6, STAR: 5, NATIVECALL: 4, WEIRD: 3, BOOTSTRAP: 3, MOARVM: 2, OSX: 2, WEB: 1, SPESH: 1, DOCS: 1, MATH: 1 Details: bug.perl6.party/1471396225.html
unmatched}, Found 98 tickets tagged with LTA. Details: bug.perl6.party/1471396228.html
timotimo they're not *all* about wording
BenGoldberg Why did buggable first say LTA: 107, then only 98? 01:11
unmatched} No, they aren't. But I somewhat feel the actual wording should be a very small part of the equation
BenGoldberg: she's buggy as hell
BenGoldberg Here I was hoping we'd somehow fixed 9 bugs in 3 seconds ;)
unmatched} :) 01:12
timotimo they are a big part of the equation, because the wording helps us figure out what kind of info is needed and what exception type is the right one
and until we have module-space error printers, it's all users have 01:13
unmatched} And that's exactly my point. Until we have module-space errors, any Joe Whatever is free to complain a particular error isn't good enough and we'll likely amend it... because we don't have any plan for errors 01:15
m: say Any ~ "x"
camelia rakudo-moar b00d92: OUTPUT«Use of uninitialized value of type Any in string context.␤Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. in block <unit> at <tmp> line 1␤x␤»
unmatched} I didn't have any issues with the previous warning for the above, but X amount of human hours were spent on submitting the ticket, reading the ticket, fixing the ticket, spectesting the ticket, and commiting and closing the ticket.
And it's just a cycle 01:16
unmatched} Anyway. I have have one too many beers to think about this clearly :) 01:16
unmatched} leaves to fly to undiscovered planets in No Man's Sky
BenGoldberg You might be on the wrong side of Ballmer's Peak ;) 01:18
MasterDuke hoping to not be too controversial, but RT #128969 is a paraphrasing of my previous comments and suggestion about error messages 01:28
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128969
timotimo you seem to assume human hours not spent fixing a trivial bug could have fixed a difficult bug instead 01:30
unmatched} timotimo: that's part of the assumtion yes, but the bigger issue is consistency. You could open a thousand tickets each complaining about LTAness of some particular error and they would all be valid tickets, *because there's no plan for errors* 01:33
timotimo yeah, the metric for what error is good or not is subjective 01:34
but that doesn't mean we'll eternally flip-flop between different possibilities
unmatched} No, not eternally. Eventually we'd hit equllibrium :) For example why does block gobbling error put filename in which the error occurs last, yet levenshtein errors put the filename first? Which choice do you pick to be the "right" one? The errors I report for the same inconsistency will depend on that choice, because there's no master plan :D 01:40
dataangel Does perl 6 have anything like the override keyword from c++11? (Lets you mark a function in a subclass to explicitly indicate that it should be overwriting a function in the base class, benefits not you get a compile time error, so you catch things like when someone renames the function in the base class but forgets to in the derived class) 01:49
* benefit is that you get
timotimo we don't have that, but it ought to be pretty easy for a module 01:50
dataangel But there seems to be a keyword for everything else why not one more? ;) 01:51
timotimo because they're not keywords :)
and they don't have to be added in core for things to work right
timotimo github.com/jonathanstowe/Attribute...te/Lazy.pm - check this for an example 01:53
dataangel Very cool... not far along enough yet to understand the implementation yet but I'm looking forward to the meta-programming stuff 01:56
BenGoldberg dataangel, You could create a Role with a stub method, and give your base class a submethod BUILD which dies unless the current object being instantiated does that Role. 01:58
gfldex m: role R { method m {...} }; class C does R {};
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Method 'm' must be implemented by C because it is required by a role␤at <tmp>:1␤»
gfldex dataangel: ^^^
timotimo i'd assume you'd have something like a compose method that would mix into the method object to be called when the class gets composed and then you'd inspect the superclasses (or the given class) for "does it have the specified method" and "do i actually override this properly? i.e. not just mix into a multi method?" 01:59
gfldex dataangel: you may want to unlearn the c++ concept of "baseclass" 01:59
dataangel gfldex: that's like having a pure virtual function C++ but it's not quite the same thing
BenGoldberg m: role R { submethod BUILD { say '\o/' } }; class C does R {}; C.new; 02:02
camelia rakudo-moar b00d92: OUTPUT«\o/␤»
gfldex any method call in Perl 6 uses late binding. If a method is implemented or not is a runtime question.
dataangel gfldex: seems like if roles can detect method collisions at compile time it should at least be possible for them 02:03
gfldex m: role R { method m {...} }; class C {}; my $c = C.new but R; 02:04
camelia rakudo-moar b00d92: OUTPUT«Method 'm' must be implemented by C+{R} because it is required by a role␤ in any compose_method_table at gen/moar/m-Metamodel.nqp line 2850␤ in any apply at gen/moar/m-Metamodel.nqp line 2860␤ in any compose at gen/moar/m-Metamodel.nqp line 3033…»
BenGoldberg Now that I'm thinking about it, the c++ 'override' keyword is used within a subclass, in order to indicate, "I'm not defining a method here just for my own darn use, I'm defining this method here in order for it to replace a matching method in my superclass" 02:04
gfldex the border between runtime and compile time is fuzzy in Perl 6
dataangel BenGoldberg: yes 02:05
BenGoldberg It's to prevent typos, more or less.
dataangel Will also do not let classes get out of sync
BenGoldberg Yea, I can see that... if someone changes the source of a superclass, say "corrects" the spelling of a method, and any subclasses which *don't* have 'overrides' might compile but not work right. 02:06
dataangel yup 02:07
dataangel bbl
timotimo oh, the important thing about "is override" is that you have to complain about every class that doesn't use it ... 02:08
gfldex what is sensible in a static language 02:09
timotimo well, when you use the module it could have an "as late as possible" phaser that goes through the whole module it was used "in" 02:10
gfldex m: role R1 { method m {...} }; role R2 { method m {'oi'} }; class C does R1 {}; my $c = C.new but R2;
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Method 'm' must be implemented by C because it is required by a role␤at <tmp>:1␤»
BenGoldberg Surely could be checked at compose time?
gfldex here the concept breaks
$c would have m, but the compiler assumes static behaviour - in a dynamic language 02:11
timotimo i don't think that's what 02:13
m: class foo { method m { ... }; method m { 'oi' } };
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Package 'foo' already has a method 'm' (did you mean to declare a multi-method?)␤at <tmp>:1␤»
timotimo hm
well, putting roles into a class is like copy-pasting the role body into that class
BenGoldberg m: role R1 { method m { ... } }; role R2 { method m { 42 } }; my $c = (R1&R2).new; 02:14
camelia ( no output )
BenGoldberg m: role R1 { method m { ... } }; role R2 { method m { 42 } }; my $c = (R1&R2).new; dd $c; 02:15
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg wtf?
timotimo m: Junction.new 02:15
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
gfldex m: role R1 { method m { ... } }; role R2 { method m { 42 } }; my $c = (R2&R1).new; dd $c;
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
timotimo i golfed it much shorter already 02:16
BenGoldberg Why didn't it error when I didn't try to print $c?
m: Str.new;
camelia ( no output )
BenGoldberg m: my $c = Junction.new;
camelia ( no output )
BenGoldberg m: Junction.new;
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
gfldex Junctions are introspection-blackholes
timotimo it wasn't trying to autothread the junction when you didn't print or sink it 02:17
m: Junction.new; say "test"
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg m: Junction.new.sink;
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg m: my $c = (Int&Str).new;
camelia ( no output )
BenGoldberg m: my $c = (Int&Str).new; dd $c;
camelia rakudo-moar b00d92: OUTPUT«P6opaque: no such attribute '$!reified' in type List when trying to check if it's initialized␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg It's a little strange that I could .new on a junction type. 02:19
And very strange what happens when trying to dd it.
m: my $c = ("ook" ^ 42).new; 02:20
camelia ( no output )
BenGoldberg m: dd 42.new;
camelia rakudo-moar b00d92: OUTPUT«0␤»
BenGoldberg m: dd "ook".new;
camelia rakudo-moar b00d92: OUTPUT«""␤»
BenGoldberg m: dd 42.new(27);
camelia rakudo-moar b00d92: OUTPUT«27␤»
SmokeMachine____ m: my Int %a = a => 1, b => Int; %a .= pairs.grep(-> (:key($), :value($val)) {$val ~~ Any:D}); dd %a 02:27
camelia rakudo-moar b00d92: OUTPUT«Hash[Int] %a = (my Int % = :a(1), :b(Int))␤»
SmokeMachine____ I can't get it... 02:30
BenGoldberg m: my Int %a = a => 1, b => Int; %a = Hash[Int].new(pairs.grep(-> (:key($), :value($val)) {$val ~~ Any:D})); dd %a 02:31
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Calling pairs() will never work with any of these multi signatures:␤ ($x)␤at <tmp>:1␤------> 3 = a => 1, b => Int; %a = Hash[Int].new(7⏏5pairs.grep(-> (:key($), :value($val)) {$␤»
SmokeMachine____ m: my Int %a = a => 1, b => Int; my Int %b = %a.pairs.grep(-> (:key($), :value($val)) {$val ~~ Any:D}); dd %b
camelia rakudo-moar b00d92: OUTPUT«Hash[Int] %b = (my Int % = :a(1))␤»
BenGoldberg m: my Int %a = a => 1, b => Int; %a = Hash[Int].new(%a.pairs.grep(-> (:key($), :value($val)) {$val ~~ Any:D})); dd %a
camelia rakudo-moar b00d92: OUTPUT«Hash[Int] %a = (my Int % = :a(1))␤»
BenGoldberg m: my Int %a = a => 1, b => Int; %a := Hash[Int].new(%a.pairs.grep(-> (:key($), :value($val)) {$val ~~ Any:D})); dd %a 02:31
camelia rakudo-moar b00d92: OUTPUT«(my Int % = :a(1))␤»
SmokeMachine____ but why the .= doesn't work? 02:32
BenGoldberg m: my Int %a = a => 1, b => Int; %a{not defined *.value}:delete; dd %a
camelia rakudo-moar b00d92: OUTPUT«Hash[Int] %a = (my Int % = :a(1), :b(Int))␤»
BenGoldberg m: dd (not defined *.value) 02:33
camelia rakudo-moar b00d92: OUTPUT«Bool::False␤»
BenGoldberg m: False.not.say;
camelia rakudo-moar b00d92: OUTPUT«True␤»
BenGoldberg m: my Int %a = a => 1, b => Int; %a{*.value.defined.not}:delete; dd %a
camelia rakudo-moar b00d92: OUTPUT«WhateverCode object coerced to string (please use .gist or .perl to do that) in block <unit> at <tmp> line 1␤Hash[Int] %a = (my Int % = :a(1), :b(Int))␤»
BenGoldberg m: my Int %a = a => 1, b => Int; %a{%a.grep(*.value.defined.not).map: *.key}:delete; dd %a 02:34
camelia rakudo-moar b00d92: OUTPUT«Hash[Int] %a = (my Int % = :a(1))␤»
SmokeMachine____ but shouldn't the .= op work? 02:35
BenGoldberg Maybe? 02:38
BenGoldberg shrugs
SmokeMachine____ m: my Int %a = a => 1, b => Int; dd %a{* ~~ Any:D} 02:41
camelia rakudo-moar b00d92: OUTPUT«WhateverCode object coerced to string (please use .gist or .perl to do that) in block <unit> at <tmp> line 1␤Int %a = Int␤»
SmokeMachine____ this internally loops through all keys?
gfldex m: my Int %a = a => 1, b => Int; dd %a.pairs.grep(-> (:key($), :value($val)) {$val ~~ Any:D}); 02:43
camelia rakudo-moar b00d92: OUTPUT«(:a(1),).Seq␤»
gfldex .= should have worked
my Int $i = 42; $i.=new; dd $i; 02:44
m: my Int $i = 42; $i.=new; dd $i;
camelia rakudo-moar b00d92: OUTPUT«Int $i = 0␤»
gfldex Hash slices don't take a matcher, they want a list of keys 02:45
dalek c: 2ebe550 | gfldex++ | doc/Type/Proxy.pod6:
warn about breaking inmutability with Proxy
03:09
gfldex m: my class C is Proxy {}; 03:11
camelia ( no output )
gfldex m: my class C is Proxy {}; dd C.new;
camelia rakudo-moar b00d92: OUTPUT«Required named parameter 'FETCH' not passed␤ in block <unit> at <tmp> line 1␤␤»
skids m: my class C is Proxy {}; dd C.new(FETCH -> $ { 42 } 03:20
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unable to parse expression in argument list; couldn't find final ')' ␤at <tmp>:1␤------> 3 is Proxy {}; dd C.new(FETCH -> $ { 42 }7⏏5<EOL>␤ expecting any of:␤ postfix␤»
skids m: my class C is Proxy {}; dd C.new(FETCH -> $ { 42 })
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared name:␤ FETCH used at line 1␤␤»
skids m: my class C is Proxy {}; dd C.new(FETCH => $ { 42 })
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unable to parse expression in argument list; couldn't find final ')' ␤at <tmp>:1␤------> 3class C is Proxy {}; dd C.new(FETCH => $7⏏5 { 42 })␤ expecting any of:␤ infix stopper␤ …»
gfldex m: my class C is Proxy {}; dd C.new(FETCH => -> $ { 42 })
camelia rakudo-moar b00d92: OUTPUT«Required named parameter 'STORE' not passed␤ in block <unit> at <tmp> line 1␤␤»
skids m: my class C is Proxy {}; dd C.new(FETCH => -> $ { 42 }, STORE => -> $,$ { "OHAI".say; 42 })
camelia rakudo-moar b00d92: OUTPUT«42␤»
skids Hrm you cannot make a RO proxy? 03:21
gfldex you can
skids but you still need a STORE?
gfldex m: my class C is Proxy {}; my $container = C.new(FETCH => -> $ { 42 }, STORE => -> $,$ { "OHAI".say; 42 }); say $container; $container = 1; say $container 03:22
camelia rakudo-moar b00d92: OUTPUT«42␤1␤»
skids m: my class C is Proxy {}; my $container := C.new(FETCH => -> $ { 42 }, STORE => -> $,$ { "OHAI".say; 42 }); say $container; $container = 1; say $container 03:22
camelia rakudo-moar b00d92: OUTPUT«42␤OHAI␤42␤»
gfldex the constructor on Proxy demands :$STORE 03:23
skids That would seem to be, but why? 03:24
gfldex design decision 03:25
give what massive foodgun proxy is I'm not sad about it 03:26
TEttinger mmm foodgun 03:34
skids Did anyone ever figure out what :api<> is supposed to do for compunits? 03:37
gzix Hi.. I'm waiting for perl 6 a way long. When its going to possibly released 04:09
timotimo perl6.org/downloads/ - have fun 04:10
timotimo gzix: does that help? 04:22
gzix Can i use it for production 04:31
?
Anyway, thanks timotimo.. 04:32
gfldex you will encounter bugs
if that matters for what you do, we can not know
BenGoldberg m: role { method m { ... } } but role { method m { 42 } }.new; 05:58
camelia rakudo-moar b00d92: OUTPUT«Method 'm' must be implemented by <anon|57472960> because it is required by a role␤ in any compose_method_table at gen/moar/m-Metamodel.nqp line 2850␤ in any apply at gen/moar/m-Metamodel.nqp line 2860␤ in any compose at gen/moar/m-Metamodel.nqp l…»
BenGoldberg m: (role { method m { ... } } but role { method m { 42 } }).new; 05:59
camelia rakudo-moar b00d92: OUTPUT«Method 'mixin' not found for invocant of class 'Perl6::Metamodel::ParametricRoleHOW'␤ in block <unit> at <tmp> line 1␤␤»
BenGoldberg Strange error.
shantanu nine: Hi 07:34
nine m: say $*REPO.next-repo.installed 07:36
camelia rakudo-moar b00d92: OUTPUT«()␤»
nine m: say $*REPO.next-repo.next-repo.installed
camelia rakudo-moar b00d92: OUTPUT«()␤»
nine m: say $*REPO.next-repo.next-repo.next-repo.installed
camelia rakudo-moar b00d92: OUTPUT«(CompUnit::Repository::Installation::InstalledDistribution.new(prefix => "/home/camelia/rakudo-m-inst-2/share/perl6".IO(:SPEC(IO::Spec::Unix),:CWD("/home/camelia"))))␤»
nine Ah, there we go :)
m: say $*REPO.next-repo.next-repo.next-repo.name
camelia rakudo-moar b00d92: OUTPUT«perl␤»
nine m: say $*REPO.next-repo.next-repo.next-repo.installed[0].meta<provides>.keys 07:38
camelia rakudo-moar b00d92: OUTPUT«(Pod::To::Text NativeCall::Compiler::MSVC CompUnit::Repository::Staging experimental newline NativeCall::Compiler::GNU NativeCall NativeCall::Types Test TAP)␤»
nine shantanu: does this make sense?
m: say $*REPO.repo-chain.grep(CompUnit::Repository::Installable) 07:39
camelia rakudo-moar b00d92: OUTPUT«(inst#/home/camelia/.perl6 inst#/home/camelia/rakudo-m-inst-2/share/perl6/site inst#/home/camelia/rakudo-m-inst-2/share/perl6/vendor inst#/home/camelia/rakudo-m-inst-2/share/perl6)␤»
nine All Installable repos have the .installed method
shantanu ahh this is new for me. Whats $*REPO? 07:42
when I do a use lib 'lib 07:43
gfldex a way to solve the problems that arise when one tries to rely on filenames when it comes to modules
shantanu nine: when I do a use lib 'lib'; it seems to change the output of $*REPO 07:44
shantanu nine: isn't use lib 'lib'; supposed to append to the @INC list? 07:45
nine: Ahh I just realized, thats a handle! so you call next-repo on it to cycle through your repos. :) 07:48
shantanu m: say $*REPO.next-repo.next-repo.next-repo.installed[0] 07:49
camelia rakudo-moar b00d92: OUTPUT«CompUnit::Repository::Installation::InstalledDistribution.new(prefix => "/home/camelia/rakudo-m-inst-2/share/perl6".IO(:SPEC(IO::Spec::Unix),:CWD("/home/camelia")))␤»
shantanu nine: got it! Thanks for your help! 07:50
nine shantanu: $*REPO replaced @INC. Giving those repositories a say in where to look next for a module has some nice advantages. 07:59
shantanu nine: I can figured. I do see a lot more support for generator like code in p6 with lazy arrays and such. I am quiet happy to see that. :) 08:02
dalek osystem: dedc552 | (Shantanu Bhadoria)++ | META.list:
Add Printer::ESCPOS to ecosystem

See github.com/shantanubhadoria/p6-Printer-ESCPOS
08:12
osystem: 59a9227 | RabidGravy++ | META.list:
Merge pull request #235 from shantanubhadoria/master

Add Printer::ESCPOS to ecosystem
shantanu Thanks RabidGravy! This is my first port of one of my p5 modules to p6. Please review and send me your bricks, bats or flowers! 08:16
RabidGravy to be honest I haven't the faintest what it even does, but hey! :) 08:17
gfldex shantanu: please consider adding travis support 08:18
DrForr shantanu: Hi! (from FB - Jeff G.) Glad to see that bit of perl6 didn't put you out :)
RabidGravy though if it's for a "printer" the usefulness of travis testing is somewhat limited :) 08:19
shantanu Its for Receipt printers that you see at those retail outlets and such. 08:19
RabidGravy excellent stuff, does it actually get used in the wild? 08:20
shantanu The ones that print out most of your bills at restaurants.
shantanu Yeah I have got a few support requests for users around the world for my p5 module. Assuming there are 10-20 users for each one I have been contacted by I guess around 200-400 users. 08:21
RabidGravy (The last time I wrote any software to interact with an EPOS system was like twenty years ago ... in qbasic )
shantanu I use it at my job for my company's POS system as well. 08:22
gfldex shantanu: if you indent =begin code blocks, you will get an extra level of indentation in pod6 08:23
shantanu btw in case you are interested my p5 version of module has 650 lines of code, the p6 version around 200. All due to easier typechecking support :) 08:23
gfldex m: enum FOO(ESC => "\x1b"); dd FOO.enums; 08:24
camelia rakudo-moar b00d92: OUTPUT«Map.new((:ESC("\x[1b]")))␤»
shantanu gfldex: Thanks, so no need to indent stuff inside =begin code blocks? Sorry I have been using POD:Weaver exclusively for p5. I hope that comes to p6 soon. 08:25
gfldex we don't got any external pod parsers yet, it's all done by The Perl 6 Grammar 08:26
and the action class in question will not remove the indentation. The renderers we have right now do add indentation. So there will be to much of the good stuff in the end, 08:28
m: enum FOO(ESC => "\x1b"); dd FOO.enums; say "ESC" ∈ FOO; 08:29
camelia rakudo-moar b00d92: OUTPUT«Map.new((:ESC("\x[1b]")))␤False␤»
gfldex m: enum FOO(ESC => "\x1b"); dd FOO.enums; say ESC ∈ FOO;
camelia rakudo-moar b00d92: OUTPUT«Map.new((:ESC("\x[1b]")))␤False␤»
gfldex m: enum FOO(ESC => "\x1b"); dd FOO.enums; say ESC ~~ FOO;
camelia rakudo-moar b00d92: OUTPUT«Map.new((:ESC("\x[1b]")))␤True␤»
gfldex ∈ would make sense for enums
shantanu: you could implement stuff like <UPC-A UPC-E JAN13 JAN8 CODE39 ITF CODABAR CODE93 CODE128>, match with ~~ and generate parts of the error messages automatically 08:31
s//Enum/
shantanu without using a subtype? 08:32
gfldex: can you give me a example of the code? 08:33
gfldex m: enum BarcodeSystem(<UPC-A UPC-E JAN13 JAN8 CODE39 ITF CODABAR CODE93 CODE128>); say BarcodeSystem.enums.keys.map({'"'~...}).join(', ');
camelia rakudo-moar b00d92: OUTPUT«"CODE128", "UPC-E", "JAN8", "CODE39", "UPC-A", "CODABAR", "JAN13", "ITF", "CODE93"␤»
shantanu gfldex: How would I call a enum declared in a class from its object? I had some trouble exporting the enum type from my package 08:35
AlexDaniel /o\ ({'"'~$_~'"'})
m: enum BarcodeSystem(<UPC-A UPC-E JAN13 JAN8 CODE39 ITF CODABAR CODE93 CODE128>); say BarcodeSystem.enums.keys.map({““$_””}).join(', ');
camelia rakudo-moar b00d92: OUTPUT«“CODE128”, “UPC-E”, “JAN8”, “CODE39”, “UPC-A”, “CODABAR”, “JAN13”, “ITF”, “CODE93”␤»
AlexDaniel m: enum BarcodeSystem(<UPC-A UPC-E JAN13 JAN8 CODE39 ITF CODABAR CODE93 CODE128>); say BarcodeSystem.enums.keys.map({“"$_"”}).join(', '); # or this, if you insist
camelia rakudo-moar b00d92: OUTPUT«"CODE128", "UPC-E", "JAN8", "CODE39", "UPC-A", "CODABAR", "JAN13", "ITF", "CODE93"␤»
gfldex shantanu: didn't try that yet, may contain bugs 08:36
shantanu: later you do my `%barcodeSystemMap = UPC-A => 0,` what you would get for free with enums 08:37
AlexDaniel m: enum BarcodeSystem(<UPC-A UPC-E JAN13 JAN8 CODE39 ITF CODABAR CODE93 CODE128>); say ““{BarcodeSystem.enums.keys.join('”, “')}””;
camelia rakudo-moar b00d92: OUTPUT«“CODE128”, “UPC-E”, “JAN8”, “CODE39”, “UPC-A”, “CODABAR”, “JAN13”, “ITF”, “CODE93”␤»
shantanu I had a enum for barcodeSystem first declared within the class. But I got a bareword error when I tried to use the enum name like CODABAR in the object. 08:38
gfldex shantanu: enums are not used that often, so there may acutally be a few bugs left 08:39
shantanu gdflex: Thanks, I kinda see what you mean. it could shave off a few more lines if I declare a enum and then use it for validation and mapping as well. Would be cool if I could export the barewords from enum keys though. 08:40
gfldex shantanu: some golfing would be very welcome
does camelia understand multi-file gists? 08:41
AlexDaniel no 08:48
gfldex: how would it know which file to execute? :) 08:49
that's a good question actually, something I can add to committable
RabidGravy gfldex, au contraire - I use enumerations a lot 08:50
gfldex AlexDaniel: find the one with a sub MAIN
AlexDaniel gfldex: okay, that would work. But what about gists without MAIN?
gfldex complain for multi gists without a MAIN 08:51
shantanu: you may want to define your own exception types by subclassing from Exception. Not sure if that makes sense for Printer::ESCPOS tho. 08:53
m: sub f(*@a where {$_.any ~~ Int}){say @a}; f(42); f(<a>); 08:55
camelia rakudo-moar b00d92: OUTPUT«[42]␤Constraint type check failed for parameter '@a'␤ in sub f at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
gfldex shantanu: ^^^ you can have the type constraint for slurpy arrays in the signature if you like
m: sub f(*@a where {$_.all ~~ Int}){say @a}; f(42); f(<a>);
camelia rakudo-moar b00d92: OUTPUT«[42]␤Constraint type check failed for parameter '@a'␤ in sub f at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
gfldex it's .all ofc 08:56
gfldex m: Bool $a; say $a.Int; 08:57
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Two terms in a row␤at <tmp>:1␤------> 3Bool7⏏5 $a; say $a.Int;␤ expecting any of:␤ infix␤ infix stopper␤ statement end␤ statement modifier␤ stateme…»
gfldex m: my Bool $a; say $a.Int;
camelia rakudo-moar b00d92: OUTPUT«(Bool)␤»
gfldex m: my Bool $a = True; say $a.Int; 08:58
camelia rakudo-moar b00d92: OUTPUT«True␤»
gfldex m: my Bool $a = True; print $a.Int;
camelia rakudo-moar b00d92: OUTPUT«True»
gfldex m: my Bool $a = True; dd $a.Int; 08:59
camelia rakudo-moar b00d92: OUTPUT«Bool::True␤»
gfldex m: my Bool $a = True; dd $a.Numeric; 09:00
camelia rakudo-moar b00d92: OUTPUT«1␤»
shantanu gfldex: Thanks! I was looking for constraint on slurpys. I think some of the documentation suggests it can't be done
gfldex doing it the easy way is NYI 09:01
shantanu gfldex: Yeah I thought $a.Int would work but there is a bug there. I am using $a.value, whats the difference between .value and .Numeric ? 09:10
gfldex Bool is an enum and the default type of enum values happens to be Int. You went lucky. :) 09:11
El_Che morning
shantanu gfldex: So that could change in future? Would I be better of with .Numeric? 09:13
RabidGravy If you know it is an Int then it's fine 09:14
but don't rely on other people's enumerations being Ints
gfldex shantanu: for bool .Numeric will work (I checked the source). A fix for that bug is easy. 09:16
dalek c: 4abb361 | gfldex++ | doc/Type/Signature.pod6:
show how to constraint slurpy arguments
09:17
shantanu I see that th documentation for Bool mentions numeric explicitly, I will switch to that. Thanks a lot for your suggestion. 09:19
gfldex yw 09:20
shantanu gfldex Is there a standard inbuilt exception name to throw if when method params provided are invalid? 09:25
nine shantanu: sounds like you want to beef up your method's signature?
shantanu nine: Hey, I am not sure what that means actually. 09:27
nine: I just wanted to throw the standard exception in case of invalid params if there is such a exception class. I have params whose validity is dependent on value of other params. 09:28
nine shantanu: you really want to put all parameter checking into your method's signature.
m: sub foo($a, $b where $b ne $a) { }; foo("a", "b"); foo("a", "a");
camelia rakudo-moar b00d92: OUTPUT«Constraint type check failed for parameter '$b'␤ in sub foo at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
nine shantanu: ^^^ 09:29
RabidGravy ooh Fedora has just given me rakudo 2016-07
nine RabidGravy: you could have had that with openSUSE several weeks ago ;)
shantanu nine: ohh yes, it thats the idea, if my method code can only include the tasks it needs to do and I delegate all the constraint checking to type definitions, it should lead to easier understanding of my code. 09:30
RabidGravy all good stuff
shantanu m: sub foo($a, $b where $b ne $a) { }; foo("a", "a"); 09:37
camelia rakudo-moar b00d92: OUTPUT«Constraint type check failed for parameter '$b'␤ in sub foo at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
shantanu m: sub foo($a, $b where $b ne $a) { }; foo("a", "b");
camelia ( no output )
shantanu m: '3' ∈ <3 a b> 09:46
camelia rakudo-moar b00d92: OUTPUT«WARNINGS for <tmp>:␤Useless use of "∈" in expression "'3' ∈ <3 a b>" in sink context (line 1)␤»
shantanu m: say '3' ∈ <3 a b> 09:47
camelia rakudo-moar b00d92: OUTPUT«False␤»
shantanu m: say 'a' ∈ <3 a b>
camelia rakudo-moar b00d92: OUTPUT«True␤»
shantanu Is that a bug?
shantanu m: say 'a' ∈ ('3', 'a', 'b') 09:48
camelia rakudo-moar b00d92: OUTPUT«True␤»
jnthn No
m: say ('3', 'a', 'b')
camelia rakudo-moar b00d92: OUTPUT«(3 a b)␤»
jnthn m: say ('3', 'a', 'b').perl
camelia rakudo-moar b00d92: OUTPUT«("3", "a", "b")␤»
jnthn m: say <3 a b>.perl
camelia rakudo-moar b00d92: OUTPUT«(IntStr.new(3, "3"), "a", "b")␤»
gfldex m: sub foo($a, $b where $b ne $a) { }; foo("a", "a"); CATCH { default { say .^name } }; 09:49
camelia rakudo-moar b00d92: OUTPUT«X::AdHoc␤»
gfldex LTA exception name :) 09:49
shantanu: complete list: docs.perl6.org/type-exceptions.html 09:50
shantanu gfldex: Thanks :)
lizmat m: die; CATCH { dd $_ } # it's the default from "die" 09:51
camelia rakudo-moar b00d92: OUTPUT«X::AdHoc.new(payload => "Died")␤Died␤ in block <unit> at <tmp> line 1␤␤»
shantanu jnthn: Thanks, I learnt about IntStr! :) 09:52
AlexDaniel m: say ~IntStr.new(42, ‘sixty-nine’) 09:56
camelia rakudo-moar b00d92: OUTPUT«sixty-nine␤»
AlexDaniel m: say +IntStr.new(42, ‘sixty-nine’)
camelia rakudo-moar b00d92: OUTPUT«42␤»
TheLemonMan hmm, #127012 should be referenced in #128803 as it has the same root cause 10:00
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127012
Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128803
AlexDaniel TheLemonMan: and this root cause is? 10:03
TheLemonMan AlexDaniel, irclog.perlgeek.de/perl6/2016-08-16#i_13034286 10:04
shantanu DrForr: Hi Jeff! Yeah I am enjoying it so far. :) 10:09
AlexDaniel TheLemonMan: I've added a reference 10:10
DrForr Just glad to see that you weren't dissuaded. To those ont eh inside that's just a harmless bit of golfing, but if you don't understand the language I'm sure it can seem to be a WAT. 10:11
*on the 10:12
moritz .botsnack 10:26
yoleaux :D
synopsebot6 om nom nom
moritz goes back to roaming-imposed awayness
gfldex shantanu: FYI github.com/rakudo/rakudo/commit/a4140a3ec6 10:52
masak m: sub infix:«->»(\lhs, \rhs) { "blah" }; say 1 -> 2; say 3 10:56
camelia rakudo-moar b00d92: OUTPUT«1␤3␤» 10:57
masak TimToady: is the above what you'd expect? 10:57
lizmat m: sub infix:«-->»(\lhs, \rhs) { "blah" }; say 1 --> 2; say 3 10:58
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Confused␤at <tmp>:1␤------> 3nfix:«-->»(\lhs, \rhs) { "blah" }; say 17⏏5 --> 2; say 3␤ expecting any of:␤ postfix␤ statement end␤ statement modifier␤ stat…»
masak (I know why it happens, with <infixstopper> and stuff. just wondering if the behavior is sane enough)
lizmat: the `>>>` parses as `>>` and then spurious `>`
oh, I'm wrong 10:59
sorry, misconfigured terminal
lizmat ok :-)
masak all my »s expand into >>s :/
haven't figgered out why yet
lizmat I just added two hyphens in two places taking your example
masak aye 11:00
lizmat I mean, it would be nice if this would work: 11:01
lizmat m: my @a = ^10; for @a --> Str { .Str } 11:01
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Missing block␤at <tmp>:1␤------> 3my @a = ^10; for @a7⏏5 --> Str { .Str }␤ expecting any of:␤ block or pointy block␤»
lizmat m: my @a = ^10; for @a -> \x --> Str { x.Str }
camelia ( no output )
lizmat I mean, in a sub signature you can also just specify the return sig 11:02
specifying a non-Slip return sig, can make the loop go faster 11:03
m: my @a = ^1000; for ^1000 { @a.map( ->\x --> Str { x.Str } }; say now - INIT now 11:05
camelia rakudo-moar b00d92: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unable to parse expression in argument list; couldn't find final ')' ␤at <tmp>:1␤------> 3 ^1000 { @a.map( ->\x --> Str { x.Str } 7⏏5}; say now - INIT now␤»
lizmat m: my @a = ^1000; for ^1000 { @a.map: ->\x --> Str { x.Str } }; say now - INIT now
camelia rakudo-moar b00d92: OUTPUT«0.8080561␤»
lizmat m: my @a = ^1000; for ^1000 { @a.map: ->\x --> Str { x.Str } }; say now - INIT now 11:06
camelia rakudo-moar b00d92: OUTPUT«0.8038859␤»
lizmat oops, pasto
m: my @a = ^1000; for ^1000 { @a.map: *.Str }; say now - INIT now
camelia rakudo-moar b00d92: OUTPUT«0.994976␤»
lizmat m: say 0.8080561 / 0.994976
camelia rakudo-moar b00d92: OUTPUT«0.81213627␤»
masak I don't know how big the audience is for this, but here's the current Q type hierarchy for 007: gist.github.com/masak/ab28db9201e8...ea9ae7ad51 12:11
(I just compiled it in tree form because I'm toying with new text for the 007 web page)
DrForr masak: Useful for me, thanks. 12:13
masak cool.
keep in mind that 007 is both inspired by and distinct from Perl 6. 12:14
we try to steer close to Perl 6 syntax and semantics, but we also try to be aggressively lazy when it serves us :)
DrForr Yeah, there are some obvious differences, and I'm taking a slighty different tack; mostly pragmatic. 12:15
masak remind me -- you're taking a different tack, with... what? :) 12:16
DrForr One moment. 12:17
DrForr github.com/drforr/perl6-Perl6-Tidy 12:17
masak nice 12:18
looks like we have enough philosophical overlap that it would be interesting to have a chat at some point 12:19
DrForr I'm just a *bit* busy at YAPC but *please* grab me.
masak :) 12:25
El_Che if someone with knowledge of the wealth of error could have a look at github.com/nxadm/syntastic/blob/ma...-perl6.md. I think I catch and hightlight most perl6 -c errors I have found, but I want to be as complete as possible before pushing perl 6 support upstream (syntastic, a vim linter) 12:33
screenshot: github.com/nxadm/syntastic/blob/ma...-perl6.png 12:36
lizmat wow 12:37
El_Che lizmat: once perl6 -c can spit out json errors there are more possibilities for multi line errors (so far undeclared routine/name is the only ones I have found) 12:40
lizmat: I am working on an vim-perl6 howto that include all the plugins needed for perl6 support, but I was waiting untill this was pushed upstream to publish it 12:43
El_Che so far I have sane vimrc defaults as a starting point, vim-perl (syntax highlighted), vim-airline (status bar), tabular (align text), vim-figitive (git support),vim-markdown (for the readmes), the syntastic fork (for now) with perl6 support, and youcompleteme with fuzzy autocomplete taht works great 12:45
in the future, maybe the autocomplete could be less fuzzy and more perl6 specific, but so far it has been good 12:46
lizmat El_Che++
El_Che I could publish it now and point people to the fork, but I think it's better to wait, no? 12:48
lizmat release early release often! :-) 12:49
[Coke] gfldex: telling people "they will encounter bugs" when they ask "is it ready for production" is unhelpfully true.
(all software has bugs)
El_Che I think that DrForr Perl6::Tidy would make a great base for a plugin for vim or atom 12:51
gfldex [Coke]: do you think it would be better to see folk walk away and never return because we promised what we can't hold?
El_Che (in the case of atom, it's just a config pointing to the rightexecutable)
DrForr I'm getting close to being able to roundtrip; the problem mainly is that the official grammar doesn't put a lot of the barewords into terms where they can be used, although I understand why. 12:52
[Coke] gfldex: I'm not saying "don't say we have bugs", but that marketing matters, even at this level. 12:52
gfldex [Coke]: if being good at marketing requires me to give visitors advice that may cause them harm, then I will have to refuse to be good at marketing. 12:54
cat298 hey I am trying to work on two libraries at the same time, but "perl6 -Ilib" only seems to be loading 1, the other is the version panda installed 12:55
unmatched} cat298: -Ilib just adds ./lib to the search paths for libraries 12:56
cat298: are both of them in ./lib? 12:57
cat298 unmatched: I know, but the path is supposed have precedence when added via -Ilib, correct?
unmatched: yes, both are in ./lib
El_Che DrForr: a good autoformatter (besides tabular that works nicely on part of the file) is the only thing missing from my list
TheLemonMan hmm, is there any documentation about MoarVM call frames ? 12:59
nine cat298: precedence over what? 13:00
unmatched} cat298: yeah, and it works for me. What is your perl6 -v ? gist.github.com/zoffixznet/281a453...e78241c03f
nine: over installed modules
nine unmatched}: yes, it does
unmatched} TheLemonMan: maybe there's something in here? github.com/MoarVM/MoarVM/tree/master/docs 13:02
cat298 unmatched: well I am using Ilib successfully to modify one library I am developing
unmatched: but basically I am trying to add SSL/TLS support to http::client, and that means screwing around with the OpenSSL module, and the OpenSSL module seems to be loaded from Panda and not the lib directory 13:03
TheLemonMan unmatched}, doesn't seem so, but I found an useful post on 6guts 13:04
unmatched} cat298: works fine with two modules too. Not sure what to suggest to you. Maybe check you got the paths right. gist.github.com/zoffixznet/98c1e0f...f81a40cd06
jnthn TheLemonMan: The data structures in the MoarVM header files are commented with what stuff is. frame.h is the important one in this case. 13:05
nine cat298: run as RAKUDO_MODULE_DEBUG=1 perl6 13:05
cat298 unmatched}: yeah but the issue is that the other module is 2 levels down in dependencies... so IO::Net::Socket is loaded from Panda, but I want to load OpenSSL from my local version
nine cat298: that will give you loads of debug output
cat298: if you gist the debug output, I may have a look at it 13:06
dalek -six-help: 89e02b5 | coke++ | summary.p6:
care about a few more tags
13:09
cat298 nine: this is what I have: gist.github.com/clearairturbulence...a3180835f6 13:10
I know that it's not loading the other libraries because I commented out a ';' and I am not getting a syntax error 13:13
I am not loading the OpenSSl one that is
I just moved IO::Socket::SSL source into my lib to see if that would work to no avail 13:14
nine Hm....I don't see any IO::Net::Socket at all in this output 13:15
cat298 nine: sorry, I moved it after that gist, I'll create a new one 13:16
nine: gist.github.com/clearairturbulence...cb5352be54 13:17
nine Still no IO::Net::Socket? 13:19
unmatched} Isn't it IO::Socket::SSL ? 13:20
oH
cat298 yeah it's IO::Socket::SSL
TheLemonMan jnthn, thanks, I still haven't managed to find out why sometimes the call-chain breaks up and doesn't go all the way down to <eval> 13:21
needs moar printfs!
nine Oh. I think we do not detect that the repository chain changed since we compiled that dependency as we never look at the Repository::FileSystem's content. 13:23
jnthn TheLemonMan: It may be a failure to keep ->caller in place in some situation 13:24
DrForr El_Che: Formatting is the goal behind Perl6::Tidy, yes. Most of the stumbling blocks now are caused (as I think I alluded to) the fact that the AST is a bit random about what matches and doesn't match whitespace, and keywords aren't always present in the final AST (though arguably they shouldn't be, as the name of the rule/token tells you wnat should be there - it's redundant) 13:29
cat298 so is there a way to prevent a panda library from loading? I asked on stackoverflow about uninstalling/removing and haven't gotten a response yet 13:31
tadzik panda library?
cat298 tadzik: sorry I mean a library installed via panda 13:32
tadzik well, libraries don't just load themselves, if you don't want it to load, don't load it :) 13:33
El_Che DrForr: I hope you get it working. For bigger project it could be something like gofmt 13:34
nine cat298: gist.github.com/niner/b39258032f70c083e57b
cat298 nine: thank you! that's incredibly useful 13:41
DrForr Oh, I will, it's just slogging. 13:43
cat298 okay, that works, now it's loading the local libraries first 13:45
ugexe cat298: sometimes you have to delete the .precomp/ directory for your changes to take affect 13:48
at least when you do things like dynamically load another module
ugexe maybe there should be a flag for perl6 that says "precompile or re-precompile everything" 13:53
cat298 ugexe: what's the difference syntax-wise between dynamically and statically loading a library? 13:54
TheLemonMan jnthn, yeah, some crude debugging doesn't show any place where ->caller is nulled though 13:55
ugexe cat298: I havent looked at your code, but for HTTP::UserAgent, Net::HTTP, and LWP::Simple you dynamically load IO::Socket::SSL ala `if (try require ::("IO::Socket::SSL")) !~~ Failure { <setup ssl> }`
nine ugexe: sounds like you want no precompilation; in the module that dynamically loads libraries? 13:57
cat298: dynamically means at runtime 13:58
ugexe nine: no, more so I don't have to delete .precomp manually (not that i've had to lately). so I can always test/benchmark the full lifecycle of a run 13:58
ugexe but also if this type of issue comes up again its easier to say "try it with --refresh-precomp" or whatever 14:00
TheLemonMan nah, screw that, I found where it goes legs up, now it's time to understand /why/ 14:01
cat298 yeah I just got a segfault trying to run it, next time I ran the command it worked fine 14:03
ugexe cat298: if you delete $PROJECT_DIR/lib/.precomp and $HOME/.perl6 and *then* run it, does it segfault once and then run fine after? 14:09
cat298 ugexe: not sure, I haven't been able to recreate it. It happened before I messed with uninstalling a panda library and removing .precomp directories 14:12
ugexe I ask because last month I had a situation where tests would fail *only* during the first run, but all subsequent runs would pass. If I deleted the .precomp directories the cycle would be restarted 14:14
TheLemonMan hmm, committable doesn't work when queried, does it ? 14:49
AlexDaniel TheLemonMan: it doesn't, but camelia does. If you want to do a lot of committable queries then feel free to join #whateverable 14:54
El_Che greetings from the beach 14:56
[Coke] hio
El_Che we live in the future 14:57
a device to connect to 40y old technology ;) 14:58
dalek c: d1abcae | (Zoffix Znet)++ | xt/trailing (2 files):
Use consistent file naming scheme
15:46
c: dc25e76 | (Zoffix Znet)++ | Makefile:
Update makefile to reflect tests moved from t/ to xt/
dalek c: 1154b64 | (Zoffix Znet)++ | doc/Programs/00-running.pod6:
Document PERL6_TEST_TIMES env var

Fixes #738
15:58
dj_goku El_Che: well the internet is older than that too. don't forget that. :D 16:11
unmatched} It's pretty annoying that Pod::To::BigPage still has that MAST::Frame issue. Doesn't seem to even install with --force anymore :/ 16:26
unmatched} Oh it did install, but you get Mast::Frame error when pod2onepage runs 16:28
unmatched} Seems `make html-nohighlight` avoids the issue 16:29
kyclark Is there an easy way to see where a module is installed, e.g., the “CSV::Parser” I just used “panda” to install? 16:36
timotimo you can make it cause an exception in the code 16:37
like, give it bogus parameters or something
other than that, grab yourself a sub or method object from the module and grab its file 16:38
m: say &say.filename
camelia rakudo-moar b08527: OUTPUT«Method 'filename' not found for invocant of class 'Sub'␤ in block <unit> at <tmp> line 1␤␤»
timotimo m: say &say.^methods
camelia rakudo-moar b08527: OUTPUT«(<anon> <anon> <anon> soft <anon> <anon> yada perl <anon> onlystar candidates unwrap wrap <anon> <anon> package leave <anon> <anon> cando <anon> <anon> <anon> <anon> multi <anon> <anon> add_phaser has-phaser phasers assuming WHY set_why perl of <anon> retu…»
timotimo m: say &say.^methods.grep(*.name ne '<anon>')
camelia rakudo-moar b08527: OUTPUT«(soft yada perl onlystar candidates unwrap wrap package leave cando multi add_phaser has-phaser phasers assuming WHY set_why perl of returns fire_phasers has-phasers count line perl file of ACCEPTS signature Str arity returns new outer static_id)␤»
timotimo m: say &say.file
camelia rakudo-moar b08527: OUTPUT«gen/moar/m-CORE.setting␤»
timotimo hm. i wonder if that gives the right file name for installed stuff
timotimo star-m: use JSON::Tiny; say &to-json.file 16:39
camelia star-m 2016.04: OUTPUT«sources/9B467EEF9267A777BB53BAA2F19BE2C9D756BEED (JSON::Tiny)␤»
timotimo ah, yeah
unmatched} m: $*REPO.^methods.say 16:40
camelia rakudo-moar b08527: OUTPUT«(BUILD writeable-path can-install name upgrade-repository install uninstall files resolve need resource id short-id loaded installed precomp-store precomp-repository path-spec prefix load source-file repo-chain new perl gist Str WHICH next-repo)␤»
timotimo wellll, i don't know anything about $*REPO. which is dumb, because it's pretty awesome and nine has been doing some impressive work
but i was the one who wrote the code to make .file and .line work on subs and such, so ... :P 16:41
nine gist.github.com/niner/06792102587a79940294 16:42
unmatched} Is there some proper way to link to references in our docs? The L«C<todo>|/language/testing#index-entry-todo-todo($reason,_$count_=_1)» looks awfully fragile
unmatched} huggable: module source :is: This script shows module source: gist.github.com/niner/06792102587a79940294 16:42
huggable unmatched}, Added module source as This script shows module source: gist.github.com/niner/06792102587a79940294
nine m: say $*REPO.need(CompUnit::DependencySpecification.new(:short-name('Test'))).prefix;
camelia rakudo-moar b08527: OUTPUT«Method 'prefix' not found for invocant of class 'CompUnit'␤ in block <unit> at <tmp> line 1␤␤»
nine m: say $*REPO.need(CompUnit::DependencySpecification.new(:short-name('Test'))).repo.prefix; 16:43
camelia rakudo-moar b08527: OUTPUT«"/home/camelia/rakudo-m-inst-2/share/perl6".IO␤»
gfldex unmatched}: you have to provide an empty X<|symbolic-name> with a symbolic name for the target 16:58
unmatched} gfldex: like L«C<todo>|X<|todo>» ? 17:01
unmatched} tries
gfldex i would pull the X<> out and put it in from of the paragraph 17:02
that way you avoid having a sentence cut in halve and force the reader to scroll
gfldex depends on context ofc 17:02
unmatched} That just makes it /type/X$LESS-THAN_SIGN$VERTICAL_LINEtodo$GREATER-THAN_SIGN 17:03
gfldex what are you trying to link to? 17:07
unmatched} I want to link from elsehwere to here: docs.perl6.org/language/testing#in...t_%3D_1%29
(it's a "Reference" link)
gfldex then you put X<|todo (testing)> in from of the paragraph. That creates a link called /language/testing#test_(testing). 17:10
err /language/testing#todo_(testing) 17:11
unmatched} Doesn't that create the anchor point so I could make a link elsewhere to link to this point, where X|todo (testing)> is defined? I don't want to create an anchor, I want to create an <a href="...."> except without writing stuff like L«C<throws-like>|/language/testing#index-entry-throws-like-throws-like(%24code%2C_%24expected-exception%2C_%24description%3F%2C_*%2525matcher)» 17:13
gfldex if you don't like the lenthy anchor your will have to create a short one 17:15
dalek c: 4706f6e | (Zoffix Znet)++ | / (2 files):
Colourise a > code as a link

Otherwise you can't tell that it's a link at all, as it's coloured same as plain <code>
17:25
dalek c: b6cb311 | (Zoffix Znet)++ | doc/Language/testing.pod6:
Add Test.pm6 routine reference for easier navigation

Fixes #737
17:29
dalek c: 3ae95b0 | (Trey Harris)++ | doc/Language/functions.pod6:
Fix typo in functions.pod6

The typo causes the example code block to not be formatted.
17:37
c: 02447b3 | Altai-man++ | doc/Language/functions.pod6:
Merge pull request #840 from treyharris/typo-fix

Fix a typo in functions.pod6
[Coke] Could we theoretically construct a list of core devs? Is it just "people who have committed to rakudo/nqp/moarvm" in the past <timeperiod> ? 17:38
[Coke] asking for tail end of github.com/perl6/doc/issues/835 17:39
unmatched} You mean programmatically? You can probably just steal code from github.com/rakudo/rakudo/blob/nom/...butors.pl6 17:43
If you make it ignore commits that were merged in, you'll get just the people with the commit bit (I believe)
[Coke] I'm asking if that's the right list to answer the question on the ticket. 17:45
unmatched} No idea. If the context of making spec decisions, I wouldn't want to be on the list: (a) I don't know anything, (b) I don't want people randomly come up to me and ask questions, just 'cause they see me awake 17:51
s/If/In/; 17:52
So maybe the target should be #perl6-dev or RT *shrug*
jdv79 how can anyone see you awake? 17:54
unmatched} jdv79: because I'd be talking 17:55
nine Does anyone know a dist with a somewhat largish lib/ directory? I.e. many modules? 18:03
unmatched} If you clone github.com/moritz/perl6-all-modules there's probably some clever grep | sort combination that'll let you find one 18:05
jnthn nine: github.com/perl6/gtk-simple/tree/m...GTK/Simple may be big enough? 18:06
unmatched} supernovus/perl6-timezone seems to standout 18:07
nine jnthn: yep, GTK::Simple looks like a good benchmark :) 18:08
unmatched} There's a gazillion of modules: github.com/supernovus/perl6-timezo...eZone/Zone
nine A quarter of a second to hash all of GTK::Simple's lib. That's better than I expected. I wonder if it's good enough. 18:12
dalek c: 4cc1280 | (Zoffix Znet)++ | doc/Language/testing.pod6:
Simplify index entry for throws-like

The anchor URL for the complex version does not work in Firefox.
Fixes #736
18:14
jnthn nine: When do we need to do it? 18:20
(or "would we need to do it", given you're pondering something... :)) 18:23
nine jnthn: once for every FileSystem repository as soon as the first module is loaded. I need to know whether I have to re-check dependencies since the last time we did. Installation repos get their identity from the installed dist for that purpose. 18:24
Oh it's actually only 0.085 seconds when measured with now - INIT now instead of time perl6
jnthn nine: Only affects -Ilib? 18:25
nine yes 18:26
So usually you'll only pay for the dist you're developing
jnthn *nod* 18:27
nine One of these days I should really start *using* Perl 6 on a larger scale. Some real world testcases would make things much simpler at times :) 18:28
jnthn has spent his day mostly fixing things from a larger scale test case :) 18:34
dalek c: d81e5a7 | (Zoffix Znet)++ | doc/Language/testing.pod6:
Minor grammar corrections
18:37
kyclark Reading perl6advent.wordpress.com/2014/12/...of-perl6/, he talks about accidentally find a StrDistance object. Can I create one (intentionally) — how? 18:42
timotimo m: say StrDistance
camelia rakudo-moar b08527: OUTPUT«(StrDistance)␤»
timotimo s: StrDistance new
SourceBaby timotimo, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Unable to parse expression in argument list; couldn't find final ')' ␤at -e:6␤------> put sourcery( StrDistance⏏ new )[1];␤ expecting any of:␤ infix␤ infix stopper␤
timotimo how do i use this again ...
s: StrDistance, new
SourceBaby timotimo, Something's wrong: ␤ERR: ===SORRY!=== Error while compiling -e␤Undeclared routine:␤ new used at line 6 (in Perl 6 please use method call syntax instead)␤␤
timotimo s: StrDistance, "new"
SourceBaby timotimo, Sauce is at github.com/rakudo/rakudo/blob/b085.../Mu.pm#L80
timotimo well, not quite :) 18:43
s: StrDistance
SourceBaby timotimo, Something's wrong: ␤ERR: Cannot resolve caller sourcery(StrDistance); none of these signatures match:␤ ($thing, Str:D $method, Capture $c)␤ ($thing, Str:D $method)␤ (&code)␤ (&code, Capture $c)␤ in block <unit> at -e line 6␤␤
timotimo ...
github.com/rakudo/rakudo/blob/nom/...istance.pm - there we go
all you have to do is give it a :before and an :after
m: my $d = StrDistance("hello", "world"); say $d; say +$d; 18:44
camelia rakudo-moar b08527: OUTPUT«Cannot find method 'StrDistance' on object of type List␤ in block <unit> at <tmp> line 1␤␤»
timotimo m: my $d = StrDistance.new("hello", "world"); say $d; say +$d;
camelia rakudo-moar b08527: OUTPUT«Default constructor for 'StrDistance' only takes named arguments␤ in block <unit> at <tmp> line 1␤␤»
timotimo m: my $d = StrDistance.new(:before<hello>, :after<world>); say $d; say +$d; 18:44
camelia rakudo-moar b08527: OUTPUT«StrDistance.new(before => "hello", after => "world")␤4␤»
unmatched} s: StrDistance, "new"
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/b085.../Mu.pm#L80
timotimo what's wrong with my brain now ...
unmatched} s: StrDistance, "new", \()
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/b085.../Mu.pm#L81
timotimo unmatched}: it doesn't declare its own constructor
unmatched} timotimo: what did you want to see the source of? 18:45
timotimo i wanted to get the source for the class itself
unmatched} Ah, it don't do that
kyclark Very cool! Thanks.
unmatched} s: StrDistance, "BUILD" 18:48
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/b085...ance.pm#L6
unmatched} tehe... hax :)
jdoege given: my @keys = < 'a' 'b' 'c' >; my @values = < 1, 2, 3 >; then my %hash{@keys} = @values; throws an error: Invalid hash shape; type expected, while my %hash; %hash{@keys} = @values; works as expected. Reason? 19:24
unmatched} jdoege: the < ... > operator splits on whitespace, that's probably not what you meant 19:25
m: my @keys = < 'a' 'b' 'c' >; dd @keys
camelia rakudo-moar 739d1a: OUTPUT«Array @keys = ["'a'", "'b'", "'c'"]␤»
unmatched} m: my @values = < 1, 2, 3 >; dd @values 19:26
camelia rakudo-moar 739d1a: OUTPUT«Array @values = ["1,", "2,", IntStr.new(3, "3")]␤»
harmil_wk My eyes want to read ["'a'", "'b'", "'c'"] as a list of three single-letter strings, so badly!
jdoege sorry, I mistakenly typed commas in my values list. Issue remains.
unmatched} jdoege: and my %hash{...} sets the type of keys. And you're trying to pass it a list 19:27
jdoege restated: given: my @keys = < 'a' 'b' 'c' >; my @values = < 1 2 3 >; then my %hash{@keys} = @values; throws an error: Invalid hash shape; type expected, while my %hash; %hash{@keys} = @values; works as expected. Reason?
[Coke] you can't do "my %hash{%keys}"
you want my %hash; %hash{@keys} =
you're my'ing the container there. 19:28
jdoege I didn't I did %hash{@keys} which in perl 5 was called a hash slice.
unmatched} m: my @keys = < 'a' 'b' 'c' >; my @values = < 1 2 3 >; my %hash = @keys Z=> @values
camelia ( no output )
unmatched} m: my @keys = < 'a' 'b' 'c' >; my @values = < 1 2 3 >; my %hash = @keys Z=> @values; dd %hash
camelia rakudo-moar 739d1a: OUTPUT«Hash %hash = {"'a'" => IntStr.new(1, "1"), "'b'" => IntStr.new(2, "2"), "'c'" => IntStr.new(3, "3")}␤»
[Coke] jdoege: "this ain't perl 5"
but I can see where you'd expect that to keep working; pretty sure it does not. you can still do the slice, you just can't my it.
m: my @keys = < 'a' 'b' 'c' >; my @values = < 1 2 3 >; my %hash; %hash{@keys} = @values; 19:29
camelia ( no output )
unmatched} jdoege: you can still do the slice, but just as in Perl 5 you have to declare the hash first, so you do in Perl 6. The only difference in Perl 6 you can have keys to be other than strings, so the my %hash{something} syntax is the way to set that
[Coke] m: my @keys = < 'a' 'b' 'c' >; my @values = < 1 2 3 >; my %hash; %hash{@keys} = @values; dd %hash
camelia rakudo-moar 739d1a: OUTPUT«Hash %hash = {"'a'" => IntStr.new(1, "1"), "'b'" => IntStr.new(2, "2"), "'c'" => IntStr.new(3, "3")}␤»
jdoege I think my point may be missed. %hash{@keys} = @values; works just fine, but not as an initializer.
unmatched} jdoege: and you're attempting to set it not to a type, but to something nonsensical
harmil_wk Still re-quoting those letters
m: my %hash; %hash{<a b c>} = <1 2 3>; say %hash.perl
camelia rakudo-moar 739d1a: OUTPUT«{:a(IntStr.new(1, "1")), :b(IntStr.new(2, "2")), :c(IntStr.new(3, "3"))}␤»
[Coke] jdoege: you can't my that expression. right. 19:29
jdoege I see. 19:30
jdoege Is there a language reason for that? It seems like a nice way to initialize a hash. 19:30
unmatched} jdoege: yes, there is. I've just explained it 19:31
jdoege I'll try to understand what you wrote.
nine ugexe: the -Ilib issue cat298 reported should be fixed now 19:32
harmil_wk jdoege: I think the key problem is that you're thinking of "my %hash{@slice}" as meaning a slice operation. Perl 6 is trying to understand what kind of data type you're defining.
ugexe m: my @a = <a b c d>; my @b = (1,2,3,4); my %c andthen {.{@a} = @b}; say %c.perl
camelia rakudo-moar 848add: OUTPUT«{:a(1), :b(2), :c(3), :d(4)}␤»
unmatched} m: my %hash-typed{Int} = 42 => 43; %hash-typed.keys[0].WHAT.say 19:33
camelia rakudo-moar 848add: OUTPUT«(Int)␤»
harmil_wk ugexe: I've seen andthen a dozen times and never understood what the heck it was supposed to be for. Thank you!
unmatched} jdoege: ^ by default hashes stringify their keys, but above, I told it to use Int type instead
[Coke] that syntax means something else in six; so even if we wanted to use it to allow init by slice, we can't.
unmatched} m: class Foo { method Str {'meow'} }; my %h; my $obj1 = Foo.new; my $obj2 = Foo.new; %h{$obj1, $obj2} = 42, 72; say %h{$obj1} 19:35
camelia rakudo-moar 848add: OUTPUT«72␤»
unmatched} m: class Foo { method Str {'meow'} }; my %h{Foo}; my $obj1 = Foo.new; my $obj2 = Foo.new; %h{$obj1, $obj2} = 42, 72; say %h{$obj1} 19:35
camelia rakudo-moar 848add: OUTPUT«42␤»
jdoege unmatched: thanks. I'm beginning to understand. 19:36
unmatched} jdoege: ^ and here I'm using a custom object that always stringifies to the same value. So I got two of such objects and if I can use a typed hash to use those objects as keys
s/if I can/I can/;
AlexDaniel m: say @::"" 19:38
camelia rakudo-moar 848add: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '@' is not declared␤at <tmp>:1␤------> 3say 7⏏5@::""␤»
AlexDaniel m: my @ = 42; say @ 19:39
camelia rakudo-moar 848add: OUTPUT«[]␤»
AlexDaniel m: my @; say @::"" 19:40
camelia rakudo-moar 848add: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '@' is not declared␤at <tmp>:1␤------> 3my @; say 7⏏5@::""␤»
AlexDaniel how can I declare it? :D 19:41
Wiertek my @:: ; say @:: 19:44
m: my @:: ; say @::
camelia rakudo-moar 848add: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '@' is not declared␤at <tmp>:1␤------> 3my @:: ; say 7⏏5@::␤»
ItayAlmog Hey! So after writing some native compilers I decided to be naive and attempt to write a native compiler for Perl 6, But I have problem finding a reference to the lexical structure of the language :\ Does anyone know where I can find it? 19:52
unmatched} ItayAlmog: we have an Internals Course: edumentab.github.io/rakudo-and-nqp-...ls-course/
That's the only reference I know
ItayAlmog Thanks! I will take a look at it :) 19:53
Wiertek maybe You will find useful Desing Synopsis: design.perl6.org/ 19:53
[Coke] that's not a reference for the Perl 6 language. If you want to know the syntax of the language, your best bet is github.com/rakudo/rakudo/blob/nom/...rammar.nqp
(that's not) (either the design OR the internals course)
github.com/rakudo/rakudo/blob/nom/...r.nqp#L416 is probably a slightly better URL 19:54
Are you trying to make a perl 6 compiler that compiles down to machine code? That will be very challenging. 19:55
ItayAlmog Yes I am :) I know that, This is why I am trying to do it
harmil_wk [Coke]: Your definition of "very challenging" is either very dry humor or absurd understatement. :) 19:56
[Coke] harmil_wk: ¿porque no los dos?
best of luck.
ItayAlmog Thanks. I will update here once I will have something which works :D 19:57
harmil_wk [Coke]: Both is an acceptable answer 19:58
perlpilot ItayAlmog: you might want to update us on your progress before that ;)
[Coke] Do you have a goal here other than academic curiosity?
ItayAlmog yeah probably xD
[Coke] (we might have other suggestions on stuff to hack on if you're looking for just "faster" or "native executables") 19:59
ItayAlmog Not really, I just need something to do on my free time (I am still in high school so I have alot of free time :D) 20:00
perlpilot ItayAlmog: you know ... we have an implementation called niecza that could use some love. Maybe you could work on that instead? 20:01
ItayAlmog I think I will start with making the compiler and see how it goes, If I will see it turns to be too complicated for me to handle I might Go ahead and work on that instead :) 20:03
perlpilot ItayAlmog: what technology will you use for your compiler?
(programming language, tools, whatever)
ItayAlmog For right now I will probably use Java to generate an assembly file and will compile it to an executable using NASM and GCC on Ubuntu computer 20:04
This is how I wrote the other smaller compilers I made
But if I will ever get it working I will probably rewrite it in perl 6 and use it to compile the Perl 6 version :D 20:05
harmil_wk ItayAlmog: If you want to understand why people are hedging so much, look into docs.perl6.org/language/functions#..._Operators for just a taste of the dynamic lexical analysis needed for Perl 6 20:06
perlpilot ItayAlmog: Well, good luck and most importantly, have fun! :)
harmil_wk Also what perlpilot said
So, along the lines of overly ambitious, I was looking at macros... So, I'm trying to dig around in the guts of a parameter I got in a macro... 20:08
harmil_wk It's an AST, so great, I augmented AST to show me its innards, but I don't even know how to start unpeeling what's in a past because it's not actually Perl that I can introspect. 20:08
ItayAlmog Thanks! Yeah, I think I will start from the basics, Maybe I will get to the point of implementing the Object Oriented part
harmil_wk Is there a way to introspect a past from Perl, or do I have to use NQP primitives for that? 20:09
nine harmil_wk: you actually should be able to use at least some of Perl 6's introspection on it 20:10
harmil_wk For example:
nine harmil_wk: though I usually find it quicker to just read the class files in NQP's source code
harmil_wk m: use experimental :macros; use MONKEY-TYPING; augment class AST { method past { $!past } }; macro foo($a, $b) { dd $a.past; quasi { {{{$a}}} + {{{$b}}} } }; say foo(1,2)
camelia rakudo-moar 848add: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Method 'dispatch:<.?>' not found for invocant of class 'QAST::Op'␤at <tmp>:1␤»
harmil_wk I guess the meta-question I'm asking is, "can a macro that does anything non-trivial be backend-agnostic right now?" 20:15
nine I think so 20:18
masak did someone say macros? :) 20:32
masak they've bit-rotted a wee bit in Rakudo, I know 20:32
but yes, they could do a few things that were not entirely useless 20:33
I think strangelyconsistent.org/blog/macros...-d2-merged remains the most accurate compilation on what works and what doesn't 20:34
harmil_wk masak: In Lisp, for example, one very common desire is to introspect the parameters to a macro, see if any of them are simple constants that can be factored out and produce the resulting simpler expression. 20:39
Is there a way to ask, "is this parameter a simple constant" without getting backend-specific? 20:40
perlpilot harmil_wk++ (so ... you're going to help masak with macros from now on, right? ;-) 20:42
masak harmil_wk: I'm glad you ask
masak harmil_wk: could we get specific here? is -42 a simple constant? 20:42
masak (let's assume it's the original, un-overridden infix:<->) 20:43
harmil_wk Yes, I would think so. I'm thinking of something like "macro foo($a, $b) { quasi { {{{$a}}} + {{{$b}}} } }; foo(1,0);" where that zero could be dropped entirely if we could tell it's there.
masak er, prefix:<->
harmil_wk: maybe it'd be feasible to has an API surface to compile-time constant folding 20:44
have*
harmil_wk Okay, cool. I was just making sure I wasn 20:46
wasn't missing something that was obvious. 20:47
masak no, it's a good point
masak the reason I bring up -42 is that it's already been messing with some of My least Surprise in Perl 6 now and then 20:48
m: multi foo(0) { say "zero" }; multi foo(-1) { say "minus one" }; foo 0; foo -1
camelia rakudo-moar 848add: OUTPUT«zero␤minus one␤»
masak ...that used to not work, because `-1` was not considered a numeric constant 20:49
I'm glad it works now
jnthn++, probably :)
masak harmil_wk: another possible answer is that, in the end, it might not matter, because JIT might detect that 0 and discard it. 21:03
harmil_wk: since JIT is completely downstream of code gen, which is downstream of macros
harmil_wk masak: That's absolutely true, and the example was poor in that respect, but a good example would be more difficult to IRCify. Imagine that "+" was replaced with an arbitrary function for which the interesting constant was, say 10, not 0. 21:14
or "apple" 21:15
A good example of this is where you define a tree with number of children as a parameter. you probably want to special-case 2 as a parameter because you can take advantage of some algorithmic shortcuts in that case. 21:16
Lisp does this ALL OVER the place, or at least that's as I recall. My last CL exposure was about 10 years ago. 21:17
jnthn masak: Wouldn't you just be able to look at the QTree of the parameter to the macro and see it's a literal, in the stuff you're planning? 21:20
jnthn You can't really constant fold at that time though 21:20
masak jnthn: that's why I brought up -42, because "look to see if literal" isn't really enough in that case 21:21
jnthn Yeah. Thanks to post-declaration of subs, you can't in general constant fold until after the whole compilation unit has been seen. 21:22
masak good point
heh, this thing *in Perl 6* surprised me while I was developing 007: 21:23
m: say 4 + 5; sub infix:<+>($, $) { "OH NOES" }
camelia rakudo-moar 7d8046: OUTPUT«OH NOES␤»
masak :)
(you can post-declare already-declared operators, and they will be called)
jnthn yup 21:24
You can get yourself into some bizzare situations if you post-modify precedence though :P
masak wiat, what? that's insane :) 21:25
wait*
jnthn No doubt!
masak hm, yes, you *can* do that... 21:25
jnthn You "can", but the parser doesn't time travel. :)
dha Is that a bug or a feature? 21:26
[Coke] decommutes
jnthn That the parser doesn't time travel? I think you'll have to check in with physics on that :)
masak I'm not sure it falls on the bug/feature axis at all :P
dha: oh, my eval above? it's correct
dha No, the fact that the parser doesn't time travel. :-) 21:27
masak feature, I'd say
it'd violate one-pass parsing, which we take rather seriously
jnthn Perl 6 is rather strongly into one-pass parsing, so it's nothing but consistent :)
jnthn heh, masak beat me to it ;) 21:27
masak didn't even need to time travel to do it :P 21:28
masak 'night, #perl6 21:31
jnthn 'night, masak
harmil_wk Night masak
harmil_wk I think this is a macro bug or I'm not understanding AST.Str: 21:37
m: use experimental :macros; macro foo($a, $b) { say ~$a; quasi { {{{$a}}} + {{{$b}}} } }; say foo(1, 2)
camelia rakudo-moar 7d8046: OUTPUT«(1, 2)␤3␤» 21:38
harmil_wk "(1,2)" is not the first parameter to my function... 21:38
harmil_wk *s/function/macro/ 21:39
m: use experimental :macros; macro foo($a, $b) { say $a.WHAT; quasi { {{{$a}}} + {{{$b}}} } }; say foo(1, 2)
camelia rakudo-moar 7d8046: OUTPUT«(AST)␤3␤»
geekosaur harmil_wk, I think it's going wrong in ~. both $a and $b appear to stringify as that 21:54
harmil_wk I feel I'm doing something wrong as soon as my code starts with "use nqp; use experimental :macros; use MONKEY-TYPING;"
geekosaur so likely something wrong with AST.Str
harmil_wk geekosaur: yeah 21:55
I'm now digging in the NQP to try to figure out what
geekosaur and, well, you're supposed to feel like something is wrong when you do that :)
harmil_wk geekosaur: probably fair given that my very next operation is "augment class AST {...}" ;-) 21:56
geekosaur backs away slowly...
harmil_wk It's okay, as we discussed earlier, there's no time-travel...
El_Che Hi, I migrated my vim-syntastic fork with perl6 support to a plugin so it can be used with the regular syntastic install in the meanwhile (send a PR): github.com/nxadm/syntastic-perl6 22:05
El_Che It will easier to test/use it for people that already use vim-syntastic for other languages (like perl 5) 22:11
jnthn El_Che: Nice. :) Been getting myself into Vim recently, may give that a go. :) 22:12
dha El_Che - If I'm using Pathogen, can I just clone that into my bundle directory or do I have to shove it somewhere under syntastic itself? 22:13
(I note that the install instructions in that repository says to clone github.com/scrooloose/syntastic-perl6, which doesn't actually exist.) 22:14
ItayAlmog why does Perl6 has both int and Int? 22:18
(one with uppercase I and one with lowercase I)
jnthn int is machine native integer, Int is an object and infinite precision 22:19
m: say 2 ** 1000
camelia rakudo-moar 7d8046: OUTPUT«1071508607186267320948425049060001810561404811705533607443750388370351051124936122493198378815695858127594672917553146825187145285692314043598457757469857480393456777482423098542107460506237114187795418215304647498358194126739876755916554394607706291457119…»
ItayAlmog ok, thanks! 22:19
jnthn Generally, all types with a lowercase name are "native" in some sense 22:20
El_Che dha: just clone it in bundle. I use pathogen myself 22:22
dha *nod*
El_Che jnthn: I have spent time using intellij for go and perl. But I wanted to find a good perl6 env, and the best I found was atom and it was very lacking. Hence the usual suspect vim again :) 22:23
El_Che I plan to post a small howto of other useful plugins for a good perl 6 env setup (autocomplete, statusbar, align text, etc) 22:24
El_Che made note during my setup :) 22:24
El_Che (this wifi connection is crapy) 22:30
jnthn: what are you using nowadays? 22:31
harmil_wk m: use nqp; use experimental :macros; use MONKEY-TYPING; augment class AST { method past { $!past } }; macro foo($a, $b) { my @onto; $b.past.dump_children(0,@onto); dd @onto; Nil; } }; say foo(1, 2) 22:32
camelia rakudo-moar a23c39: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Unexpected closing bracket␤at <tmp>:1␤------> 3ump_children(0,@onto); dd @onto; Nil; } 7⏏5}; say foo(1, 2)␤»
harmil_wk m: use nqp; use experimental :macros; use MONKEY-TYPING; augment class AST { method past { $!past } }; macro foo($a, $b) { my @onto; $b.past.dump_children(0,@onto); dd @onto; Nil; }; say foo(1, 2)
camelia rakudo-moar a23c39: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤This type (Array) does not support positional operations␤at <tmp>:1␤»
Zoffix If I have a file with `unit module Foo; sub bar {}` is there any way to use it from outside that file? 22:33
harmil_wk That seems to blow up in dump_children. What do I need to do to get a result from that?
jnthn El_Che: Been giving Atom a go. It's likeable in various ways, but its handling of big files is...well, it doesn't. After a couple of decades with Windows as my primary environment, I'm gradually transitioning away...so working out what I'd like my dev environment to look like. :) 22:38
El_Che jnthn: I hear you. It would be nice to have an Intellij plugin though. I also tried Komodo Edit (also for perl 5) and it didn't suit me 22:40
jnthn El_Che: Yeah. :) I've done IntelliJ plugins in the past, though not for Perl 6...darn HUGE Java API they got going there. 22:41
jnthn Complete with all the obligatory factories. :P 22:42
El_Che hehe 22:43
El_Che I have tried the perl5 plugin and it turned out to be grat 22:43
great
tailgate m: my @i=((0,1)); my $repeat=3 say @i[0] xx $repeat; say (@i ==> map {@_ xx $repeat});
camelia rakudo-moar a23c39: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Two terms in a row␤at <tmp>:1␤------> 3my @i=((0,1)); my $repeat=37⏏5 say @i[0] xx $repeat; say (@i ==> map ␤ expecting any of:␤ infix␤ infix stopper␤ postfix␤ …»
jnthn Yeah, IntelliJ is a well designed platform and you can build good stuff on it.
El_Che the author wanted to do a perl6 one as well, but sticks now with perl 5 becasue of the work of 1 plugin was pretty high 22:44
jnthn: yes and no
tailgate m: my @i=((0,1),); my $repeat=3; say @i[0] xx $repeat; say (@i ==> map {@_ xx $repeat});
camelia rakudo-moar a23c39: OUTPUT«((0 1) (0 1) (0 1))␤(([(0 1)] [(0 1)] [(0 1)]))␤»
jnthn I can fully understand that. While it's decent it's...time consuming.
El_Che jnthn: the go and perl5 plugins I used (I hardly open a java view) are fine. Although very alien, with in most menus references to java stuff
tailgate I don't understand what's diffrent about the two statements - what's going on? 22:45
tailgate why is one of the nested lists [] rather than () 22:47
jnthn tailgate: Probably because using @_ in a block is a bit like having written it more like `-> *@_ { @_ xx repeat }` or so 22:48
jnthn sleep time; 'night, #perl6 22:50
Zoffix night 22:51
ItayAlmog Rakudo uses NQP for compiling Perl6 to JVM / MoarVM right? 22:59
unmatched} ItayAlmog: right 23:11
(FWIW, we also have #perl6-dev channel) 23:12
ItayAlmog Oh ok, thanks :)
dj_goku s: Int, 'abs' 23:26
SourceBaby dj_goku, Sauce is at github.com/rakudo/rakudo/blob/1c7c...Int.pm#L48
dj_goku s: [[]], 'eqv', [[]] 23:27
SourceBaby dj_goku, Something's wrong: ␤ERR: Cannot resolve caller sourcery(Array, Str, Array); none of these signatures match:␤ ($thing, Str:D $method, Capture $c)␤ ($thing, Str:D $method)␤ (&code)␤ (&code, Capture $c)␤ in block <unit> at -e line 6␤␤
dj_goku s: [[]], 'eqv'
SourceBaby dj_goku, Something's wrong: ␤ERR: Type check failed in binding to &code; expected Callable but got Nil (Nil)␤ in sub do-sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 42␤ in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 33␤ in block <unit> at -e line 6␤␤
dalek c: 367202a | (Zoffix Znet)++ | doc/ (2 files):
Document PERL6_TEST_DIE_ON_FAIL

Added today in github.com/rakudo/rakudo/commit/1c7ca5e13b
23:28
unmatched} s: &infix:[eqv] 23:29
SourceBaby unmatched}, Something's wrong: ␤ERR: ===SORRY!===␤Cannot invoke this object (REPR: Null; VMNull)␤
unmatched} :o
s: &infix:<eqv>
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/1c7c...Mu.pm#L819
unmatched} dj_goku: ^
SourceBaby: help
SourceBaby unmatched}, Use s: trigger with args to give to sourcery sub. e.g. s: Int, 'base'. See modules.perl6.org/dist/CoreHackers::Sourcery
dj_goku unmatched}: thanks! 23:33
ItayAlmog In perl 6 every method inside a class is Global (Can be accessed without having an instance of the class)? 23:33
unmatched} ItayAlmog: you can call methods on the call without instantiating it, but no, methods live inside classes 23:34
ItayAlmog: we do have functions same-named as some class methods, for people who want to use functional programming rather than OO 23:35
m: say sort <a b c>
camelia rakudo-moar e97fb7: OUTPUT«(a b c)␤»
unmatched} m: <a b c>.sort.say 23:36
camelia rakudo-moar e97fb7: OUTPUT«(a b c)␤»
ItayAlmog ok, thanks!
unmatched} s: &sort, \(<abc>)
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/1c7c...s.pm#L2100
unmatched} s: &say, \(<abc>)
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/1c7c...ors.pm#L22
unmatched} s: <abc>, "sort", \()
SourceBaby unmatched}, Something's wrong: ␤ERR: Type check failed in binding to &code; expected Callable but got Method+{<anon|42627280>} (Method+{<anon|4262728...)␤ in sub do-sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 42␤ in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 29␤ in block <unit> at -e li
unmatched} bah
s: <abc>, "say", \() 23:37
SourceBaby unmatched}, Sauce is at github.com/rakudo/rakudo/blob/1c7c...Mu.pm#L451
unmatched} *call methods on a the class... I meant 23:39
ItayAlmog Yeah, I understood it :) I am right now thinking how The classes definitions are going to get represented in memory, I think I have an idea but i dunno, Also I have to think about this defined method.... 23:40
unmatched} m: my $awesome-int = 42 but role { method is-even { self %% 2 } }; 42.is-even.say; 23:42
camelia rakudo-moar e97fb7: OUTPUT«Method 'is-even' not found for invocant of class 'Int'␤ in block <unit> at <tmp> line 1␤␤»
unmatched} orly
bisect: m: my $awesome-int = 42 but role { method is-even { self %% 2 } }; 42.is-even.say;
bisectable unmatched}: On both starting points (good=2015.12 bad=7d80466) the exit code is 1 and the output is identical as well
unmatched}: Output on both points: Method 'is-even' not found for invocant of class 'Int'␤ in block <unit> at /tmp/JRXI1zgB9o line 1␤
unmatched} weird. I could've swore that worked before.
bisect: class WorkingInt is Int {}; my $awesome-int = WorkingInt.new(42) but role { method is-even { self %% 2 } }; 42.is-even.say; 23:43
bisectable unmatched}: On both starting points (good=2015.12 bad=7d80466) the exit code is 1 and the output is identical as well
unmatched}: Output on both points: Method 'is-even' not found for invocant of class 'Int'␤ in block <unit> at /tmp/jgyWGl7RDk line 1␤
unmatched} oops
Ohh... good god. I need some sleep
m: my $awesome-int = 42 but role { method is-even { self %% 2 } }; $awesome-int.is-even.say; 23:44
camelia rakudo-moar e97fb7: OUTPUT«True␤»
dj_goku m: my @b[2;2] = ([1, 2], [3,4]); say @b;
camelia rakudo-moar e97fb7: OUTPUT«[[1 2] [3 4]]␤»
dj_goku m: my @b[2;2] = ([1, 2], [3,4]); dd @b;
camelia rakudo-moar e97fb7: OUTPUT«Array.new(:shape(2, 2), [1, 2], [3, 4])␤»
unmatched} :) Anyway, the point I was trying to make is objects/classes can be altered at runtime
unmatched} m: use MONKEY-TYPING; augment class Int { method is-even { self %% 2 } }; 42.is-even.say; 23:45
camelia rakudo-moar e97fb7: OUTPUT«True␤»
unmatched} m: use MONKEY-TYPING; say 42.^can('is-even'); EVAL 'augment class Int { method is-even { self %% 2 } }'; 42.is-even.say;
camelia rakudo-moar e97fb7: OUTPUT«()␤5===SORRY!5=== Error while compiling /home/camelia/EVAL_0␤augment not allowed without 'use MONKEY-TYPING'␤at /home/camelia/EVAL_0:1␤------> 3augment class Int7⏏5 { method is-even { self %% 2 } }␤ expecting any of:␤ generi…»
unmatched} m: say 42.^can('is-even'); EVAL 'use MONKEY-TYPING; augment class Int { method is-even { self %% 2 } }'; 42.is-even.say;
camelia rakudo-moar e97fb7: OUTPUT«()␤True␤»
unmatched} there we go
unmatched} & 23:46
dj_goku so on my local machine the REPL is messed up some how. I create a new array like above but when I try to print it I get: Variable '@b' is not declared ------> say ⏏@b
unmatched} oh damn. yeah, it's borked 23:48
This is a release blocker too IMO.
dj_goku++
Seems to have been opened 10 hours ago: rt.perl.org/Ticket/Display.html?id=128973 23:49
dj_goku unmatched}: :( 23:55
dj_goku I rebuilt thinking it would fix it. 23:55
phifisher I want learn perl 6, where I searched a videos about? youtube? 23:56
Good night.
dj_goku unmatched}: that is what i get for bleeding edge 23:57
unmatched} huggable: beginners
huggable unmatched}, nothing found
unmatched} huggable: beginner
huggable unmatched}, nothing found
dj_goku newbs 23:58
unmatched} huggable: newcomers
huggable unmatched}, nothing found
unmatched} huggable: newcomer
huggable unmatched}, nothing found
unmatched} stupid robot
phifisher yes, I am new
hehe
unmatched} phifisher: check the 'New Comers' section on perl6.org/documentation/ perl6intro.com/ and there's also perl6.party/
No idea about videos.
phifisher unmatched}, thx man 23:59
=)