»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend! | Rakudo Star Released!
Set by diakopter on 6 September 2010.
s_mosher successful thiele interpolation: gist.github.com/610694 01:06
s_mosher not yet an answer to the rosetta code task, but the meat of it works (if slowly) 01:07
colomon s_mosher++ 02:09
colomon rakudo: sub a($a, $b, $c) { say "boo!" }; my &b = &a.assuming(1); say &b.arity 02:41
p6eval rakudo 2ee5db: OUTPUT«0␤»
colomon rakudo: sub a($a, $b, $c) { say "boo!" }; my &b = &a.assuming(1); say &a.arity; say &b.arity
p6eval rakudo 2ee5db: OUTPUT«3␤0␤»
colomon where's masak++ when you need him? 02:42
(reported) 02:47
dalek rixel: 7a5f038 | diakopter++ | sprixel/ (11 files):
nested string-eval with full lexical-closure-chain access.
02:50
araujo wonders if he should ......... "borrows" some keywords name from perl 03:37
mfollett rakudo: multi countdown(0) { say "We made it to 0!"};multi countdown { countdown($^x-1) };countdown(100) 04:35
p6eval rakudo 2ee5db: OUTPUT«No applicable candidates found to dispatch to for 'countdown'. Available candidates are:␤:(Int where (0))␤:(;; Any $x)␤␤ in main program body at line 22:/tmp/zIbxvK93xQ␤»
mfollett why doesn't that work? 04:38
mfollett rakudo: multi countdown(0) { say "We made it to 0!"};multi countdown($x) { countdown($x-1) };countdown(100) 04:53
p6eval rakudo 2ee5db: OUTPUT«We made it to 0!␤»
mfollett that works
sorear good * #perl6! 05:42
... and I seem to have SLEPT THROUGH #PHASERS 05:43
sorear mopes
moritz_ good morning 05:57
sorear: I missed too
stackoverflow.com/questions/3858790...ike-perl-6 that's the kind of question I like :-) 05:59
sorear
.oO(maybe we should start #outofphasers for people who think a 0700UTC meeting would be cool)
06:06
mberends (180°outofphase) 06:13
sorear TimToady: constant Foo = 2; class Foo::Bar { } # Does this create a name collision? 06:21
TimToady I suspect so. 06:24
typenames and labels are just funny constant names, more or less. 06:28
s_mosher rosettacode.org/wiki/Thiele%27s_int...ula#Perl_6 08:03
I'm all out of stupid bugs and it seems to converge correctly on all of them 08:04
s_mosher oh no, all the stupid bugs are gone but I just found an intelligent one. 08:11
I'm leaving it for now since it still works
s_mosher ZzZzz 08:12
dalek ecza/master: b45b211 | sorear++ | src/ (2 files):
Switch to a 'fat reference' stash model

Foo and Foo:: are now both referenced from GLOBAL::, to allow constants and type objects to coexist better.
08:47
ecza/master: 0fa6f23 | sorear++ | / (3 files):
Fix Foo::Bar regression
sjohnson rakudo: say 2^64 09:00
p6eval rakudo 2ee5db: OUTPUT«one(2, 64)␤»
sjohnson rakudo: say 2**64 09:00
p6eval rakudo 2ee5db: OUTPUT«1.84467440737096e+19␤»
sjohnson rakudo: use bignum; say 2**64
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤Unable to find module 'bignum' in the @*INC directories.␤(@*INC contains:␤ lib␤ /home/p6eval/.perl6/lib␤ /home/p6eval//p2/lib/parrot/2.8.0-devel/languages/perl6/lib␤ .)␤»
sjohnson when anyones awake, will p6 do bignum automatically like python and ruby? 09:01
sorear yes
masak \o/ 09:02
sjohnson sorear: just not now?
sorear sjohnson: correct
\o/ masak
sjohnson sorear: thanks
sjohnson and hi to you to masak 09:04
sjohnson masak!!! 09:07
(´ー` ) 09:08
masak I think this bug is horrible: rt.perl.org/rt3/Ticket/Display.html?id=78232 09:10
I'm a bit disappointed that something like that hits us in 2010.
I'd like it to be fixed with some sort of priority, if possible. 09:11
this one too: rt.perl.org/rt3/Ticket/Display.html?id=78234
jnthn Well, a start is to see what on earth PAST/PIR it's generating.
masak ok.
sorear jnthn!!! 09:12
masak sorear!!!
jnthn o/ sorear :-)
sorear niecza: for 1, 2, 3 { sub foo {}; $_.say }; say "alive" # on a lark
p6eval niecza 0fa6f23: OUTPUT«Potential difficulties:␤ &foo is declared but not used at /tmp/iKBUwlQOB5 line 1:␤------> for 1, 2, 3 { sub foo⏏ {}; $_.say }; say "alive" # on a lark␤1␤2␤3␤alive␤»
sorear :/ 09:13
masak it does produce the right thang.
sorear jnthn: what do you think about search.cpan.org/perldoc?UNIVERSAL%3A%3Aisa ?
sorear essentially, 'method isa($cl) { ... }' in perl5-land is supposed to be enough to fake out all type checks 09:14
and people get very rude (just read that) when it's not
masak I'm looking at the PAST, but I'm not accustomed enough to pick out the tasty pieces. it's too much even with the above short one-liner. 09:15
sorear is 6model going to support faking out type checks like that?
jnthn Not in such a global way.
It's not really a core issue anyway though.
.isa will tend to just delegate to .^isa 09:16
At which point it's up to the meta-class
OTOH, if you mix in, in place, to ClassHOW you could change isa for all classes.
Warning: my brane is currently shared between here and insurance calculations... :-) 09:17
mathw o/ 09:19
jnthn er, wait, you'd have to replace the method. Mix-in affects just an instance...
mathw I feel out of touch, what awesomeness is happening?
jnthn ...and these insurance calcs are wrong. Grrr...
.oO( the world needs more compiler writing jobs... )
09:20
mathw Well, the world does need better compilers 09:21
And languages
jnthn masak: Easiest way with PAST is to put some magic values in the source and then look for them in the tree.
mathw is starting to really hate C++ 09:22
masak jnthn: ok.
mathw jnthn: of course your insurance calculations are wrong, because insurance is wrong by definition.
jnthn :P 09:24
Whiuch is fine apart from somebody has an idea of the right answer. ;-)
They've also redefined the word "all", just for fun. :-)
masak the PAST for `for 1, 2, 3 { sub foo {}; $_.say }` looks fine to my untrained eye. 09:26
sorear I blame autoclose
hrm, druid does some rather unpleasant things with regexes... 09:35
masak yes.
it needs to be rewritten.
I currently don't have the tuits. 09:36
sorear How much needs to be rewritten?
masak Druid::Base, mostly.
I tried once, and hit a number of cascade issues, described at least twice in the backlog. 09:37
something of a re-think is required.
sorear the "base class as a holding place for support methods" design pattern makes me vomit inside
how far back-log?
masak just search for masak saying 'Druid' a lot.
last month or so. 09:38
sorear: I'd like to discuss that dislike of that design pattern with you sometimes. it seemed to make a lot of sense at the time.
mathw It reminds me of the kind of twisted OO you get in a lot of Java code 09:46
masak I was very happy about the class hierarchy in Druid. it uses single inheritance, roles, and 'handles' delegation in a way that was new to me at the time. 09:47
sorear I think OO is very much overused these days 09:49
mathw You probably shouldn't listen to my thoughts on class heirarchy, I'm currently rather bitter about the whole OO thing
masak in retrospect and with possibly fuzzy memory, I guess Druid::Base might just as well have been a role instead. 09:50
sorear a lot of people treat "object oriented" as a synonym for "well designed"
masak: in my local branch, Druid::Base is a module named Druid::Common 09:51
it doesn't make any sense to go $board.sarsen-move
instead stuff is exported from Druid::Common and it never makes it into class hiercies 09:52
masak I'll be happy to see what you come up with.
I'm a bit disinterested in arguing specifics in this case, but I'll be happy to look at a new whole design with different design desicions.
mathw be interesting to see what sorear comes up with and how it compares 09:54
jnthn masak: Feel free to nopaste the PIR for me to glance over (don't have a Rakudo build environment here...)
masak ok.
jnthn Or harrass me at Utrecht station in the morning. :P
mathw I keep saying to my boss I don't know enough about how to structure software properly. I'm convinced I'm not doing it very well. 09:55
sorear masak: you should look at how many times I've completely reorganized niecza in the last three months 09:56
(around 7)
er, mathw
masak jnthn: gist.github.com/613105
sorear: I re-did GGE in a major way about 5 times. 09:57
sorear: usually it was an effect of a step up in my understanding of the mechanisms behind PGE.
sorear creates a Druid::Move class with a static .parse method 09:58
masak sorear: is your Druid branch viewable somewhere? 10:21
masak jnthn: any insights from the gist? 10:56
masak rakudo: say $*PID 11:12
p6eval rakudo 2ee5db: OUTPUT«10260␤»
masak getting 0 locally.
there's an RT ticket about this not working on Darwin.
jnthn My guess is that there needs to be a Parrot ticket, since the real issue is probably at that level. 11:13
If we're using some Parrot call to get it, but I figure we would be.
masak: (gist) Er, I got distracted by lunch :-)
masak here's the RT ticket: rt.perl.org/rt3/Ticket/Display.html?id=77850
jnthn: no rush. 11:14
I'll go submit a Trac ticket for the $*PID thing.
jnthn is very full of burger 11:15
jnthn masak: line 135 may be suspect 12:22
Will take some digging. Can try to fix it tomorrow in .nl 12:23
masak ok. 12:24
'find_lex_skip_current'? 12:25
jnthn aye
I'm curious what the signautre of that block ends up being
(the one passed to map)
rakudo: for 1, 2, 3 { sub foo {}; 42.say } 12:26
p6eval rakudo 2ee5db: ( no output )
jnthn :-S 12:27
masak that's the issue, yes.
jnthn rakudo: for 1, 2, 3 { sub foo {}; die("here?") }
p6eval rakudo 2ee5db: ( no output )
jnthn rakudo: for 1, 2, 3 { sub foo() {}; die("here?") } 12:28
p6eval rakudo 2ee5db: ( no output )
jnthn rakudo: for 1, 2, 3 { sub foo($a) {}; die("here?") }
p6eval rakudo 2ee5db: ( no output )
jnthn rakudo: for 1, 2, 3 { -> {}; die("here?") }
p6eval rakudo 2ee5db: OUTPUT«here?␤ in <anon> at line 22:/tmp/uquB3qXOJm␤ in main program body at line 1␤»
masak so, somehow it's the declaration of a non-anon sub. 12:29
rakudo: for 1, 2, 3 { sub {}; die "here?" } 12:30
p6eval rakudo 2ee5db: ( no output )
masak or a sub in general.
jnthn yes, it's something about a routine. 12:31
I'm still at a loss as to what.
masak shopping & 12:34
takadonet morning all 12:41
colomon rakudo: sub a($a, $b, $c) { say "boo!" }; my &b = &a.assuming(1); say &a.arity; say &b.arity 13:10
p6eval rakudo 2ee5db: OUTPUT«3␤0␤»
colomon (reported last night, but was it actually a new bug, oh bugmaster masak?) 13:11
jnthn 0 is certainly the wrong answer, but I'm not totally convinced you should be getting 2 there... 13:21
The assuming wrapper just takes a capture and interpolates it along with the curried args iirc. 13:22
Hmm...or is 0 wrong... 13:23
If it's just a capture arg in there I guess there's no required params.
hm
rakudo: sub a($a, $b, $c) { say "boo!" }; my &b = &a.assuming(1); say &b.count; 13:24
p6eval rakudo 2ee5db: OUTPUT«Method 'count' not found for invocant of class 'Sub'␤ in main program body at line 22:/tmp/gcfPz9iyVF␤»
jnthn oh.
rakudo: sub a($a, $b, $c) { say "boo!" }; my &b = &a.assuming(1); say &b.signature;
p6eval rakudo 2ee5db: OUTPUT«get_attr_str() not implemented in class 'Sub'␤ in main program body at line 1␤»
jnthn ah
buggar.
colomon jnthn: it's a practical issue, because things like .min and the sequence op need to know the arity of the functions they work with. 13:38
jnthn Fixing it means doing assuming in a rather more complex way. 13:41
colomon seems like it needs to be done. :\ 13:43
(at some point...)
jnthn So long as folks can cope with .assuming getting a bunch slower. 13:44
colomon why should that be? 13:45
(and is it .assuming, or the functions that it generates that get slower?)
jnthn Becuase it'd have to build a signature object for every single thing that gets wrapped.
Maybe we can get away with it just being .assuming
Well, we can see what TimToady++ thinks. 13:46
colomon If the alternative is that you can't actually use functions generated with .assuming in most of the interesting places a closure can be used, that seems like it would be worth it.
jnthn aye, but it rasies some interesting questions about other places delegation shows up too. 13:47
PerlJam jnthn: What does "build a signature object" entail? 13:48
and do you have to bulid them from scratch? It seems to me that you'll always be able to clone the sig and then remove parts of it for .assuming. 13:49
jnthn Cloning still means building a copy. 13:50
Also it may not always be removing.
sub foo(*@x) { ... } # nothing to remove in this case
thundergnat good localtime #perl6 13:51
I added a new perl6 contribution to rosettacode: Truncatable primes. rosettacode.org/wiki/Truncatable_primes#Perl6 13:53
It may not be the fastest or most idiomatic, but it works. slowly... 13:54
takadonet thundergnat: nice!
colomon jnthn: what does .assuming do with multis? 13:57
jnthn Once we switch to the new model, wrap the proto.
Then you're at the mercy of the signature of the proto whatever we do. :-) 13:58
colomon o/ 14:30
pmichaud good morning, #perl6 15:11
phenny pmichaud: 04 Oct 16:44Z <moritz_> tell pmichaud my adverb question turned into a call for review for 2ee5db94. We'll need to do the same for s///, so should I abstract that ugly code block into a sub or method or something?
pmichaud c! 15:18
ww
masak pm! 15:19
cbk pmichaud, good morning 15:20
masak colomon: no, it wasn't a new bug. 15:22
colomon: I already merged it with the older one from a few months back.
moritz_ oh hai 15:23
masak moritz_: greetings. hope everything is well with you. 15:26
mberends and I are sitting inside, hacking. we're just back from a small shopping round. 15:27
moritz_ masak: yes, just exhausted
masak life can do that :) 15:28
moritz_ and little time for p6
takadonet morning all 15:28
masak moritz_: aye -- been having the same feeling lately. a bit frustrating.
takadonet: \o
takadonet looks like a recent change in rakudo cause 300 tests to fail in bioperl.... 15:32
dukeleto takadonet: bisect to the rescue 15:35
takadonet ?
ic Boo:False is implement now and we expected just 0 as false 15:36
masak takadonet: there's a git subcommand called 'git bisect'. 15:37
dukeleto takadonet: git help bisect
masak takadonet: it basically allows you to automate finding a revision where something changed.
takadonet thanks guys
dukeleto takadonet: you should learn about it, it can really save the day sometimes
takadonet dukeleto: good to know since we just changed over to git and still just learning it
dukeleto takadonet: aren't we all :) 15:38
masak yes, bisect is one of the nice parts of git.
takadonet: take a good long look at rebase too if you haven't already :)
takadonet never heard of it till now
well I have more time now to start looking at that stuff
dukeleto takadonet: if you are familiar with "newton iteration" or "the bisection algorithm", it basicall does that, on git commits, to help you find when something changed
moritz_ half of my parrot bug reports are about some parrot change breaking rakudo, typically bisected from two known revisions
or "binary search" really 15:39
takadonet sweet
and this is the reason why I come here every day
dukeleto perl6++
masak takadonet: yes, same here. 15:40
masak for some reason, we have an island of quality content in here. 15:40
_sri is there a Perl6::Tidy yet? :) 15:41
takadonet also that people are willing to share without thought of getting anything in return
dukeleto takadonet: that seems to be a pillar of all perl communities 15:42
PerlJam _sri: no Perl6::Critic yet either. 15:42
_sri aww
masak _sri: totally possible to build one, though.
we should have a wiki page or something where people can put all those "it's possible and desirable, but none of us has taken on the task yet" projects. 15:43
moritz_ or simply a file in the Mu repo 15:44
dukeleto moritz_: that sounds like a lovely idea 15:52
thundergnat rakudo: sub f ($l is rw) { $l += 1 }; say f(1); 15:54
p6eval rakudo 2ee5db: OUTPUT«Cannot modify readonly value␤ in '&infix:<=>' at line 1␤ in 'f' at line 22:/tmp/Nje9ztCGhs␤ in main program body at line 22:/tmp/Nje9ztCGhs␤»
thundergnat has 'is rw' been deprecated?
moritz_ no
it works fine
it's just that you can't add 1 to 1, and store the result in a 1
you can only store the result in a variable 15:55
thundergnat oh. duh
moritz_ rakudo: sub f($l is rw) { $l += 1); f my $x = 3; say $x
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤»
PerlJam literals don't make good lvalues :)
moritz_ rakudo: sub f($l is rw) { $l += 1); f(my $x = 3); say $x
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤»
moritz_ rakudo: sub f($l is rw) { $l += 1}; f(my $x = 3); say $x
p6eval rakudo 2ee5db: OUTPUT«4␤» 15:56
moritz_ LTA error message, it could tell me that the brackets are mismatched
thundergnat thanks. that was pretty obvious in retrospect. 15:57
masak moritz_: a file in the Mu repo is probably better, yes.
generally, I find Rakudo to be poor at recovering from bracket mismatches. 15:58
but it is a tough problem.
sometimes I've been toying with the idea of a program that would be able to provide better diagnostics in such cases by keeping the previous version of the code around, and comparing the brace structure there; maybe also paying attention to indentation as an extra clue. 15:59
pmichaud std: sub f($l is rw) { $l += 1); f(my $x = 3); say $x; 16:00
p6eval std 237d266: OUTPUT«===SORRY!===␤Unable to parse block at /tmp/KAuV2AEzIs line 1:␤------> sub f($l is rw) ⏏{ $l += 1); f(my $x = 3); say $x;␤Couldn't find final '}'; gave up at /tmp/KAuV2AEzIs line 1:␤------> sub f($l is rw) { $l += 1⏏); f(my $x =
..3)…
moritz_ takadonet: (backlog) Bool::False was implemented before, it's juste the stringification that has changed 16:03
(as mentioned in the release announcement of the previous compiler release)
moritz_ rakudo: say ?0 16:03
p6eval rakudo 2ee5db: OUTPUT«Bool::False␤»
pmichaud rakudo: say "{?0}"
p6eval rakudo 2ee5db: OUTPUT«Bool::False␤»
pmichaud that one's wrong. 16:04
dalek : 968479c | moritz++ | project-ideas.txt:
[project-ideas.txt] collection of medium to large scale Perl 6 project ideas
moritz_ pmichaud: shoulbe just "False"?
pmichaud should be ""
moritz_ huh? why?
moritz_ rakudo: say False.Stringy 16:04
TimToady Bool never goes to ""
p6eval rakudo 2ee5db: OUTPUT«Method 'Stringy' not found for invocant of class 'Bool'␤ in main program body at line 22:/tmp/l9iwcvQloy␤»
pmichaud oh, never mind then.
I figured Bool.Stringy would go to ""
moritz_ no, it's an enum
pmichaud if it's never "", then no problem :-)
TimToady P5-Think? 16:05
moritz_ so it goes to the short name
pmichaud I'm probably a week behind on discussions :)
moritz_ Author: lwall <lwall@c213334d-75ef-0310-aa23-eaa082d1ae64> 16:06
Date: Tue Jul 13 00:55:37 2010 +0000
[S12] define more forced actions on enum values
more like, 2.5 months :-)
pmichaud well, since I was sitting on a beach in Hawaii when that commit occurred, I think I can be excused for overlooking it. :-)
TimToady slacking off is always a valid excuse around here :) 16:09
masak "Perl 6: slacking off since 2000" 16:11
pmichaud laziness is a virtue :-)
ash_ my to do list is really lazy
masak my resumé is lazy. 16:12
ash_ mines just out dates :-(
takadonet moritz_: thanks. I noticed that was the issue when I saw the tests output
ash_ rakudo: try { 1 = 3; }; say $!; 16:13
p6eval rakudo 2ee5db: OUTPUT«Cannot modify readonly value␤»
masak rakudo: say $!
p6eval rakudo 2ee5db: OUTPUT«Any()␤»
masak rakudo: try { 1 = 3 }; say $!.backtrace
p6eval rakudo 2ee5db: OUTPUT«Method 'backtrace' not found for invocant of class 'Perl6Exception'␤ in main program body at line 22:/tmp/iJex0CSMqe␤»
masak rakudo: try { $!.backtrace }; say $! 16:14
p6eval rakudo 2ee5db: OUTPUT«Method 'backtrace' not found for invocant of class ''␤»
ash_ rakudo: class A { has $.HOW }; try { A.new(HOW => 1); }; say $!
masak you can get the error that says there's no backtrace method without a backtrace, if you want.
p6eval rakudo 2ee5db: OUTPUT«Type objects are abstract and have no attributes, but you tried to access $!HOW␤»
masak o.O
ash_ that error still confuses me
masak rakudo: class A { has $.foo }; A.new(foo => 1) 16:15
p6eval rakudo 2ee5db: ( no output )
masak seems .HOW is a special case here.
ash_ ya
ash_ jnthn said its not actually a method/attribute you can control like that 16:16
but if he finishes his changes to nqp-rx adding the knowhow stuff it should work
pmichaud iirc, HOW is a macro.
(in the spec)
it's not a normal method. 16:17
ash_ are you supposed to be able to toy with it? 16:18
pmichaud if so, it probably won't be by simply declaring a new method or attribute
one would have to "toy with it" through the metamodel interface or something.
(that's my guess)
masak .can("HOW").() 16:19
pmichaud note that $x."HOW"() would be a method call, however. 16:19
same with .WHAT and ."WHAT"()
masak oh, that's far simpler, then. 16:20
pmichaud lunchtime here -- bbiaw 16:22
moritz_ does t/spec/S11-modules/require.t fail the third test for anybody else? 16:23
moritz_ (fails here on newest parrot) 16:24
masak moritz_: yes, here as well. 16:30
pid.t properties-derived.rakudo require.t IO-Socket-INET.rakudo -- those are the ones with failed tests here right now. 16:31
moritz_ I now have a newer libicu, and properties-derived now also has some failures here 16:37
dalek ast: 282b48b | moritz++ | S05-mass/properties-derived.t:
[properties-derived.t] fudge out tests that depend on particular (older) icu verisons
16:40
masak moritz_++
I'd really like to see the failcount reach 0 in some way. 16:41
it hasn't been for a while for me.
flussence does that affect those 9 tests that keep failing for me? 16:42
moritz_ flussence: there's an easy way to find out :-)
flussence righto 16:43
masak is the semantics of &goto doing tailcalls no longer with us in Perl 6?
moritz_ thinks so 16:44
masak then something is odd in the spec.
because the spec doesn't say that Perl 6 removes this behaviour, and S01 says that everything that's not mentioned is the same. 16:45
...as in Perl 5.
colomon masak++ 16:46
flussence was thinking of trying to port frozen-bubble to p6 today, then looked at the code...
moritz_ masak: S04 (iirc) describes the new semantics of Perl 5
erm
new semantics of 'goto'
so it's not the same as in p5 16:47
masak moritz_: describing new semantics is not the same as saying that old semantics are not still in effect. 16:48
I do agree in that &goto probably doesn't have this function any more.
but I think it's worth pointing out in the spec, it being what it is.
moritz_ masak: it describes what goto does. Since the description does not include things that goto in p5 does, it mean it's gone.
masak I don't buy that logic. 16:49
pack/unpack are barely described at all in the spec.
and yet we assume that they work mostly as in Perl 5.
moritz_ (which, IMHO, is also wrong)
masak at least one of those things have to be wrong if we're to be consistent. 16:50
dalek kudo: e9e7fca | moritz++ | src/core/Bool.pm:
implement Bool.Stringy
16:51
dalek rixel: 56c944f | diakopter++ | sprixel/ (4 files):
fix intervening-lexical-scope compile-time lookup/binding to "hidden-class" slots.
16:55
masak could someone compare and contrast callwith($args) and &?ROUTINE($args), please? 17:05
moritz_ Use of C<callwith> allows the routine to be called without introducing 17:07
an official C<CALLER> frame. For more see "Wrapping" below.
masak so does use of &?ROUTINE, according to S06. 17:07
at least it talks about tail-recursion in relation to it.
moritz_ where?
hm 17:08
& temp &thermo.wrap( { callwith($^t + 273.16) } );
moritz_ in that case, &?ROUTINE would refer to the next outer routine, afaict 17:08
not to &thermo
S06:2697
masak right.
S06:2813: "C<&?ROUTINE> is always an alias for the lexically innermost C<Routine> [...], so you can specify tail-recursion on an anonymous sub" 17:09
"tail-recursion".
oh well, it probably won't hurt to keep both variants around. 17:10
masak though I wonder why tail-recursion is emphasized there, since presumably execution proceeds after a &?ROUTINE call. 17:12
to me, just "recursion" would be less confusing in that paragraph.
moritz_ indeed
will you remove it? 17:13
TimToady feel free to fix it
flussence hm, this test run's stuck on t/spec/S09-typed-arrays/arrays.rakudo... 17:16
stuck after "not ok 35"
moritz_ flussence: is your t/spec/ a git or an svn repo? 17:17
flussence there's a .git in there
masak fixes it 17:27
dalek ecs: cb8c848 | masak++ | S06-routines.pod:
[S06] s/tail-recursion/recursion/

Because you can use &?ROUTINE calls in a non-tail position (and execution still carries on afterwards), it's really just normal recursion.
17:28
dalek rixel: 1762ccd | diakopter++ | sprixel/ (7 files):
made short and long versions of name manglers
17:43
takadonet .. 17:44
diakopter takadonet: ? 17:51
takadonet diakopter: very quiet in here today 17:53
flussence hmm, that S09 test passed now. Guess I just didn't make-clean enough stuff the first time. 17:57
sorear good * #perl6
masak good whatevah, sorear. 18:24
what's the behaviour of a call[with|same] inside an only sub? 18:26
PerlJam surely an exception? 18:27
or, I guess, it could be like goto &sub in perl 5, but with possibly different args.
(where &sub is the only in question) 18:28
Util rakudo: sub foo ( ) { say 2*$lexical }; my $lexical = 4; foo();
p6eval rakudo 2ee5db: OUTPUT«8␤»
masak both the call- and the next- forms mean "go to the next *candidate*" only the former means "and come back afterwards".
Util Why did that not err with "Symbol '$lexical' not predeclared in foo"? Known bug? 18:29
masak seems to me they either are not applicable within an only sub, or they follow some different rules.
Util: hm. maybe.
I'll check.
PerlJam rakudo: { say $a; my $a = 42; }
p6eval rakudo 2ee5db: OUTPUT«Any()␤» 18:30
masak :(
rakudo: say $a; my $a = 42
p6eval rakudo 2ee5db: OUTPUT«Any()␤»
masak at least there's an old possibly closed bug for that.
s/bug/ticket/ 18:32
Util It is like any var that exists in a scope is legal from the start of scope, instead of from the point of declaration. I am suprised there is no spectest for that. 18:33
PerlJam rakudo: say $foo; { my $foo = 42 } 18:33
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤» 18:33
PerlJam oops 18:34
rakudo: say $foo; if 1 { my $foo = 42 };
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤»
masak I can't find a ticket for it either.
PerlJam hmm
masak I'm almost sure we had one.
masak submits rakudobug
Util++
PerlJam masak: me too, I remember we talked about a similar (the same) bug a long time ago 18:35
sorear Util: it's a pretty deep-seated bug in PAST
masak someone else might have better luck than I finding it in RT.
I found quite a number of similar ones, but not exactly that one.
ash_ std: say $foo; if 1 { my $foo = 42 };
p6eval std 237d266: OUTPUT«===SORRY!===␤Variable $foo is not predeclared at /tmp/KLl0FzrmrH line 1:␤------> say $foo⏏; if 1 { my $foo = 42 };␤Potential difficulties:␤ $foo is declared but not used at /tmp/KLl0FzrmrH line 1:␤------> say $foo; if 1 { my
..$foo⏏[…
sorear masak: i think callwith/same goes and accesses the nearest dynamically enclosing multi or method
masak: remember, you can use it inside an if { }
masak sorear: an if is just a block, not a routine, though. 18:36
Util Thanks, everyone
masak sometimes I think that [call|next][same|with] only solve one of two types of problems out there. maybe the other problem can be seen as the use case for &?ROUTINE. 18:37
namely, what if I want to *not* use the same candidate list as originally, but do a (possibly tail) call to the same routine, but with a new dispatch? 18:38
masak rakudo: { my $foo = 42 } 18:42
p6eval rakudo 2ee5db: ( no output )
masak rakudo: say $foo; { my $foo = 42 }
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤»
masak wtf?
rakudo: say $foo; {} 18:43
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤»
masak rakudo: say $foo;
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤»
masak submits rakudobug
masak *sigh* 18:43
taking a guess, that seems to be an error that occurs during parsing while trying to print the real error. 18:44
taking another guess, it has to do with the Parrot String/Rakudo Str conversion not always being perfect. probably a .trans call or something. 18:45
TimToady rakudo: exit; say $foo;
p6eval rakudo 2ee5db: OUTPUT«===SORRY!===␤too few positional arguments: 2 passed, 3 (or more) expected␤»
masak would be nice if someone would do a bisect on this one.
TimToady: if &goto's tailcall semantics are gone from Perl 6, how do I say "tail-call [i.e. overwrite this stack frame] and redispatch"? 18:49
TimToady it's kinda supposed to do that automatically when it can, but we've have a .tailcall proposed from time to time; don't think it's made it to specland 18:50
masak IIUC, the thing about tail-call optimisations is that if you don't spec when it must be done, then some implementations will skip doing that, and then some programs will blow serious stack on those implementations. 18:52
TimToady that sounds about right :) 18:53
masak ok then. nothing to see here, move along.
TimToady but probably more along the lines of speccing all the things that can disable tailcall optimizations 18:54
masak like, having a statement or some other evaluation temporally after the call? :)
TimToady that would be one obvious way :) 18:55
masak likes obvious ways 18:56
sorear well, the flip side of that is that, if you spec too many tailcall points, life gets seriously annoying for implementors not using assembly 18:58
masak rakudo: sub foo($x where { $x == $y }, $y) { }; foo(1,2)
sorear r5rs is an infamous offender here
p6eval rakudo e9e7fc: OUTPUT«Use of uninitialized value in numeric context in <anon> at line 22:/tmp/u16S1HF52n␤Constraint type check failed for parameter '$x'␤ in 'foo' at line 1:/tmp/u16S1HF52n␤ in main program body at line 22:/tmp/u16S1HF52n␤»
sorear writing Scheme implementations in C is hard because of ... the tailcall rules, and not much else
masak rakudo: our $c; class T { $c++ }; T.new 18:59
p6eval rakudo e9e7fc: ( no output )
masak rakudo: our $c; class T { $c++ }; T.new; say $c
p6eval rakudo e9e7fc: OUTPUT«1␤»
sorear OTOH, Perl 6 has already made my life horrible with &take, so tailcalls won't be too much worse ;)
masak closes rt.perl.org/rt3/Ticket/Display.html?id=69460
TimToady well, if we require implementation of .tailcall, it can't be too much harder to apply it as needed
sorear note that .tailcall is going to have some very dark-corners interaction with LEAVE, temp, etc 19:00
masak sorear: does your &take decontainerize?
TimToady LEAVE would be one of the things that disables it, presumably
sorear masak: as of yesterday, yes 19:01
ashleydev pointme: dalek
where's the code for the dalek bot? 19:02
TimToady unless we take a p5-ish scope stack approach and just keep accumulating LEAVEs separate from call frames, to all be unwound together
then you're only blowing the scope stack, not the call frame stack :)
masak could someone help save this ticket from limbo? rt.perl.org/rt3/Ticket/Display.html?id=73074 -- TimToady, what's the value of &foo if a sub foo has not been declared?
sorear++
diakopter ashleydev: it's based on botnix 19:03
masak phasers are still one of my mid-term goals for Yapsi. I'd like to explore them and reach conclusions that no-one has thought about yet.
diakopter but its custom modules are in perl6/ on github
masak std: &foo
p6eval std 237d266: OUTPUT«ok 00:01 118m␤» 19:04
masak TimToady: if all subs are lexical, why isn't the above a compile-time error/warning?
diakopter std: goto goto;
p6eval std 237d266: OUTPUT«ok 00:02 115m␤»
sorear goto goto; = &goto(&goto()) 19:05
it's going to fail at runtime (No candidate for &goto takes 0 arguments)
but it's syntactically fine 19:06
masak :)
sorear twice the masak! 19:09
masak` apologies -- network trouble. 19:11
sorear Who remembers anything about infix:+ ? 19:11
I see the bracketless syntax occasionally
masak` I remember.
sorear something about it says "fossil"
masak` it's from the days of the Apocalypses.
PGE has the operators that way as well. 19:12
sorear I see.
TimToady std: my $fooʹ = 42; say $fooʹ;
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
TimToady perl6: my $fooʹ = 42; say $fooʹ;
p6eval pugs, rakudo e9e7fc: OUTPUT«42␤»
sorear unrelatedly: infix:<but> means I need to have a role composer lying around at runtime.
sorear doesn't want to write a second one for the compiler 19:13
masak` the compiler is just an early form of runtime :)
sorear well, for niecza it's a bit unpleasant, since the compiler is Perl 5 and the runtime is C#/Perl 6 19:14
moritz_ sorear: for eval() you also need a role composer :-)
sorear eventually I'm hoping to have the compiler in (portable) Perl 6 too
TimToady .u ʹ
phenny U+02B9 MODIFIER LETTER PRIME (ʹ)
masak` rakudo: role B { method x { say "OH HAI" 19:15
p6eval rakudo e9e7fc: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at line 22␤»
masak` argh.
sorear pretty decent error message 19:15
masak for once :)
moritz_ well, it would be nice to tell us what it found instead
TimToady std: role B { method x { say "OH HAI" 19:16
masak rakudo: role B { method x { say "OH HAI" } }; my $foo; eval q[$foo does B]; $foo.x
p6eval std 237d266: OUTPUT«===SORRY!===␤Unable to parse block at /tmp/Dd1GP8rJdo line 1:␤------> role B { method x ⏏{ say "OH HAI"␤Couldn't find final '}'; gave up at /tmp/Dd1GP8rJdo line 1 (EOF):␤------> role B { method x { say "OH HAI"⏏<EOL>␤
..expec…
rakudo e9e7fc: OUTPUT«Method 'x' not found for invocant of class ''␤ in main program body at line 22:/tmp/1mMLo60BdJ␤»
masak should the above work?
diakopter .u 았
phenny U+C558 HANGUL SYLLABLE ASS (았)
masak rakudo: role B { method x { say "OH HAI" } }; my $foo = 42; eval q[$foo does B]; $foo.x
p6eval rakudo e9e7fc: OUTPUT«OH HAI␤»
masak here on the channel, we try not to be 았-holes. 19:17
masak rakudo: say &foo.WHAT 19:29
p6eval rakudo e9e7fc: OUTPUT«Could not find sub &foo␤ in main program body at line 22:/tmp/Ry6az95fgz␤»
masak since no-one has spoken up, let me propose (1) that the use of an undeclared &foo be caught at compile time, and (2) that we find some better way to ask the question "is there a sub named &foo in this scope?" 19:31
sorear niecz: &foo 19:32
niecza: &foo
p6eval niecza 0fa6f23: OUTPUT«Internal error: failed to resolve lexical &foo in mainline at /home/p6eval/niecza/src/CSharpBackend.pm line 296.␤»
sorear ?
moritz_ std: &foo 19:34
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
sorear moritz_: I am confident that is a bug.
masak that what is a bug? STD.pm6's response? 19:35
sorear yes 19:36
&foo and $foo go through different code paths in STD 19:37
because the stuff after &foo is parsed as a category as well as a desigilname
it looks like the check_variable call is missing in the &foo case
masak pls fix :) ++sorear 19:40
sorear STD.pm6 falls into the "I don't understand it well enough to fix it on the first try, and I don't have the patience to fix it 10 times at 5 minutes per rebuild" category. :/ 19:43
masak fair enough. I can respect that. :) 19:45
masak anyway, it seems I can close #73074, because the old alpha behaviour doesn't adhere to what STD.pm6 would do, were it bug-free. 19:53
Tene std: my $fooʹ = 5; 19:57
p6eval std 237d266: OUTPUT«ok 00:01 117m␤»
Tene rakudo: my $fooʹ = 5; say $fooʹ; 19:58
p6eval rakudo e9e7fc: OUTPUT«5␤»
Tene Nice.
sorear .u ʹ
phenny U+02B9 MODIFIER LETTER PRIME (ʹ)
masak std: my $fooʹʹʹʹʹ = 5 19:59
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
TimToady phone 20:00
std: my $foo-ʹ = 42; say $foo-ʹ; 20:01
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
TimToady std: my $foo'ʹ = 42; say $foo'ʹ;
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
fuad hi 20:31
masak fuad! \o/ 20:32
fuad hey masak:)
Tene fuad! 20:34
fuad Tene ,yo:)
sorear Hello! 20:36
masak meanwhile, here at the .nl hackathon, we have a new suggestion for the name of "the sub which would be the opposite of &slurp": &clobber 20:40
any takers?
ash_ whats the opposite of slurp supposed to do? 20:43
put a bunch of text into a file?
masak aye.
potentially overwriting old content.
PerlJam I'm not sure that particular semantic is opposite of slurp, but it sounds like a good name anyway 20:44
frettled masak: &splur;
masak I think I'd like to see a "/path/to/file".IO.clobber($text) form
masak slaps frettled :)
ash_ what about something like: write-over, overruled, barf, spew, write, print, say :P
TimToady stuff
PerlJam &vomit
frettled &purls?
PerlJam :)
frettled hopes for another slap.
masak PerlJam: I had forgotten about that one. you insolent clod. :P
frettled ash_, PerlJam: high five! 20:45
mberends slaps frettled with a wet fish. frettled: enjoy!
frettled yummy.
masak ok, all you smug bikeshedders. forget I ever mentioned it. :) 20:45
frettled &tool8 20:46
masak std: &tool8
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
ash_ "/tmp/big-file.bak".spew(curl.the-internet);
masak ash_: needs an .IO in there for sanity.
ash_ good point
masak ash_: it's an operation on a file, not on a Str.
std: &subroutine-lookup-bug 20:47
ash_ ya, i remebmer that change now
p6eval std 237d266: OUTPUT«ok 00:01 118m␤»
ash_ remember*
frettled std: &°
p6eval std 237d266: OUTPUT«===SORRY!===␤Non-declarative sigil is missing its name at /tmp/DanWcR4Vnf line 1:␤------> <BOL>⏏&°␤Preceding context expects a term, but found infix & instead at /tmp/DanWcR4Vnf line 1:␤------> <BOL>⏏&°␤Parse failed␤FAILED
..00:…
frettled std: &C™
p6eval std 237d266: OUTPUT«===SORRY!===␤Confused at /tmp/T2vrgOqktB line 1:␤------> &C⏏™␤ expecting any of:␤ POST␤ bracketed infix␤ infix or meta-infix␤ postfix␤ postfix_prefix_meta_operator␤ statement modifier loop␤Parse failed␤FAILED
..00:01 120m␤»
frettled *sniff*
Tene masak: I've seen "spew" used in plenty of places. 20:54
Str.spew(IO); IO.spew(Str); # not possibly confusing to anyone ever 20:55
masak Tene: right. the reason we advocate &clobber is that it contains a clue as to what happens if a file is already there. 20:56
Tene masak: or you could support different write modes.
create, truncate, append
masak I'm unfamiliar with the middle one. 20:57
Tene replace?
overwrite?
masak ah; and the first one dies if something's there?
Tene Yes.
masak since it's supposed to be a tool for simplicity, it feels wrong to provide it with a lot of options.
Tene The second fails if nothing is there.
masak and if you genuinely don't care? 20:58
Tene Then you probably want both.
I expect that that's probably the most-expected default.
masak already, we've moved quite some distance away from the simplicity of &slurp.
Tene Sure. 20:59
PerlJam clobber works for me. :) 20:59
masak I think this is the fundamental problem with a hypothetical &spew function.
(and that's what &clobber attempts to solve)
if you do want finer-grained control, there's .open, .print and .close :)
frettled It's clobberin' time! 21:00
Tene clobber(..., :append) might be nice, but seems a little semantically weird
frettled masak: I can see the use for a thing that spews a whole bunch by appending, though.
PerlJam frettled: $hulk.smash($filename) # ;-) 21:01
frettled :D
Tene I do agree that requiring mode specification would be too much. Just trying to speculate if there's a simple way to reduce some errors.
masak "my &clobber function overwrote my old file!" -- "nuh, yah..."
Tene That function is already pretty firmly established in my mind as 'spew', though, so I'm not much help at speculating optimal names.
masak I hereby banish anyone with a gross liquid-related name for the function into a predeclared module for all eternity. 21:02
Tene That seems like a pretty weird sort of thing to worry about, to me. It would not have occurred to me to be concerned that someone might mistake an IO function for not doing IO? I'm not sure what the speculated mis-thought is.
masak the speculated mis-thought is about the failure modes of such a function. 21:03
Tene One slightly unusual IO failure mode I've seen before happens with people who always quit vim with ":wq!" every time with the ! 21:04
in the case that you don't have write permissions on the file, but *do* have write privs on the directory it's in, and you include the !, vim will delete the file and create a new one, thereby changing ownership of the resulting file. 21:05
Not something I think we're likely to do, just an associated memory.
masak I'm too stupid to connect the dots right now. but thanks anyway :)
sjohnson p6 friends 21:06
masak sjohnson! \o/
frettled Tene: but you're raising an interesting question: will &clobber clobber a file you don't have permissions to, if you have permissions to remove it from the directory? 21:07
sorear I propose slurp("foo") = "bar"
Tene frettled: *that* name suggests that it would try to do whatever it can.
Tene I recommend against it, though. 21:08
sorear or "foo".IO.contents = "bar"
frettled Tene: no, it does not quite suggest that
sorear Do subtypes have type objects?
sjohnson yo
frettled unlinking the file is not what happens when you "clobber" a file in normal unix operations, AFAIK.
masak sorear: I think so.
sorear masak: S12 hints that , as parameters, Foo :$bar where ... and SubFoo :$bar are identical 21:09
masak sorear: not sure that's related. 21:10
but yes, in a way they are.
sorear masak: in the not-passed case, should the anonymous subtype of the former have a type object of its own, or just use Foo?
masak subtypes are just condensed where clauses on nominal types.
it's a bit like the surreal numbers, in which a real number can have some infinitesimals clutching onto it. 21:11
mberends rakudo: say %*ENV.exists('PERL6LIB'); say %*ENV<PERL6LIB>.defined; say %*ENV<PERL6LIB>; 21:31
p6eval rakudo e9e7fc: OUTPUT«Bool::True␤Bool::True␤lib␤»
mberends rakudo: say %*ENV.exists('FOO'); say %*ENV<FOO>.defined; say %*ENV<FOO>; 21:34
p6eval rakudo e9e7fc: OUTPUT«Bool::False␤Bool::True␤␤»
masak submits rakudobug
mberends++
diakopter was clobber selected? 21:37
or are suggestions still being taken?
masak no conclusion has been reached.
I know an overwhelming acclaim when I see one :) 21:38
diakopter noise & attention aren't acclaim
mberends clobber does not describe what happens in the create new file scenario.
masak diakopter: exactly.
diakopter oh, I see 21:39
TimToady mentioned stuff
on that note, I suggest jam
masak both feel mostly non-verby to me...
diakopter ??
mberends "put"
diakopter they're both verbs that require indirect objects
masak yes.
but they are chiefly nouns. 21:40
fsvo "chiefly"
diakopter I heartily disagree
masak adds a notch to the bikeshed board
sorear diakopter: &spew was selected long ago 21:41
bikeshedding at this point is just a harmless diversion, with no effect on anything
masak in what sense what &spew selected long ago? 21:42
I don't see it in the spec.
diakopter that's just plain wrong. things in the spec are changed quite often.
sorear but not as a result of bikeshedding
diakopter None Dare Call It Bikeshedding
masak s:2nd/what/was/ 21:43
diakopter Anyone can call something bikeshedding to slight the topic.
apparently.
frettled Are we going to bikeshed about bikeshedding now?
masak it doesn't take much to actually make it bikeshedding.
I draw the line at about four or five name proposals, which were quickly reached in this case. 21:44
claiming that that's not bikeshedding is just meta-bikeshedding.
diakopter then you should have told everyone on the channel that any further attempts to name it would be considered bikeshedding by you.
especially when asked directly by me. 21:45
masak I wasn't aware that everyone else would be so interested in what I consider bikeshedding.
I'll know that till next time.
let's talk about sorear's claim that &spew was decided on long ago instead. 21:46
frettled Not that there's anything wrong with that.
dukeleto wonders: who will bikeshed the bikeshedders?
masak that seems to be a slightly more productive line of thought.
diakopter agrees
masak sorear: what in the world do you mean, and how?
frettled I present the following evidence that spew is something else ;) :www.perlmonks.org/?node_id=124838 21:47
frettled Seriously, though: "spew" is often used as the opposite of "slurp", it seems that there is a good case for using that. 21:48
diakopter even if sorear is right that spew was selected, that doesn't mean that synopsis was rolled up and sealed with wax
frettled Additionally, it's merely four letters long, whereas "clobber" is seven. If there is no particularly good reason for selecting the longer name, then the longer name loses with pragmatists like me. 21:49
frettled diakopter: it may have been sealed with spew, however ;) 21:49
diakopter heh
frettled …I hope nobody lost their meal over that. 21:50
masak diakopter: there's no "spew" in the synopses.
frettled: there is a good reason for selecting the longer name. 21:51
sorear there is, however, spew in viv
masak viv isn't spec, and especially not in that sense.
frettled: "spew" might as well mean "create a new file" as "append to an old file". "clobber" unambiguously means "overwrite any old file". 21:52
diakopter it was in gen_mutable_pmc.pl in parrot
(as added by jnthn) 21:53
masak ok.
frettled masak: not quite unambiguously, as per my concern, and apparently also mberends's concern.
mberends masak: %*ENV and 'use' strange behaviour: gist.github.com/614159 21:54
masak mberends: thanks.
masak submits rakudobug 21:55
mberends++ 21:56
dalek ecza/master: 53a549d | sorear++ | / (2 files):
Hack importation of classes into working
22:39
ecza/master: 6dbac00 | sorear++ | / (4 files):
Move MRO calculation to compile time
masak blogged: strangelyconsistent.org/blog/to-tak...-of-bitrot 22:40
zzz & 22:43