»ö« | perl6.org/ | nopaste: paste.lisp.org/new/perl6 | evalbot usage: 'perl6: say 3;' or rakudo:, alpha:, pugs:, std:, or /msg p6eval perl6: ... | irclog: irc.pugscode.org/ | UTF-8 is our friend!
Set by lichtkind on 5 March 2010.
quietfanatic rakudo: state $x = 0; say $x 00:07
p6eval rakudo e6863e: OUTPUT«Symbol '$x' not predeclared in <anonymous>␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 152 (compilers/pct/src/PCT/HLLCompiler.pir:108)␤»
quietfanatic state variables not working?
[particle] do state variables need scope? 00:11
rakudo: my state $x = 0; say $x
p6eval rakudo e6863e: OUTPUT«Malformed my at line 11, near "state $x ="␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
[particle] well, either they're not implemented, or they don't need scoping and they're not implemented :)
sjohnson rakudo: sub cool { state $n = 0; $n++; say $n; }; cool() for ^5; 00:19
p6eval rakudo e6863e: OUTPUT«Symbol '$n' not predeclared in cool␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 152 (compilers/pct/src/PCT/HLLCompiler.pir:108)␤»
sjohnson rakudo: sub cool { my state $n = 0; $n++; say $n; }; cool() for ^5; 00:20
p6eval rakudo e6863e: OUTPUT«Malformed my at line 11, near "state $n ="␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
sjohnson yeah, i have no idea :/
TimToady state is a scope declarator already 00:23
pugssvn r30733 | lwall++ | [STD] not all expression terminators are valid statement terminators 00:27
sjohnson it is possible... that the online rakudo here, isn't up to snuff with the latest perl6 technologies. 00:29
lue ohai
sjohnson and by that, i mean... latest rakudo build
i wonder if you can get rakudo to spill the beans as to what build it is
quietfanatic alpha: state $x = 0; say $x 00:31
p6eval alpha 30e0ed: OUTPUT«0␤»
lue rakudo: exec('ls ./') 00:33
p6eval rakudo e6863e: OUTPUT«Could not find sub &exec␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
lue What was it again...
rakudo: run('ls ./') 00:37
p6eval rakudo e6863e: OUTPUT«build␤Configure.pl␤CREDITS␤docs␤dynext␤lib␤LICENSE␤Makefile␤parrot␤perl6␤perl6.c␤perl6_group.c␤perl6_group.h␤perl6_group.o␤perl6.o␤perl6.pbc␤README␤src␤t␤Test.pir␤Test.pm␤tools␤»
lue rakudo: run ('./perl6 -v')
p6eval rakudo e6863e: OUTPUT«This compiler is built with the Parrot Compiler Toolkit, parrot revision 46819.␤»
diakopter grr
lue sorry. 00:38
bkeeler rakudo: class C does Positional does Associative { }
p6eval rakudo e6863e: OUTPUT«get_attr_str() not implemented in class 'Sub'␤current instr.: 'perl6;Code;multi' pc 13975 (src/builtins/Num.pir:234)␤»
bkeeler rakudo: class C does Positional { }
p6eval rakudo e6863e: ( no output )
bkeeler rakudo: class C does Associative { } 00:39
p6eval rakudo e6863e: ( no output )
bkeeler rakudo: class C does Associative { }; use MONKEY_TYPING; augment class C does Positional { }
p6eval rakudo e6863e: OUTPUT«get_attr_str() not implemented in class 'Sub'␤current instr.: 'perl6;Code;multi' pc 13975 (src/builtins/Num.pir:234)␤»
bkeeler Hmmmmmmm. Seems impossible for a class to do both Associative and Positional 00:40
lue std: class C does Positional does Associative { }
p6eval std 30732: OUTPUT«ok 00:01 110m␤»
TimToady yeah well
std: class C does Foo does Bar { } 00:41
p6eval std 30732: OUTPUT«ok 00:01 110m␤»
lue syntactically correct though. [can't wait for the std interpreter! :)]
TimToady std: say 1 if 2 if 3 { say 3 }
p6eval std 30732: OUTPUT«ok 00:01 111m␤»
TimToady ENOTYET
quietfanatic Okay, what on earth did I do to get 'Can only transform an Object to p6opaque'?
TimToady bbl & 00:42
quietfanatic EGOTTAGO
snarkyboojum std: use MONKEY_TYPING; my class C does Associative { }; augment class C { } 00:46
p6eval std 30732: OUTPUT«ok 00:01 122m ./lib/MONKEY_TYPING.pm6␤ok 00:01 111m␤»
snarkyboojum rakudo: use MONKEY_TYPING; my class C does Associative { }; augment class C { }
p6eval rakudo e6863e: OUTPUT«Method 'HOW' not found for non-object␤current instr.: 'perl6;C;!class_init_11' pc 490 (EVAL_1:214)␤»
snarkyboojum rakudo: use MONKEY_TYPING; class C does Associative { }; augment class C { }
p6eval rakudo e6863e: ( no output )
diakopter "Since the four-based genetic code is read in three-letter triplet combinations, the scientists devised a new code in which the 64 possible triplets symbolize the letters of the alphabet and punctuation. 00:55
Read more: www.time.com/time/health/article/0,...z0oWN1y2DO
wheh
ooo a "new code" 00:56
rdesfo hello Diaspora is an open source facebook alternative project written in ruby. Does any one know it there is a similar perl project? 00:59
diakopter probably not in Perl 6, yet 01:01
lue diakopter: I thought of DNA being a secret code first! :) 01:05
The ironic thing this is the D* team love Ruby because, to put it in P6 terms, of its TIMTOWTDI-ness. :) 01:06
diakopter std: say 1 if 2 if 3 { say 3 }
p6eval std 30733: OUTPUT«===SORRY!===␤Missing semicolon at /tmp/9kQNhL52Zn line 1:␤------> say 1 if 2⏏ if 3 { say 3 }␤Parse failed␤FAILED 00:01 111m␤»
diakopter std: say 1 if 2 = 3 01:08
p6eval std 30733: OUTPUT«ok 00:01 111m␤»
diakopter rakudo: say 1 if 2 = 3
p6eval rakudo e6863e: OUTPUT«Cannot assign to readonly value␤current instr.: '&die' pc 18058 (src/builtins/Junction.pir:381)␤»
lue
.oO(diakopter: This Time article is talking about _everything_ I've been thinking of, but done by the dark side)
The only difference between me and *Venter* is that I'm trying to make DNA fit Unicode [I know it's crazy, but hey] to find messages in the human genome. 01:10
( That, and I want to throw DNA into the proverbial blender and make a TARDIS :D )
diakopter lue: I thought you were writing an NES emulator 01:11
lue That, and a sidequest to decode DNA. 01:13
I can actually upload a zip file that contains a rudimentary DNA "decoder" (P6 of course), and several "decoded" noncoding DNA sequences.
s/zip/tar.bz2/
lue goes and preps the archive, JIC 01:14
lue
.oO(I actually could upload this dna-to-binary script as a perl6 example, but it's horribly rudimentary)
01:20
lue I curious as to what the "standard perl library" should be. [one of the TBD specs] 01:40
snarkyboojum let's have a social network of social network sites :P 02:11
lue I think that's actually an eventual goal of D* 02:13
although not quite phrased that way by them :) 02:14
snarkyboojum lue: put your decoder on github :)
lue The fight to stop Venter (again)!
...from patenting the creation of Life, specifically. 02:15
[right now I'm working on euler problems for fun]
diakopter I guess I need to set my blog's timezone to new zealand to ensure its place in the planetsix roll is better 02:19
Fiji will work. 02:21
weird. 02:22
it shows the last-edited time of the post
oh well.
lue That's flawed :D 02:23
(great advertising for Fiji though :) )
sorear ponders making viv output use MooseX::Role::Parameterized 02:44
quietfanatic So, 'Can only transform an Object to p6opaque'... 02:46
does that mean 'only Objects can be transformed to p6opaque'
or 'Objects can only be transformed to p6opaque'?
diakopter 'Objects can be transformed only to p6opaque' is slightly more clear, imho 02:48
quietfanatic Actually it seems to mean the latter, examining the source 02:49
*former
not latter
diakopter oh
'Can transform only Objects to p6opaque' then
quietfanatic That only leaves the mystery of why I'm getting this error.
Somebody's /* Sanity check. */ is doing its job :) 02:50
dalek meta: r283 | diakopter++ | trunk/Sprixel/ (4 files):
[perlesque] first try to fix bug(s) exposed by self.t
02:53
pugssvn r30734 | coke++ | ignore more *.rakudo files. 02:54
diakopter hrm. didn't work. 02:55
[Coke] perl6: say <a b c d e>.map: * ~ 'A' 03:00
p6eval pugs: OUTPUT«*** Cannot cast from VList [VStr "InfA"] to Pugs.AST.Types.VCode (VCode)␤ at /tmp/H341JnEJpl line 1, column 5 - line 2, column 1␤»
..rakudo e6863e: OUTPUT«No candidates found to invoke␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
..elf 30734: OUTPUT«Use of uninitialized value in subroutine entry at ./elf_h line 197.␤Can't use string ("") as a subroutine ref while "strict refs" in use at ./elf_h line 197.␤ at ./elf_h line 5881␤»
pugssvn r30735 | svatsan++ | [u4x] use HTML::Template 03:04
[Coke] code in day 22 complains about needing MONKEY_TYPING. 03:06
lue rakudo: say fac(5) 03:11
p6eval rakudo e6863e: OUTPUT«Could not find sub &fac␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
lue rakudo: say factorial(5)
p6eval rakudo e6863e: OUTPUT«Could not find sub &factorial␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
lue grr... Is there a factorial function? 03:12
rakudo: say 5!
p6eval rakudo e6863e: OUTPUT«Confused at line 11, near "say 5!"␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
[Coke] class PieceOfString { has Int $.length; } ; multi sub infix:<+>(PieceOfString $lhs, PieceOfString $rhs) { PieceOfString.new(:length($lhs.length, $rhs.length)); }; my $a = PieceOfString.new(:length(4)); my $b = PieceOfString.new(:length(6)); my $c = $a + $b; say $c.length;
lue: no, but it's easy to write one, here:
multi sub postfix:<!>(Int $n) { [*] 1..$n;
lue Ok.
[Coke] }
lue dankon 03:13
[Coke] see: perl6advent.wordpress.com/2009/12/2...erloading/
rakudo: class PieceOfString { has Int $.length; } ; multi sub infix:<+>(PieceOfString $lhs, PieceOfString $rhs) { PieceOfString.new(:length($lhs.length, $rhs.length)); }; my $a = PieceOfString.new(:length(4)); my $b = PieceOfString.new(:length(6)); my $c = $a + $b; say $c.length;
p6eval rakudo e6863e: OUTPUT«46␤»
[Coke] that sample code from day 22 looks wrong. what is the + supposed to be doing there? 03:14
it's creating a new POS but is passing a list to :length? 03:15
(you end up with a POS of length (4,6)
quietfanatic It ought to conflict with the type constraint of Int. 03:16
rakudo: class PieceOfString { has Int $.length; } ; multi sub infix:<+>(PieceOfString $lhs, PieceOfString $rhs) { PieceOfString.new(:length($lhs.length, $rhs.length)); }; my $a = PieceOfString.new(:length(4)); my $b = PieceOfString.new(:length(6)); my $c = $a + $b; say $c.length.WHAT;
p6eval rakudo e6863e: OUTPUT«Seq()␤» 03:17
lue
.oO(now to create a combinatronics thingy :) )
.oO(that's what the factorial is for)
snarkyboojum rakudo: say pir::fact__ii(5) 03:21
heh
p6eval rakudo e6863e: OUTPUT«120␤»
pugssvn r30736 | coke++ | add day 22 spec tests (one fudged, one dodgy, and one spec change?) 03:22
[Coke] that's probably faster (but less portable.) 03:23
snarkyboojum aye :)
rakudo: say pir::fact__ii(20)
p6eval rakudo e6863e: OUTPUT«2432902008176640000␤»
lue rakudo: multi sub postfix:<!>(Int $n) { [*] 1..$n; }; say 0! 03:28
p6eval rakudo e6863e: OUTPUT«1␤»
JimmyZ rakudo: Q:PIR{ .loadlib 'obscure_ops' }; say pir::gcd_iii(6,20);
p6eval rakudo e6863e: OUTPUT«error:imcc:syntax error, unexpected LOADLIB ('.loadlib')␤ in file 'EVAL_1' line 63␤error:imcc:syntax error, unexpected PREG, expecting '(' ('$P45')␤ in file 'EVAL_1' line 68␤syntax error ... somewhere␤current instr.: 'perl6;PCT;HLLCompiler;evalpmc' pc 987
..(compilers/pct/src/PCT/HLL…
snarkyboojum rakudo: say pir::fact__ii(60) 03:33
p6eval rakudo e6863e: OUTPUT«-8718968878589280256␤»
snarkyboojum rakudo: multi sub postfix:<!>(Int $n) { [*] 1..$n; }; say 60!
p6eval rakudo e6863e: OUTPUT«8.32098711274139e+81␤»
snarkyboojum yay rakudo!
boo parrot
lue
.oO(here here!)
JimmyZ rakudo: say pir::gcd_iii(6,20); 03:34
p6eval rakudo e6863e: OUTPUT«error:imcc:syntax error, unexpected PREG, expecting '(' ('$P45')␤ in file 'EVAL_1' line 22837763␤syntax error ... somewhere␤current instr.: 'perl6;PCT;HLLCompiler;evalpmc' pc 987 (compilers/pct/src/PCT/HLLCompiler.pir:542)␤»
JimmyZ :(
snarkyboojum rakudo: say pir::gcd__iii(6, 20) 03:35
p6eval rakudo e6863e: OUTPUT«2␤»
snarkyboojum rakudo: say pir::gcd__iii(612, 64) 03:36
p6eval rakudo e6863e: OUTPUT«4␤» 03:36
JimmyZ rakudo: say pir::lcm_iii(6, 20); 03:37
p6eval rakudo e6863e: OUTPUT«error:imcc:syntax error, unexpected PREG, expecting '(' ('$P45')␤ in file 'EVAL_1' line 22837763␤syntax error ... somewhere␤current instr.: 'perl6;PCT;HLLCompiler;evalpmc' pc 987 (compilers/pct/src/PCT/HLLCompiler.pir:542)␤»
snarkyboojum rakudo: say pir::lcm__iii(12, 64)
p6eval rakudo e6863e: OUTPUT«192␤»
snarkyboojum JimmyZ: double _
JimmyZ rakudo: say pir::lcm__iii(6,20);
p6eval rakudo e6863e: OUTPUT«60␤»
JimmyZ oh 03:38
TimToady pugs: multi sub postfix:<!>(Int $n) { [*] 1..$n; }; say 60!
p6eval pugs: OUTPUT«8320987112741390144276341183223364380754172606361245952449277696409600000000000000␤»
JimmyZ rakudo: multi sub postfix:<!>(Int $n) { [*] 1..$n; }; say ~60!
p6eval rakudo e6863e: OUTPUT«8.32098711274139e+81␤»
spinclad rakudo: class PieceOfString { has Int $.length; } ; multi sub infix:<+>(PieceOfString $lhs, PieceOfString $rhs) { PieceOfString.new(:length($lhs.length + $rhs.length)); }; my $a = PieceOfString.new(:length(4)); my $b = PieceOfString.new(:length(6)); my $c = $a + $b; say $c.length 03:39
p6eval rakudo e6863e: OUTPUT«No applicable candidates found to dispatch to for 'infix:<+>'. Available candidates are:␤:(PieceOfString $lhs, PieceOfString $rhs)␤␤current instr.: 'infix:<+>' pc 415 (EVAL_1:0)␤»
spinclad [Coke]: i suspect the lengths should be added. 03:40
rakudo: class PieceOfString { has Int $.length; } ; multi sub infix:<`>(PieceOfString $lhs, PieceOfString $rhs) { PieceOfString.new(:length($lhs.length + $rhs.length)); }; my $a = PieceOfString.new(:length(4)); my $b = PieceOfString.new(:length(6)); my $c = $a ` $b; say $c.length 03:41
p6eval rakudo e6863e: OUTPUT«10␤»
snarkyboojum or use our? 03:42
rakudo: class PieceOfString { has Int $.length; } ; our multi sub infix:<+>(PieceOfString $lhs, PieceOfString $rhs) { PieceOfString.new(:length($lhs.length + $rhs.length)); }; my $a = PieceOfString.new(:length(4)); my $b = PieceOfString.new(:length(6)); my $c = $a + $b; say $c.length
spinclad [Coke]: (and one infix:<+> hides the other)
p6eval rakudo e6863e: OUTPUT«10␤»
spinclad ooh, yes, that's better. our++
(though it's still debatable whether 'adding' two bits of string is 'more like' addition or catenation-of-strings-of-characters) 03:45
(it builds a nice bridge between operators) 03:46
snarkyboojum or tying :)
sorear quietfanatic: sounds like you're running into the metamodel fault line between perl6 and parrot 03:47
spinclad snarkyboojum: alas, knot theory lies outside both arithmetic and lexicology
snarkyboojum :) 03:48
quietfanatic sorear: I figured that was the issue, but I can't reproduce it i nsimpler code.
snarkyboojum the ⌘ infix operator :)
sorear "box" 03:49
snarkyboojum isn't fluent in unicode (yet)
sorear try .u
sorear has finally figured out what mangle.pl is for 03:50
spinclad .u ⌘
phenny U+2318 PLACE OF INTEREST SIGN (⌘)
snarkyboojum that won't do then :)
spinclad how about apple's command sign? except that only works on macs 03:51
.u knot 03:53
phenny spinclad: Sorry, no results for 'knot'.
spinclad unicode, what good are you? 03:54
.u trefoil
phenny spinclad: Sorry, no results for 'trefoil'.
spinclad .u square
phenny U+32CC SQUARE HG (㋌)
sorear spinclad: apple's command sign IS place of interest sign
spinclad .u granny
phenny spinclad: Sorry, no results for 'granny'.
spinclad sorear: thanks, i wondered 03:55
TimToady
.oO(Sweets for the sweet, and knots for the naughty...)
04:00
sorear TimToady: Do you know what's up with STD parsing of sigspace? 04:09
pugssvn r30737 | sorear++ | [viv] Implement role translation 04:18
sorear I love how prompt pugssvn is
TimToady I haven't looked at the sigspace problem yet, but might be related to using EXPR to parse regexes, since EXPR tosses whitespace between terms and infixes 04:20
sorear in theory, STD::Regex::ws only matches the null string if %*RX<s>
I've done a cursory look 04:21
pugssvn r30738 | lwall++ | [STD] don't accidentally use the same lexpad for different multis
sorear in VAST::package_def::emit_p5, what is the call to _AUTOLEXpeek for?
TimToady there was some hanky panky in gimme5 to load in termish before EXPR gets called, since EXPR doesn't have a peek routine, iirc 04:24
sorear is having this urge to refactor VAST::package_def::emit_p5
TimToady it might be forced a different way now though, so possibly a fossil
sorear ok I'll throw it out 04:25
viv-STD.pmc won't work the first time anyway
TimToady not without something to feed the LTM generator
sorear oh sure
TimToady and VAST isn't quite the same as the ast that gimme5 uses anyway
sorear I'm going to implement /that/ real soon now 04:26
I mean more like... small bugs
since I don't really have a way to test viv
TimToady I actually have code sitting around to try to switch gimme5 to using Data::Dumper instead of YAML::XS, but it turned out to be buggier than YAML
sorear ultimately I'd like to just use Storable
TimToady I just tested by translating little bits and seeing if they came out identical to gimme5's 04:27
sorear perl5 has no trouble with 8-bit data in heredocs
TimToady well, ultimately I'd like to just ask the function object itself what it things :)
but that sort of thing was too hair for p5
*hairy 04:28
sorear from a performance standpoint, how do slangs and LTM interact? 04:30
TimToady at the moment it has to rederive any affected LTM tables every time you derive a new slang
sorear has been running thought experiments on a regex -> C compiler
TimToady it does shortcut those categories that are not affected, however
sorear right; I wonder if things can be done better 04:31
TimToady and just reuses the parent's LTM table on those
I'm sure they can, I was just going for clean first
FSDO clean
in particular, the operator defs in CORE.setting actually produce deep recursion warnings currently
because each def derives a new language 04:32
sorear what is the function of $lvl?
TimToady in viv?
TimToady generally those will just be for indent levels on diagnostics 04:33
but they could also be used to manage a stack of contexts such as a highlighter would run off of. 04:34
and, in fact, we do use it currently to examine contexts 04:35
$context[$lvl] = $self in Base's emit_p5
sorear oops. 04:36
I've been rewriting that stuff into contextuals
or maybe that's a good thing? 04:37
TimToady hard to look at your grandparent contextual without CALLER::CALLER though
TimToady or even your parent, unless you store it before clobbering it 04:37
sorear hasn't used SUPER::emit_p5 04:38
TimToady it's more useful in the un6 bits, where mostly you're just copying stuff over with tweaks
sorear yeah 04:39
dalek meta: r284 | diakopter++ | trunk/Sprixel/ (12 files):
[perlesque] made all the tests pass again. I think. Also added new Assertion
04:50
sorear my greatest annoyance with viv right now is that I can never remember if $self->{foo} is going to be VAST::foo or an array of VAST::foo 04:53
dalek meta: r285 | diakopter++ | trunk/Sprixel/ (2 files):
[perlesque] sigh. remove debugging again.
04:55
diakopter hm, now that parrot svn is off perl.org, dalek's polling interval could be safely reduced significantly 04:59
dalek meta: r286 | diakopter++ | trunk/Sprixel/ (2 files):
[perlesque] still more fix(es)
05:00
diakopter [OT, slightly] are you *kidding* me?!? www.physorg.com/news193551675.html 05:02
phenny: tell pmurias after much travail, all tests successful again.
phenny diakopter: I'll pass that on when pmurias is around.
dalek meta: r287 | diakopter++ | trunk/Sprixel/ (2 files):
[perlesque] spello
05:15
pugssvn r30739 | sorear++ | [viv] Implement parametric role translation 05:17
diakopter goodness gracious
sorear ? 05:18
diakopter at this rate emit_p5 will be done by July
a few hundred months sooner than I could've done it
diakopter thinking about what to do next...(and dreading Cursor translation, manual or automatic), my heart tells me to jump right into making all the runtime system objects (non-user-visible, or at least non-user-extensible) for Perl 6.. in a naive, totally-unoptimized fashion, a la yapsi 05:26
urk 05:27
diakopter 'cept.. that wouldn't help the bootstrapping effort. 05:33
:'(
:`( 05:34
:,(
sorear in a few hours, I'll be out of town for 4-5 days (and away from 'net) 05:47
so... don't wait for me
I'll make do with whatever's there when I get back
sorear TimToady: Can you explain the fields in a RE_ast tree? 05:53
method: a,i,r,s,dba,min,rest
(name makes sense)
sequence: a,i,r,s,dba,min,zyg 05:54
ast: decl,min,pkg
min seems to be 12345 a lot 05:55
a,i,r,s seem to be the eponymous regex flags 05:58
diakopter dba is doing-business-as
(as in, alias) 05:59
snarkyboojum this is an utterly ridiculous way of testing colomon++s beautiful advent day17 mandlebrot post isn't it gist.github.com/408538 :) 06:31
snarkyboojum esp. considering that it takes over 50 seconds on my laptop to run that one test :P 06:33
m6locks :< 06:36
pugssvn r30740 | sorear++ | [viv] Add a framework for generating LTM ASTs 06:43
snarkyboojum or there's this one which runs $height tests, e.g. 32, (instead of just one) gist.github.com/408545 06:44
:)
sorear diakopter: finishing the regex compiler should be pretty smoppy at this point 06:49
TimToady zyg is zygotes == kids, but sorts last :) 06:49
a,i,r,s are :i, :r, :s flags, yes 06:50
sorear STD parsing does not make :dba easy to access 06:51
TimToady could just ->Str a higher node and parse 06:54
pugssvn r30741 | snarkyboojum++ | [t/spec] Initial tests for Perl 6 Advent Calendar Day 17: Making Snowmen 06:55
TimToady iirc, decl are like :my nodes
and rest is usually random stuff to add on, like method args 06:56
sorear "is usually"? 06:59
moritz_ good morning
sorear where is the code that interprets re_ast?
hello moritz_
snarkyboojum moritz_ o/ 07:01
diakopter sorear: finishing the regex compiler in csmeta you mean? or your work in viv?
fell asleep during Mentalist. now for Fringe. 07:02
sorear diakopter: the one in viv 07:04
lue I bid you adieu 07:10
snarkyboojum lue: adieu 07:11
pugssvn r30742 | lwall++ | [Spec] :() is now always signature. Use foofix:[...] as the general op form 07:15
moritz_ now that's some to and fro 07:16
didn't we have :{} first? :-)
pugssvn r30743 | lwall++ | [sub.t] switch to foofix:['op'] form from :() which is reserved for sigs now 07:17
pugssvn r30744 | lwall++ | [Cursor] now treat :() on name extension as a sig always 07:21
r30744 | [Cursor] don't introduce a stopper for circumfix until we're *in* the circumfix
r30744 | (actually, don't set stopper there either, just use a $*GOAL)
r30744 | [STD] stop correctly on goal that is set by a circumfix
r30745 | snarkyboojum++ | [t/spec] Updated tests for Advent Calendar Day 17 to include the snowman operator and feedback from moritz_++
sorear TimToady: what's min in RE_ast? 07:44
diakopter maybe the minimum number of chars the pattern must match? 07:50
(I don't know)
sorear diakopter: it shouldn't have 5 digits that way ... 08:03
BrowserUk ? 09:24
moritz_ good morning BrowserUk 09:26
BrowserUk Morning moritz. 09:43
moritz_ seeks spec clarification for the MAIN sub table in S06 09:53
the S06 table talks about spacey values 09:54
but the system shell decomposes the argument string into array items (unless quoted)
should the runtime support try to re-assemble them to support "spacey" values? 09:55
or do we exepct the user to properly quote them? (I'd prefer that)
BrowserUk On Win, there's a system call to retrieve the raw command line if it helps? 09:56
moritz_ BrowserUk: that's interesting to note
BrowserUk But it doesn't do wildcard expansions. 09:57
moritz_ aye, I've put things like BEGIN { @ARGV = map glob, @ARGV if $^O eq 'Win32' } or so into some of my scripts 09:59
BrowserUk There is a file (library of source I don;t remember) kicking around the P5 sources that if enabled at build time, gives perl wild-card expansion. I think Tye wrote it, but I don;t think it gets used much. 10:01
moritz_ well, if it's a build option it's nothing I can rely on as a module author
anyway, I'm pretty happy with the eval/die/warn/$@ changes in perl 5.13.1 10:02
BrowserUk Agreed. (on both matters.) 10:03
That one change is (IMO) more significant than all of those in 5.12. (The yadda yadda thing doesn't really float my boat :) 10:04
mathw I think I need to see the changelog for 5.13.1 10:05
moritz_ well, the Unicode improvements in 5.12 were pretty neat 10:06
BrowserUk Jenda has (or had) a module called G.pm that did tranparent wild card expansion on @ARGV also but it conflicted with -s, so I stopped using it (I like the simplicity of -s for quick scripts).
moritz_ but only relevant for you if you actually do Unicode text processing
BrowserUk I'm sure tehy were, but I have had to use Unicode on exactly 2 occasions in the last 8 years. And they were only for pulling stuff off the web. But I can t would be important to those that use it. 10:08
Eek. s/can t/can see/ (freudian!)
Getting back to the SO6 thing, ... it's very hard to see how you would reconstruct spacey things without the user quoting them? 10:11
moritz_ it would be mostly guessing 10:17
looking for unbalanced quote characters or so
mathw Oh that is nice. 10:22
mathw looks forward to Perl 5.14 now
BrowserUk ruoso: I've been exploring the Erlang experience of adding SMP support on top of their green threads. They do run green threads inside each kernel thread. it also seems that they started out running socket IO in a separate IO scheduler (green threads inside a dedicated kernel thread), but then reverted to doing it inline (cooperatively). **Upshot** It looks like you are right to want to not use a dedicated IO kernel thread. (At least for sockets. I 10:37
haven't seen anything about file IO yet)
islandmyth hello 11:42
moritz_ hi 11:43
islandmyth <tag>some text here</tag> - i wanted to search and replace this tag with XXX . is it possible? 11:44
moritz_ with Perl 6? 11:45
rakudo: say 'some text with <tag>some text here</tag>, really'.subst(/ '<tag>' .*? '</tag>'/, 'XXX', :g)
p6eval rakudo e6863e: OUTPUT«some text with XXX, really␤» 11:46
islandmyth thank you 11:47
by the way can i use regular expression? 11:48
moritz_ the things inside /.../ is a regular expression 11:49
*thing
islandmyth @moritz_ gracias 11:53
moritz_ de rien 11:54
moritz_ has to learn Spanish at some point
pmichaud good morning, #perl6 11:59
moritz_ good morning, pmichaud
hugme: reload 12:00
hugme moritz_: reloaded successfully
moritz_ hugme: add patrickas to process-cmd-args 12:01
hugme hugs patrickas. Welcome to process-cmd-args!
pmichaud exit 12:02
ww
moritz_ I'm pleased to announce that patrickas++ took up this week's challenge, and wrote some code to support the MAIN sub in Rakudo 12:05
it's in this repo for now: github.com/moritz/process-cmd-args (I forked so that I can use hugme to add contributors, in accordance to patrickas' wishes)
pmichaud excellent. patrickas++ moritz_++ 12:06
masak oh hai, #perl6
moritz_ pmichaud: if you have any ideas for LHF to attract new contributors, dump them here or in misc/helpnow/README in the pugs repo 12:07
pmichaud moritz_: will do 12:08
masak moritz_: what are your observations about contributors so far? I've not been paying enough attention -- do different types of tasks attract different amounts of people?
moritz_ masak: yes. Web stuff (which doesn't require Perl 6) attracts more people :-) 12:09
masak thought so. :)
moritz_ masak: we've had two takers for writing Perl 6 code/tests so far, patrickas++ and bubaflub++
masak \o/
moritz_ even if we don't gain any more contributors, having two is already great 12:10
masak Web stuff doesn't have the Perl 6 learning curve attached to it. also, it's very visible and has a tight development loop.
moritz_ right
we *really* should do that tryrakudo website 12:11
moritz_ but I'd like for persistent REPL before starting with it 12:12
s/<before 'for'>/to wait /
patrickas speaking of the devil :-) ola! 12:14
moritz_ \o/ 12:15
pmichaud unless my day gets more unpleasant surprises, I think I'll be able to have sorear++'s patches in today (for REPL)
masak shivers in anticipation 12:16
moritz_ has high hopes
masak it's be like Christmas in May.
s/s/ll/
moritz_ speaking of christmas in may, I'm please to read that Debian has enabled parallel execution of startup scripts by default 12:18
patrickas what does the patch add? 12:19
moritz_ you'll be able to say
my $x = 3;
say $x;
on the interactive rakudo prompt
previously all lexical variables were forgotten
patrickas so it remembers vars between lines whcih I guess it didn't ? 12:20
cool!
moritz_ (or rather went out of scope, not forgotten)
right
bbkr rakudo: my $x = Inf; say ($x.Int / 1).WHAT; 12:48
p6eval rakudo e6863e: OUTPUT«Rat()␤»
bbkr what does "use MONKEY_TYPING;" do ? 12:56
JimmyZ rakudo: augment 12:57
p6eval rakudo e6863e: OUTPUT«Malformed augment at line 11, near ""␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
JimmyZ bbkr: augment
masak bbkr: it allows you to modify the definition of classes after they've already been defined.
masak bbkr: en.wikipedia.org/wiki/Monkey_patch 12:57
bbkr thanks :)
masak it's both very useful and quite frowned-upon, so it's been hidden behind a capital-letters pragma. 12:58
bbkr rakudo: class Quill {}; my $a = Quill.new(); 13:00
p6eval rakudo e6863e: OUTPUT«Confused at line 11, near "my $a = Qu"␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
masak any leads on that one yet? 13:00
bbkr rakudo: say '16'{'%x'} # checking if rt.perl.org/rt3/Ticket/Display.html?id=74112 is fixed 13:02
p6eval rakudo e6863e: OUTPUT«Method 'postcircumfix:<{ }>' not found for invocant of class 'Str'␤current instr.: '!postcircumfix:<{ }>' pc 14645 (src/builtins/Code.pir:20)␤»
bbkr looks like fixed, where tests for such case should go str or blocks-and-statements ? 13:05
bbkr rakudo: grammar G { regex foo { (\d+) <?{ $0.chars > 4 }> '!' 13:08
} }; say $_ ~~ /<G::foo>/ for '1234!', '123456!'
p6eval rakudo e6863e: OUTPUT«Malformed regex at line 11, near "foo { (\\d+"␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
bbkr rakudo: grammar G { regex foo { (\d+) <?{ $0.chars > 4 }> '!' } }; say $_ ~~ /<G::foo>/ for '1234!', '123456!'
p6eval rakudo e6863e: OUTPUT«regex assertion not terminated by angle bracket at line 11, near "::foo>/ fo"␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
dalek kudo: c950dec | pmichaud++ | docs/spectest-progress.csv:
spectest-progress.csv update: 448 files, 32347 (82.2% of 39356) pass, 0 fail
13:13
ruoso BrowserUk, So I think we're settling with the cooperative-coroutine-scheduler running in each kernel thread. I think the next step is thinking about the "shared values" infraestructure. I'm getting convinced the actor model can be implemented by an independent module. 13:19
ruoso Proposed Perl 6 threading model twitpic.com/1poh13 14:11
phenny, tell BrowserUk irclog.perlgeek.de/perl6/2010-05-21#i_2353688 14:13
phenny ruoso: I'll pass that on when BrowserUk is around.
JimmyZ sign...I can't open it 14:14
masak twitpic is petty-borgeoise and must be resisted!
ruoso++
ruoso accepts suggestions on where to post the image
will the list accept a 300K attachment/ 14:15
?
(or maybe the 34k svg file instead)
ruoso re-started the threading thread in another thread 14:24
masak has blogged: use.perl.org/~masak/journal/40361 14:25
Su-Shee ruoso: do you use thread-view for the thread about threads?
ruoso :)
ruoso JimmyZ, the image is now on the p6-l list also 14:37
JimmyZ ruoso: thanks. I got it 14:44
diakopter "'Pro tip': when booking, check an extra time that chosen dates are actually correct." (masak) -- I gave away $400 to this last week. :[ 14:54
masak something like that sum for me as well. 14:55
smash_ hello everyone 14:55
masak still, I greatly preferred that to remaining in Russia and facing the Visa Control Squad.
diakopter ruoso: did you see buk's msgs here 4.3 hours ago? 14:57
sorear: oh :) 14:59
pmichaud sorear: ping 15:02
diakopter ruoso: how closely does your latest match the scheme outlined in that paper I linked [the one about scala] 15:06
ruoso diakopter, yes... I saw... 15:07
ruoso diakopter, about the paper, it's quite close, actually... 15:07
diakopter <whew> that was my feeling
I was hoping I wasn't having a wrong feeling
oh goody; that'll be quite easy to implement on the CLR 15:08
dalek kudo: f9c987e | moritz++ | t/spectest.data:
run three more integration test files
15:09
bbkr rakudo: grammar G { token TOP { [ <single> | <pair> ]+ }; token single { . }; token pair { .. }; }; class A { method single ($/) { say "single" }; method pair ($/) { say "pair" };}; G.parse("kot", actions => A.new); # alternation '|' should get longest token matched. so why do i get single,single,single instead of pair,single ? 15:14
p6eval rakudo c950de: OUTPUT«single␤single␤single␤»
moritz_ bbkr: because longest token matching is NYI 15:15
bbkr thanks
moritz_ bbkr: putting <pair> before <single> "helps"
moritz_ quick question about S03:4057 15:27
moritz_ it says "per operators are defined recursively on shaped arrays" 15:27
S09 uses "shaped arrays" as "predeclared with a certain structure/dimensionality" 15:28
but the example that follows seems to indicate otherwise
-« [[1, 2], 3] # [-«[1, 2], -«3]
# == [[-1, -2], -3]
rakudo: say [1, 2] ~~ Iterable
p6eval rakudo c950de: OUTPUT«1␤»
masak moritz_: maybe S03 doesn't mean 'shaped arrays' there, but something more like 'nested arrays'. 15:29
bbkr std: / . || . | . /;
p6eval std 30745: OUTPUT«ok 00:01 114m␤»
moritz_ masak: probably 15:30
BrowserUk Ruoso: You pic looks good, but limited. How do you handle for example: Matrix multiplication? Socket server? Genome matching (find all possible offsets; for each of thousands of short (25) sequences; fuzzy matching at least 15 positions; within 1 GB sequence)? I've more scenarios. I'd like to gather many more. 15:36
phenny BrowserUk: 14:13Z <ruoso> tell BrowserUk irclog.perlgeek.de/perl6/2010-05-21#i_2353688
masak I'm not sure I understand the question "How do you handle matrix multiplication?" I can only assume that there is some threading challenge in that problem, or otherwise you wouldn't bring it up. but what, in more detail, is it? 15:37
sahadev rakudo: my @a = 1, 2, 3; @a>>++; say @a.perl 15:39
p6eval rakudo c950de: OUTPUT«[2, 3, 4]␤»
ruoso BrowserUk, mostly, it's much more explicit than I first thought... hyper operators, feeds, gather/take should be able to make it 15:40
diakopter I blogd diakopter.blogspot.com/2010/05/perl...nable.html
moritz_ are there any 2-arg operators that modify in-place?
arnsholt_ moritz_: += et al I suppose 15:41
moritz_ arnsholt_: right, thanks
ruoso rakudo: my @a = 1,2,3; my @b = 4,5,6; say join ', ', (@a >>*<< @b) 15:41
p6eval rakudo c950de: OUTPUT«4, 10, 18␤» 15:42
ruoso BrowserUk, the above could, theoretically, be run in parallel
BrowserUk ruoso: mat mult (and scaling) on large mats is very parallisable...but it requires partitoning & SMP (or GPUizing) for scalability.
ruoso since the hyper operator is a "threading hint"
moritz_ and it requires proper aligning so that SSE can be used 15:43
ruoso my bet is on the high-level of the operators
masak diakopter++ # nice post
ruoso >>*<< can be turned into anything, low-level speaking
moritz_ rakudo: my @a = 1, 2, 3; sub f(@b) { $_++ for @b }; say @b.perl 15:44
p6eval rakudo c950de: OUTPUT«Symbol '@b' not predeclared in <anonymous>␤current instr.: 'perl6;PCT;HLLCompiler;panic' pc 152 (compilers/pct/src/PCT/HLLCompiler.pir:108)␤»
BrowserUk It really just a "thread hinting" problem....
moritz_ rakudo: my @a = 1, 2, 3; sub f(@b) { $_++ for @b }; f(@a); say @a.perl
p6eval rakudo c950de: OUTPUT«[2, 3, 4]␤»
moritz_ sahadev: this is how in-place unary hyper ops work right now
polettix moritz_: I'm curious about two changes in the perl6-examples, namely github.com/perl6/perl6-examples/bla...olettix.pl and github.com/perl6/perl6-examples/bla...olettix.pl 15:47
moritz_: the latter seems better imho
moritz_: anyway thanks for both :)
BrowserUk Ruoso: See www.slideshare.net/pkpramit/matrix-...rogramming 15:49
moritz_ polettix: int() got removed from the language
polettix: so I removed it from the scripts to get it running again
polettix moritz_: yep, the thing is that the int() removal was done in two different ways but modifying basically the same thing
ruoso looking 15:50
BrowserUk Ruoso: Efficient (direct) shared memory + fast (user space) locking is required.
moritz_ rakudo: say 6 div 2.5
p6eval rakudo c950de: OUTPUT«No applicable candidates found to dispatch to for 'infix:<div>'. Available candidates are:␤:(Int $a, Int $b)␤␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
moritz_ polettix: div works only with integers on both sides
polettix: so I only took 'div' when I was sure that both sides actually are integers 15:51
polettix moritz_: yep, we only have integers in both cases. Just curious anyway, both are valid solutions and... TIMTOWTDI :) 15:52
moritz_ polettix: if it's only integers, I agree that 'div' looks better
ruoso BrowserUk, yes... as I said earlier, I don't think we should target remote processes (or even forks) in the core threading model... such extra functionality can be provided by modules 15:53
BrowserUk, so in the basic threading model, I think we just use process memory amongst threads....
sorear pmichaud: pong, but make it quick - I'm leaving townin a few minutes
pmichaud sorear: I was just reviewing the lexical persistence branch. Many parts look good, but HLL::Compiler should not be manipulating PAST structures either 15:54
I'm cherry picking a few items into master and then will work on it a bit from there.
BrowserUk ruoso: I completely agree about remote processes and fork. (Did anything I've suggested indicate otherwise?)
ruoso nope... I was just making my agreement explicit ;)
sorear pmichaud: if the PAST isn't manipulated, PAST::Compiler throws a "lexical $whatever not found" error 15:55
pmichaud I didn't say the PAST shouldn't be manipulated, just that HLL::Compiler shouldn't be doing it.
BrowserUk Ruoso: WHat I mean by "directly shared" is non-copying sharing. That is
pmichaud that should be handled by the individual compiler.
sorear Perl6::Compiler? 15:56
pmichaud in the case of Perl6, yes.
but it does that anyway, as part of eval()
pmichaud Perl6::Compiler already knows to look at the outer_ctx option and update its symbol table 15:56
BrowserUk ... if you tried to scale a large matrix using a purely message passing model, copying and sharing reduces you to a snail-pace.
ruoso BrowserUk, yes... yes... the idea is that most data won't be seen between threads (i.e. the map closure doesn't use most of the variables in the current lexical scope), but the data that is seen, must be made thread-safe through locking 15:57
sorear pmichaud: lexical-persistence-2 already goes somewhat in that direction
pmichaud: the reason past is so heavily factored is so that compilers can write their own overrides 15:58
pmichaud sorear: sure, but there are simpler mechanisms to do this
sorear ?
pmichaud in general, I don't want HLL::Compiler doing past manipulations that a compiler writer has to know about
BrowserUk Therefore, for efficiency, you need to be able to have multiple kthreads operate concurrently upon difference slices of a single perl object (array of ints or array of reals) concurrently, without locking--because they are operating on different parts of the memory, so locking is redundant.
pmichaud it breaks encapsulation
sorear how about just removing method post from HLL::Compiler? 15:59
ruoso BrowserUk, if the array is immutable, it doesn't require locking
pmichaud that's one step, yes.
sorear all the tools are there for a compiler writer to easily put together one of their own
masak has anyone ever gotten the error 'No result object' before during compilation to .pir?
pmichaud sure, but the thing is that past manipulations belong in HLL::Actions or HLL::Grammar, not HLL::Compiler
if we're going to provide them for others to use 16:00
pmichaud in general, ::Compiler doesn't manipulate PAST -- that's what grammars and actions do. 16:00
BrowserUk You cannot scale (multiple all elements by a value), if the array is immutable.
sorear ...didn't you reject the first version simply because it did past manipulations in Actions
ruoso BrowserUk, the source array, I mean
pmichaud no, because the past manipulations were specific to the interactive mode 16:01
not because they were in actions
BrowserUk Unless you're going to allocate and populate an new equal-sized matrix to hold the results and discard the original...
TimToady by default, arrays are mutable in Perl 6
that doesn't mean you couldn't have shaped immutable values though 16:02
BrowserUk and that is so costly as to be pointless using concurrency. Quicker to mutate a lexical array in place on one thread. (But then you loose th potential of 2/12/48/next year cores). 16:02
TimToady but certainly @array »+=» 1 would be illiegal if @array were immutable
*leg 16:03
[Coke] now hears * in a valley girl accent all the time, btw. curse you all.
masak rakudo: "\e" 16:04
p6eval rakudo c950de: OUTPUT«Unrecognized backslash sequence: '\e' at line 11, near "\""␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
masak perl6: say "\e"
p6eval rakudo c950de: OUTPUT«Unrecognized backslash sequence: '\e' at line 11, near "\""␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
..elf 30745, pugs: OUTPUT«e␤»
masak std: "\e"
p6eval std 30745: OUTPUT«ok 00:01 114m␤»
sorear pmichaud: so, what if wrap_past and friends were moved to HLL::Actions, and post was removed?
masak submits rakudobug
TimToady [Coke]: well, I married a valley girl, so it, like, stands to reason, and stuff.
pmichaud sorear: that might be better, yes.
sorear pmichaud: what would be better than that? 16:05
pmichaud sorear: I need to play with it a bit.
s/I/we/
anyway, I'll work on it a bit in master and cherry pick things from the branch, and we can go from there.
TimToady and all my kids are valley girls, except for the ones who are boys 16:06
pmichaud I was a little surprised that NQP itself wasn't using lexical persistence in the branch yet
ruoso BrowserUk, TimToady, but the compiler could optimize "@array »+=» 1" very easily if @a is a compact array...
pmichaud oh, I guess it was
moritz_ masak: that one is already re-opened in RT
masak: IIRC
sorear pmichaud: you're welcome to experiment; I won't be able to give feedback for a few days though 16:06
masak oh, ok.
pmichaud but it was all buried in HLL::Compiler
BrowserUk Of course, it may be that GPGPU (or even SIMD instructions are quicker for MAT MULT than can be done with SMP ktrheading, but there are other tasks that have similar parallelisation requirements. (Partitoning of large datasets to run non-GPGPU-able, dientical algorithm in separate kthreads, directly on shread memory)
pmichaud sorear: I'll move it along a bit more and then I'll be happy to have you pick it up again when you have time 16:07
sorear pmichaud: yes, I had this silly idea that "normal" compilers should get it for free
pmichaud sorear: it's a bit too free
they should get it for free, but not at the cost of manipulating their PAST structures unexpectedly
ruoso BrowserUk, the compiler could even create subsets of the array with proxy variables that would access the data without locking... 16:08
pmichaud it's too actiony-at-a-distance
they should get it by following a relatively clean-ish api
BrowserUk Ruoso: The compiler probably "could", if it was GHC-like...but on-the-fly? 16:09
[Coke] TimToady: aha!
masak moritz_: do you know which RT ticket mentions \e? I don't seem to be able to find it.
ruoso BrowserUk, I think so... 16:10
arnsholt [Coke]: And now I want to listen to Frank Zappa, but he's not on Spotify, and all my vinyl is elsewhere. So curse you =p 16:11
sahadev rakudo: my @a = 1, 2, 3, [4, 5]; for @a { $_++ unless $_ ~~ Iterable }; say @a.perl
p6eval rakudo c950de: OUTPUT«[2, 3, 4, [4, 5]]␤»
sahadev rakudo: my @a = 1, 2, 3, [4, 5]; for @a { unless $_ ~~ Iterable {$_++} }; say @a.perl
p6eval rakudo c950de: OUTPUT«[1, 2, 3, [4, 5]]␤»
BrowserUk Go has a 'mutable slice' type--which doesn't have real memory, but overlays with bounds, slices of an array type. I effect they are very similar to substr refs in Perl 5. It's a very powerful concept (ripe for stealing). I think D has them also. But the main point is that they are programmer constructions, not compiler magic.
ruoso Perl has too much polymorphism for that to be a programming construct... 16:12
it needs to be done as optimization
BrowserUk Nope. It cannot be done that way.
TimToady @array[1; *; 0..10] »+=« 1 will do such a slice 16:13
sorear pmichaud: excellent
masak EALREADYWORKS
sahadev using unless (or if) as a non-modifier seems to make $_ lose its binding to the array element?
BrowserUk TimToady: That a programmer explicit slice? It knows its bounds?
TimToady building slices into the language such that they can do PDLish things is most of what S09 is about
if you declared it with bounds, yes 16:14
BrowserUk Nice++
TimToady see S09:178
BrowserUk off to read S09
TimToady BrowserUk: but note that there are passages in S09 that are still somewhat speculative, and may not get into 6.0.0, or into Perl 6 ever 16:17
S09 has had several different authors... 16:18
PerlJam TimToady: you have to leave a little something for future generations to work out .. :)
TimToady and very little implementation to back up the notions
masak times out and submits the e bug anyway 16:21
better having dups than holes in RT.
[Coke] masak: agreed. 16:22
masak this one was brought to my attention by GGE, by the way. I'm trying to port it to Rakudo master.
colomon masak++ 16:23
masak std: "\q" 16:24
TimToady \e is supposed to produce an esc char
p6eval std 30745: OUTPUT«===SORRY!===␤Couldn't find terminator " at /tmp/ZM7AoEHnsf line 1 (EOF):␤------> "\q"⏏<EOL>␤Parse failed␤FAILED 00:01 111m␤»
masak TimToady: yes, and I used it as such in GGE. now it has regressed in Rakudo master, so I have to do \c[27] or chr(27) instead. 16:25
TimToady std: "\q"hi" there"
p6eval std 30745: OUTPUT«===SORRY!===␤Confused at /tmp/dYCMxdbuLx line 1:␤------> "\q"h⏏i" there"␤ expecting escape␤Parse failed␤FAILED 00:01 111m␤»
TimToady std: "\qq"hi" there"
p6eval std 30745: OUTPUT«===SORRY!===␤Confused at /tmp/4tSX5xnKgt line 1:␤------> "\qq"h⏏i" there"␤ expecting escape␤Parse failed␤FAILED 00:01 111m␤»
masak std: "\g"
p6eval std 30745: OUTPUT«===SORRY!===␤Unrecognized backslash sequence: '\g' at /tmp/9s5c0WERiO line 1:␤------> "\g⏏"␤Check failed␤FAILED 00:01 111m␤»
TimToady std: '\qq"hi" there' 16:25
p6eval std 30745: OUTPUT«ok 00:01 111m␤»
BrowserUk Grr. Bloody ISP :@ 16:26
TimToady std: say "\c["
p6eval std 30745: OUTPUT«===SORRY!===␤Unrecognized character name at /tmp/qYzciEJTyL line 1:␤------> say "\c[⏏"␤Unrecognized \c character at /tmp/qYzciEJTyL line 1:␤------> say "\c⏏["␤Check failed␤FAILED 00:01 111m␤»
TimToady right
masak "Unable to find module 'GGE' in the @*INC directories." -- would it be a bad idea to list those directories? 16:28
(liek Perl 5 does)
s/iek/ike/
moritz_ not bad at all 16:30
and easy to implement, I think
masak it would be SMA, IMO.
pmichaud might be a good challenge task 16:31
BrowserUk TimToady: Can you take (and pass) a reference to a slice? (Or would you have to pass a ref to the array and the "bounds"?)
moritz_ was just about to do it himself
pmichaud either ways works :)
*way
moritz_ it's a good idea
anyway, I disagree with calling exit() after the error message 16:32
mberends++ did that to avoide the backtrace
but it means that it's not easily catchable, for example if it happens in an eval()
masak *nod*
moritz_ or try { require ... }
masak the intent was noble, but the method isn't correct. 16:33
moritz_ agreed
masak but for once, it was nice not to get one of those horrible stacktraces. mberends++
that shows how nice it could be, at some point in the future. 16:34
PerlJam for some reason I read "the internet was noble ..." 16:37
masak if only :)
moritz_ rakudo: say pir::join('a', <b c d>) 16:38
p6eval rakudo c950de: OUTPUT«bacad␤»
PerlJam wishful thinking perhaps
TimToady BrowserUk: the intent is to allow the possibility of slice refs, but perhaps not as the default semantics, but it's easy to apply an adverb to a subscript, just as you can to any other operator 16:44
afk &
moritz_ masak: do you prefer each @*INC entry on a new line? or rather delimited by quotes and joined by ', '?
ruoso @a := @b[0;*;1..10];
? 16:45
moritz_ or space delimited_
BrowserUk ruoso: I assume that's meant to bind @a to the slice of the 3-dim array @b? 16:46
And yu can pass arrays to subs by reference in P6? 16:47
masak moritz_: I prefer space separated, like in Perl 5. 16:48
moritz_: '(@*INC contains: X Y Z)'
BrowserUk masak: what if the paths contain spaces? 16:49
masak checks what Perl 5 does about that
ruoso BrowserUk, it always goes as references... it's the signature that decides to take it as value
moritz_ Unable to find module 'Foo' in the @*INC directories. 16:50
@*INC contains: '.', '/home/moritz/.perl6/lib', '/home/moritz/rakudo/parrot_install/lib/2.4.0-devel/languages/perl6/lib'.
masak Perl 5 doesn't distinguish between a space in a path and one between paths.
moritz_ that's my current patch, but easy enough to change to spaces
masak either works.
but I kinda liked the parentheses of Perl 5.
moritz_ I thought maybe newlines (and indented two spaces or so) because newlines in pathes are rather rare 16:51
ruoso rakudo: sub foo($a,$b;$c,$d) { say $a,$b,$c,$d }; foo((1,2),(3,4))
p6eval rakudo f9c987: OUTPUT«Not enough positional parameters passed; got 2 but expected 4␤current instr.: 'foo' pc 204 (EVAL_1:-805598962)␤»
masak it's an idea, though pehaps that would make the error message rather long. 16:52
vertically, that is.
ruoso rakudo: sub foo($a,$b;$c,$d) { say $a,$b,$c,$d }; foo(1,2;3,4)
p6eval rakudo f9c987: OUTPUT«Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 11␤current instr.: 'perl6;Regex;Cursor;FAILGOAL' pc 1696 (ext/nqp-rx/src/stage0/Regex-s0.pir:932)␤»
masak stops bikeshedding
moritz_++
BrowserUk trying to think through the implications of passing a bound reference to a slice of an array to another kthread?
ruoso .oO( if you send different views of a bigger array to different threads, it means you don't need locking ? ) 16:55
BrowserUk So long as those views don't overlap, then there is no conflict. 16:57
masak nom & 16:58
BrowserUk It's more complex if you have fat datastructures (as in perl). It means that you cannot safely change the nature (dimensions etc.) of the structure without locking. 16:59
[Coke] any reason why autounfudge needs threads? 17:02
moritz_ [Coke]: to run parallel 17:03
[Coke] yes, but that's more of a nice to have, yes? 17:04
(presuming you have lots of free time.)
moritz_ well, I'm impatient, and my computer has two cores
[Coke] I will float a patch that allows 'no threads' and implies -j=1.
moritz_ wfm if parallel execution still works 17:05
BrowserUk The mat mult is a good (hard) test example, especially if you multiply in-place(eg: @a *= @b with appropriate >><< bits) of parallelisation because of the trade off between a threaded version of the naive algorithm versus the complexity of trying to paralellise the Strassens algorithm. (Even if in reality, it much quicker to just pass Mat Mult off to GPGPU or SIMD) 17:09
[Coke] moritz_: ugh. PITA to remove. Ah well. I'll just let you run it. =-) 17:11
moritz_ [Coke]: I do it regularly anyway 17:12
moritz_ and it's a PITA to run if your ulimit doesn't work :-) 17:13
dalek kudo: 6a7ded6 | moritz++ | src/Perl6/Module/Loader.pm:
Not finding a module throws an exception again.

it very hard (if not impossible) to catch the error with a try { } block, or form within an eval. Also awesomeified the error message to include report contents of @*INC.
17:15
moritz_ rakudo: my @a = 1, 2; say 1 xx @a 17:33
p6eval rakudo f9c987: OUTPUT«1␤»
moritz_ weird, I've found a case where that loops infinitely
graffiti hello 17:36
moritz_ hi
\o/ I have working code for MAIN 17:39
it's just not in Rakudo yet :-)
colomon moritz_++ 17:40
I'm assuming you mostly didn't write said code? :)
pmichaud back from lunch
graffiti ... 17:46
graffiti i want to write something in perl 17:51
[Coke] perl 5? perl 6? 17:53
graffiti Perl5
PerlJam graffiti: you want ot write something in Perl 5 that will help Perl 6? 17:55
s/ot/to/
graffiti: if you just want to write some Perl 5 and need help or resources, try #perl instead. 17:56
pmurias diakopter: is it possible to call a method with a dynamically determined name at runtime in the CLR? 18:09
phenny pmurias: 05:02Z <diakopter> tell pmurias after much travail, all tests successful again.
pmurias like my $method_name='foo';$obj.$method_name(1,2,3); ? 18:10
diakopter: hi 18:11
diakopter: see the new failing test
dalek meta: r288 | pawelmurias++ | trunk/Sprixel/Main.cs:
toggle a flag so the perlesque accepts user defined input
18:14
meta: r289 | pawelmurias++ | trunk/Sprixel/t/virtual.t:
add a failing test for virtual methods
moritz_ github.com/moritz/process-cmd-args now contains an example that actually calls a sub MAIN 18:32
next step: plug it into Rakudo
moritz_ looks at alpha branch to find out how it was done there
moritz_ differently :( 18:36
since it's now lexically scoped...
we can't do the namespace-lookup anymore
pmichaud it can be done in the mainline code that rakudo generates, though. 18:38
moritz_ aye, thought so
I'll write a sub RUN_MAIN or so
diakopter pmurias: ok
pmichaud I think it could go directly in the PAST generation
and we can easily look up lexically to see if &MAIN exists 18:39
dalek p-rx: def10fd | sorear++ | src/HLL/Compiler.pm:
Write NQP replacements for eval and interactive
p-rx: 528fb67 | sorear++ | src/HLL/Compiler.pm:
Add the autoprint hook
p-rx: c4649e1 | pmichaud++ | src/HLL/Compiler.pm:
Refactor outer_ctx handling a bit in HLL::Compiler.
p-rx: fca4ee1 | pmichaud++ | src/HLL/Compiler.pm:
HLL::Compiler.eval() needs to pass its slurpy args to the code it evals.
diakopter pmurias: to answer your question, sorta...
pmichaud actually, UNIT_START can do it. 18:40
diakopter pmurias: if the dispatch method takes a params object[]
pmurias: and each of the invocant's possible methods are string-compared
pmurias: and if a match is found, casts are done to the params, and the method is invoked
that way it's all "type safe" 18:41
moritz_ pmichaud: mind if I remove src/old from rakudo? 18:42
pmichaud moritz_: +1
moritz_ backporting stuff from alpha doesn't happen all that often anymore
pmichaud I agree.
diakopter pmurias: why do you ask 18:43
moritz_ if nobody objects in the next few minutes I'll delete it 18:44
diakopter pmurias: hopefully you'll want to write p6 methods as perlesque closures and not as clr methods
pmurias: perlesque methods/classes are intended to be runtime classes/routines, not user-code (or setting-code) routines. 18:47
diakopter pmurias: where by "runtime" I mean all the supporting/scaffolding code 18:50
pmurias: another somewhat equivalent way to do the method lookup (but which doesn't avoid the casts) is to store the methods in an optimized-for-retrieval hash/dictionary, but for invocants with only a few methods, it may not be worth it. 18:57
pmurias: re virtual.t - it's actually not a virtual call there. I assume you discovered it "works" if you mark $foo as a Bar (or leave off the type annotation entirely). 19:02
diakopter pmurias: a cleaner way to do that is just to do this: 19:02
my $foo_as_bar = Bar.new(); $foo_as_bar.foo(); my Foo $bar = $foo; $bar.foo(); # DTRT 19:04
er 19:05
moritz_ opinion question: most GNU tools allow switches/options after arguments
diakopter my $foo_as_bar = Bar.new(); $foo_as_bar.foo(); my Foo $bar = $foo_as_bar; $bar.foo(); # DTRT
moritz_ S06 says that for the MAIN sub that's disallowed 19:05
moritz_ ie more strict argument parsing 19:05
what would you prefer? 19:06
diakopter pmurias: do you see how that's a virtual call there in my example, but not how you wrote it in virtual.t ?
BrowserUk moritz: maybe the restriction is to allow switches to the interpreter and switches to the script being run to coexist. 19:11
dalek meta: r290 | diakopter++ | trunk/Sprixel/ (3 files):
[perlesque] clarify semantics of casting and variable declaration, for virtual
19:12
rokoteko so how did perl6 get rid of globs in a nutshell? 19:17
moritz_ rokoteko: with clever ideas 19:19
was that sufficiently "in a nutshell"
rokoteko moritz_: you've got a briliantly tiny nut.
moritz_ there are actually multiple ways 19:20
one is the idea of having a "setting"
which is an outer lexical scope to the program
and contains all the built-ins
another tools is "contextual" variables
rokoteko to the program as in the perl interpreter?
moritz_ which are passed along the call chain, and can be overridden in lexical scopes
moritz_ builtins; { user code } 19:21
rokoteko so is it really just a work-around that hides them?
snarkyboojum .'\]
rokoteko in builtins they still exist? lately, (sorry to distract from the perl6 topic), I learnt about Internals:: namespace in perl5 19:23
moritz_ rokoteko: they are not globals 19:25
rokoteko: you can also run code outside the setting if you wish 19:26
or in a different, self-written setting
and you can lexically override them
rokoteko got a link that explains this? I could study it instead of bothering you. :)
moritz_ rokoteko: I think it's specified in either perlcabal.org/syn/S02.html or perlcabal.org/syn/S06.html 19:27
S02, search for SETTING 19:28
rokoteko hm. ok. I comment no more, before studying this. thanks a bunch!
moritz_ S06 discusses how you can run stuff in a different setting, search for MAIN
diakopter pmurias: o wait, I erred; ... fixing 19:29
moritz_ rakudo: YOU_ARE_HERE(sub { say "hi"}) 19:32
p6eval rakudo 6a7ded: OUTPUT«Could not find sub &YOU_ARE_HERE␤current instr.: '_block14' pc 29 (EVAL_1:0)␤»
patrickas hello 19:37
moritz_ hi patrickas 19:38
patrickas: I've pushed a bit of stuff into the repo, including a new failing test
patrickas moritz_: I have a question about short options... how do I map -n to --long-name ? should that be another parameter added to process-cmd-args ?
moritz_ patrickas: I guess that iin the long run, process-cmd-args needs to know the names of all named parameters
patrickas: and it can then decide if 'n' as a prefix is ambiguous or not 19:39
dalek p-rx: 3ad3114 | pmichaud++ | src/HLL/Compiler.pm:
Improve autoprint so that it only outputs the result value if the
19:40
moritz_ I also re-read the spec and found that named parameters which are declared as arrays need special treatment (ie slurp up all following arguments unless they are switches again)
so we need more than just Bool anyway 19:41
pmichaud I'
I've remarked in the past that S19 is self-inconsistent in these respects
not sure where my comments are/went ... looking
moritz_ I'm talking about S06, not S19
pmichaud oh, S06 also, since it's related 19:42
patrickas I guess I'll start with the easy cases then.
the skeleton should be able to handle arrays as is ...
moritz_ -- as separator should be easy to do
I'm trying to figure out how to call MAIN automatically in Rakudo 19:43
it's non-trivial
pmichaud I think it should be done from !UNIT_START
patrickas yes I noticed you added the tests ... I'll add a few tests too .. and if no one picks them up I suppose I can fix them myself on Sunday 19:44
moritz_ pmichaud: how can !UNIT_START inspect the lexpad of mainline?
diakopter pmurias: fixed :)
pmichaud moritz_: it can call mainline, then grab its context and look to see if there's a &MAIN in it
for that matter, it could look at the lexinfo of the sub prior to ever calling the mainline 19:45
moritz_ that only works for determining if there's a MAIN
pmichaud true
moritz_ calling it is the hard part
pmichaud but the first version (grab the context) would also give you the &MAIN sub to be invoked 19:46
since it'll be stored in the lexpad
moritz_ ok, how do I grab the context of a function that already exited?
pmichaud it's an attribute of the Sub PMC
moritz_ ok
pmichaud (unless it got cloned somewhere, which is entirely possible.) 19:47
....but not in this case, I don't think.
moritz_ I'll try
pmichaud it's also possible that we'll have the mainline code store its context in a dynamic var somewhere
that seems a bit more likely.
then UNIT_START could just run the mainline and get the context from the dynamic var 19:48
moritz_ dynamic? I thought that's reset when mainline exits? 19:49
pmichaud not if the dynamic var is outside of the mainline's context
moritz_ ah
pmichaud dynamic, not temp
e.g., $*MAINLINE_CTX
moritz_ I'll try getting the context first
pmichaud or perhaps $*COMPUNIT_CTX 19:50
right now I'm trying to figure out a good way to flag a block/sub as being the one that represents the compunit 19:51
dalek meta: r291 | diakopter++ | trunk/Sprixel/ (3 files):
[perlesque] make every perlesque method "override" and make every invocation
pmichaud I guess a special :subid() seems most likely. 19:52
k23z__ any way to see where sorear is and when he was last time here ? 19:53
!seen sorear
ah yes
pmichaud he was here about 3 hours ago
moritz_ k23z__: check the IRC logs
k23z__ ok 19:54
moritz_ get_attr_str() not implemented in class 'Sub' 19:59
so a simple getattribute isn't enough to obtain the context
moritz_ continues his research into parrot land 20:00
pmichaud hmmmm
Parrot might not be exposing the ctx at the moment 20:01
do we have a way yet for a comp unit to know if it's the mainline?
I think we do.
perhaps related to YOU_ARE_HERE
no, that doesn't appear to be it 20:03
hrm.
moritz_ YOU_ARE_HERE is for everything that's executed in the context of the setting 20:05
pmichaud that doesn't quite make sense to me yet, but I need to review what's happened there 20:06
I need to focus on REPL a bit...will come back to MAIN a bit later 20:08
moritz_ sure
pmichaud the two have very similar issues involved, however.
patrickas moritz_: --name "spacey value" :name􏿽xAB'spacey value'􏿽xBB even if not declared bool ? 20:12
I would have guessed it would be the same as : --name non-spacey-value 20:13
moritz_ patrickas: me too. I don't understand that part of the spec... 20:14
patrickas I'll skip testing this part then
moritz_ patrickas: except that there are some OS (win32) where you can actually get the command line string before it's broken up into an array
pmichaud my comments about S19 are at irclog.perlgeek.de/perl6/2009-11-02#i_1675622 20:17
patrickas I also don't understand some notations ....
what is the difference between this :name􏿽xAB'spacey value'􏿽xBB
and this :name􏿽xABval1 'val 2' etc􏿽xBB
the first means a hash with a key name and a value the string 'spacey value' 20:18
but what about the second ?
moritz_ it's a three-item list
patrickas ok 20:19
moritz_ ie name => ("val1", "'val2'", "val3")
patrickas obvious now that you explain it :-)
moritz_ oh wait 20:20
probably without quotes around val2 20:21
rakudo: say «val1 'val2' val3».perl # probably wrong, because «...» is mostly NYI
p6eval rakudo 6a7ded: OUTPUT«("val1", "'val2'", "val3")␤»
pmichaud alpha: say «val1 'val2' val3».perl 20:22
p6eval alpha 30e0ed: OUTPUT«["val1", "val2", "val3"]␤»
moritz_ is in favour of disallowing multi MAIN 20:24
you can't generate reliable, comprehensible usage messages if you allow it
patrickas The syntax for specifying array arguments would be: process-cmd-args(@args, {name=>'Array'}) 20:27
TimToady me, I'd just poke a conditional call to MAIN at the end of the mainline when I compile it...
pmichaud "conditional call"? 20:28
moritz_ patrickas: I'd pass the type object as value
patrickas: ie name => Array, name2 => Bool etc.
pmichaud I'd probably introspect the signature and use it 20:29
moritz_ that's what I do right now
TimToady S06:3055 lists the conditions
moritz_ github.com/moritz/process-cmd-args/...md-args.p6 20:30
I don't know if we have knowledge of a) in rakudo at compile time
pmichaud it has to be a runtime selection, I think 20:31
but no, in the general case we don't yet know (a) at compile time in Rakudo
TimToady you don't need the info at compile time 20:32
that's why you wrap the call in a conditional! 20:33
pmichaud more to the point, we don't have a reliable condition to test at the moment
TimToady a contextual set up by the start code would be appropriate, methinks 20:34
pmichaud *which* start code is the problem.
especially if we're doing pre-compiled modules
TimToady the one that knows it's starting the mainline
pmichaud for a precompiled module, there's not something that "starts the mainline" 20:35
at least, not in Parrot
TimToady stares at pmichaud :)
moritz_ knows that kind of stares 20:36
patrickas shivers
TimToady also thinks people who can't introspect multis and come up with a decent usage message are somehow defective :) 20:37
moritz_ thanks :-)
TimToady stares at moritz_
moritz_ for certain values of "decent" I could manage that 20:38
pmichaud I mean, sure, we can do something like "if $*YOU_ARE_MAINLINE { MAIN(...); }
moritz_ but probably not for decent eq awesome
pmichaud but the hard part in Rakudo is being able to reliably set $*YOU_ARE_MAINLINE
TimToady It's a lofty goal to strive for, I'm sure :)
pmichaud because for precompilation, every module thinks it's potentially the mainline
moritz_ "your command line arguments are wrong" # decent? 20:39
TimToady I suspect we can do a bit better
you can at least list the candidates like jnthn++ does
moritz_ and show the user Perl 6 code when there's a constraint on an argument? 20:40
TimToady eventually someone will write the p6 shell, and then everyone will be happy. :) 20:42
TimToady if CALLER eqv SETTING { MAIN(...) } 20:44
hmm, maybe === instead
pmichaud does the caller have to be the setting?
TimToady or some such
pmichaud or is it just that the setting is the outer context?
TimToady for the outer scope of the mainline code?
pmichaud yeah
TimToady hmm 20:45
pmichaud in our case, the setting isn't always the caller
(it's an outer context, yes, but not necessarily the direct caller)
TimToady well, caller === some kind of you-are-here thing
TimToady I can't believe that this is impossible to know somehow... :) 20:46
pmichaud oh, I don't think it's impossible
I just haven't stumbled on the appropriate magic yet
TimToady my point was that you don't necessarily have to turn the lexical scope inside out, is all. 20:49
pmichaud right, I'm not thinking of anything like that
TimToady well, that's what the UNIT_START stuff was sounding like to me
pmichaud UNIT_START is essentially some glue that says "okay, some module got here, I have to figure out how to execute its mainline" 20:50
if we do "use Test" (which in turn loads Test.pbc) .... something has to cause the mainline code of Test.pbc to be invoked properly 20:51
TimToady sure, just stirring the pot...
didn't want it to burn :)
pmichaud we can't just mark the mainline code with a :load flag, because then the mainline executes before any of its nested init/check/etc blocks
pmichaud we can't put the mainline code at the end, because Parrot requires lexically nested blocks to come after the block they're nested in 20:52
patrickas rakudo: my %h={'t'=>Bool}; say 'truthy' if %h{'t'};
p6eval rakudo 6a7ded: ( no output )
pmichaud so, we put it at the beginning, and have a :load sub at the end that calls UNIT_START and passes the mainline as an argument
UNIT_START takes care of setting an appropriate outer context, invoking the mainline, and returning the result 20:53
(passing command line arguments if there are any, etc.) 20:54
patrickas pugs: my %h={'t'=>Bool}; say 'truthy' if %h{'t'};
p6eval pugs: ( no output )
patrickas bug ?
pmichaud type objects are undefined (and hence "false") 20:55
%h{'t'} is a type object
so no, not a bug
patrickas I guess that makes sense ... but I did not expect it to be that way. 20:57
moritz_ %h.exists{'t'} 20:57
ash_ pugs: say Bool.defined
p6eval pugs: OUTPUT«␤»
moritz_ or $h<t> ~~ Bool
ash_ i think the smart match is probably the functionality you wanted 20:58
pugs: my %h={'t'=>Bool::False}; say 'truthy' if %h<t> ~~ Bool;
p6eval pugs: OUTPUT«truthy␤»
pmichaud moritz_: I'm guessing we'll likely have a dynamic var that indicates a given block is to act as mainline code 20:59
pmurias diakopter: re perlesque closures vs runtime closures what do you mean?
pmichaud so we'll have something like if $*YOU_ARE_MAIN { Main() } added to the code generation whenever Main is defined in the compilation unit
er, &MAIN
patrickas moritz_: I added a bunch of tests, most of which are failing, even ones that were passing are now failing (because I used {'t'=>Bool} instead of {'t'=>'Bool'} ) 21:00
I guess that's good since it gives people and easy way to start fixing :-)
pmichaud afk, walk to think about repl and main 21:01
diakopter pmurias: I mean that you shouldn't plan to make a 1:1 between p6 classes/objects and clr classes/objects 21:05
pmurias: make another layer of object system
moritz_ patrickas: I disagree - fixing code requires deeper understanding than extending
diakopter with its entirely own dispatch/resolution
pmurias why? 21:06
diakopter pmurias: b/c it needs its own dispatch/resolution
pmurias diakopter: will the continuations work with the perlesque methods 21:07
diakopter pmurias: explain? 21:08
patrickas moritz_ you're probably right ... my impression is tainted by the fact that I know the commit that messed it up contains a single change ... I guess I'll fix that one myself then. 21:09
pmurias class Foo {method foo() {# can i save the continuation here?}};my $foo = Foo.new;$foo.foo();
diakopter you can save the continuation, but what will you do with it? you have to have something to "catch" it
pmurias "catch"? 21:10
patrickas I'll also add the first negation case cause it seems easy as it does not require a "looks Truethy but false" situation. 21:10
diakopter pmurias: yes, a continuation is a typed object just like everything else. you'll need to store it someplace. a closure is a good spot. 21:11
and you need something that knows how to execute it
moritz_ patrickas: we should also re-name the hash passed to process-cmd-args, since it's now not only the boolean named 21:12
patrickas %special-names ?
pmurias diakopter: i can store a continuation in a variable
moritz_ %named-params or %typed-named or so
or just %named
diakopter pmurias: yes. 21:13
but it's difficult to know its type beforehand, so you'd have to do something like this:
pmurias diakopter: show an example of what do you mean by a continuation type 21:14
moritz_ patrickas: I've updated the support code at the end of the file to actually pass the types along 21:15
pmurias as i can imagine it being something other than Continuation
s/can/can't
diakopter yes, it's parametric on the signature of the routine it would return to 21:16
<still writing an example>
pmurias waits patiently 21:17
quietfanatic rakudo: say (multi say (Int $x) {...}).candidates 21:23
p6eval rakudo 6a7ded: OUTPUT«saysay␤»
quietfanatic I'd go in and make a patch to fix this bug but Rakudo's internals are too scary.
diakopter perlesquel: sub a(-->int) { say(frame); return 1}; a(); 21:24
p6eval perlesquel: OUTPUT«Sprixel.Frame␤real 0.04␤user 0.02␤sys 0.00␤»
moritz_ quietfanatic: I've recently patched something which I thought was quite scary, and it turned ot not to be scary at all
diakopter pmurias: hunh. I guess it is the base type (Sprixel.Frame)
oh, I see
moritz_ quietfanatic: and then I've worked on something which looked quite straight forward, and turns out to be scary :/
diakopter pmurias: the type of the continuation frame will be enforced when the frame "returns" 21:25
diakopter pmurias: (when it is casted to the interface that represents its return value) 21:25
pmurias: (sorry for the diversion into sprixel internals)
pmurias: it should "just work". You can write your own "call/cc" now
quietfanatic I'm guessing it's the ".sub 'new'" section of src/builtins/Code.pir 21:26
no maybe not
moritz_ guesses method routine_def($/) in src/Perl6/Actions.pm 21:28
that new method seems to return the candidate, not the multi
specifically lines 1041 and onwards (of Actions.pm) 21:30
quietfanatic Yeah I found that...but I have no clue how Actions.pm works 21:31
jnthn I'm not sure how best to fix that issue.
moritz_ shouldn't it be as simple as having one variable containing the PAST for the current candidate 21:32
jnthn Probably does need a change in routine_def though.
moritz_ and then emit PAST node that first does whatever it does now, and then returns that candidate? 21:33
jnthn moritz_: Don't think it wants an extra variable really...the other problem is that the thingy that installs all the candidates isn't necesarily in the same block as the candidate itself.
jnthn But yes, changing what routine_def will "make" is the right answer. 21:33
moritz_ and luckily it's "just" 102 lines long :-) 21:34
jnthn EMORETHANDALMATIANS
moritz_ lol 21:35
pmichaud won't routine_def continue to make PAST for a wrapper object?
(and calls to code to install the wrapper into the appropriate multi?)
jnthn pmichaud: Well, at the moemnt it makes a node that looks it up.
oh heh
dalek meta: r292 | diakopter++ | trunk/Sprixel/src/Perlesque/Terminals.cs:
[perlesque] change frame keyword to _cc so it doesn't conflict with

sensitive)
21:36
patrickas moritz_: starting seeing some strange is() and is_deeply() nehaviour!
jnthn I wonder what happens if we toss that code and let the code that handles anonymous subs always return whatever it would.
patrickas rakudo: use Test; sub p() {my (@a ,%h);@a = ();%h = {}; return @a, %h; }; plan *; is( p() , ( [] , {} ) ); done_testing;
p6eval rakudo 6a7ded: OUTPUT«not ok 1 - ␤# got: ([], {})␤# expected: ([], {})␤1..1␤# Looks like you failed 1 tests of 1␤»
jnthn (Which would be the specific candidate.)
pmichaud right
moritz_ patrickas: yeah, it's fragile :(
patrickas the got and expected seem the same to me ... but the tests are failing anyway .. same thing is happening for is_deeply
jnthn (fixing bugs by deleting code)++ ;-)
I'm tired to the point that I don't trust myself to do any code tonight. But I have a pretty free weekend. Or someone else feel free to beat me to it. :-) 21:38
diakopter pmurias: I'll work on that... and get back to you.
quietfanatic does the make $past statement determine what it returns?
moritz_ yes 21:39
quietfanatic oh (just read above) never mind, I see.
patrickas moritz_: Could that be the Weekly challenge number 4 ?
fix is_deeply :-)
or at least make it less broken 21:40
quietfanatic I'm guessing it's this "$past := PAST::Var.new( :name($name) );"
jnthn quietfanatic: Yup, that's the thingy.
(the wrong thingy)
moritz_ patrickas: I guess it's more involved... probably is_deeply is right, and everything else is wrong
quietfanatic that's making it the wrong return value
moritz_ jnthn: I'm compling now without that line... built Test.pir
jnthn moritz_: It's probably not quite that simple. 21:41
Well
Maybe it is
:-)
patrickas oh ok :-( too bad
moritz_ patrickas: [] and () don't return objects of the same kind, but .perl sometimes produces identical output
jnthn: it's not
jnthn didn't check out the code, it just feels too simple
moritz_ patrickas: we have what feels like a dozen listy types, and .perl only produces two different kinds 21:42
() and []
patrickas moritz_ I figured about [] and () being different ... but [] was even worse :-)
pmurias diakopter: when i invoke a continuation why should it's return type matter?
patrickas rakudo: use Test; sub p() {my (@a ,%h);@a = [];%h = {}; return @a, %h; }; plan *; is( p() , ( [] , {} ) ); done_testing;
p6eval rakudo 6a7ded: OUTPUT«ok 1 - ␤1..1␤» 21:42
moritz_ rakudo: say <a b c>.WHAT; say (1, 2).WHAT; sub f { return 1, 2 }; say f().WHAT 21:43
p6eval rakudo 6a7ded: OUTPUT«Parcel()␤Parcel()␤Parcel()␤»
patrickas Who! I am getting a different output here ! time to pull again :-)
jnthn moritz_:
$past := create_code_object($past, 'Sub', $multi_flag, $sig_setup_block);
On that line try
my $final_result := $past := create_code_object($past, 'Sub', $multi_flag, $sig_setup_block);
diakopter pmurias: you're right; it doesn't.
jnthn And change $past := PAST::Var.new( :name($name) ); to make $final_result; 21:44
(or another equivalent neater change)
That may do it.
diakopter pmurias: but it does throw away the entire intermediary stack(s) branched from when the continuation was saved.
moritz_ jnthn: I'm not quite following you, and I'm quite tired too... so maybe it's better to leave it for tomorrow :-) 21:45
jnthn moritz_: :-)
pmurias diakopter: continuations shouldn't do that
quietfanatic I could try that I suppose.
diakopter pmurias: what do you mean; explain?
moritz_ bed& 21:46
jnthn night o/
moritz_ \o
patrickas good ight
pmurias what do you mean by throwing away the intermediary stack?
diakopter the stack created/initiated by the call/cc 21:47
invocation
pmurias invoking a continuation sets the stack to the state when the continuation was saved 21:48
diakopter I know; I thought that's what I said; sorry if I was confusing. 21:49
pmurias look at en.wikipedia.org/wiki/Delimited_continuation for continuations which only save part of the stack
re layering the object system it's very important to avoid adding an extra layer over object system if we want decent performance 21:50
diakopter that's absolutely not possible
pmurias what are the problems? 21:51
diakopter it's possible for an optimizing compiler, yes
pmurias that's what i'm interested in
diakopter well then of course it's possible. I'm not writing an optimizing compiler anytime soon. 21:52
but for Perl 6 code as input, the only way I see any kind of success path for the foreseeable few years is to follow the similar path of Rakudo
pmurias the path being? 21:53
diakopter afaict, lots of dispatches, lots of overload resolutions
for every operation
pmurias writing an optimizing compiler is more fun 21:54
diakopter I still foresee very large performance advantages over parrot, simply because the primitives in those resolution/dispatch methods can be much lower-level
pmurias than emitting naive code and jumping through hops to make it run acceptably 21:55
diakopter I'm sure it will be, several years down the road... 21:56
:P
(for me)
quietfanatic jnthn: I made the changes you mentioned but it doesn't seem to act any different. 21:57
jnthn Hmm. :-/ 21:58
pmurias diakopter: re the question i asked you about methods with unknown name is there a fast way to do it if i know the method signature in advance? 22:06
quietfanatic Is there a way to insert a debugging message into Actions.pm?
diakopter pmurias: when is "in advance"? 22:07
pmichaud quietfanatic: { pir::say('debug'); }
jnthn quietfanatic: pir::say("# some message ")
pmichaud oh, curlies aren't needed in Actions.pm
I was thinking in Grammar.pm :-) 22:08
one can also do: pir::printerr("# some message \n");
quietfanatic ah I see. It didn't like plain say()
pmichaud right, because then it tries to use the say() in your runtime
and your runtime might not be fully available yet
diakopter pmurias: I've gtg 22:09
pmurias all methods will be P6object method_name(P6object capture) {...}
diakopter: ok, see you tommorow
diakopter pmurias: in that case, it's simpler, yes, because no casting is needed 22:10
but string comparisons still need done
pmichaud anyway, pir::printerr("message\n"); is nice because if you're doing --target=pir or later the debug messages aren't in the midst of the thing trying to be compiled :)
diakopter if you can convert the method stringnames at compiletime to an array, those indexes can be emitted as a jumptable, and the switch/case will be much more efficient
pmurias: afk& 22:11
quietfanatic Does NQP support return? 22:12
pmichaud of a single value, yes 22:13
quietfanatic how about of no values?
pmichaud no
quietfanatic jus tto exit the sub?
pmichaud need to do at least return 0 or something like that
quietfanatic Ah huh. That may explain it.
pmichaud return is implemented as a prefix listop
(because nqp doesn't have listops)
quietfanatic I seems to ignore a bare return;
pmichaud hmmmm, should at least get some sort of error 22:14
sjohnson diakopter: make you can help me with this question. does p6 have any javascript-like syntax for doing simple sed/perl5 stuff? ie, if ($string.match(/something/)) { do something } ?
bkeeler Good afternoon, folks!
pmichaud oh, it might be treating bare return as a name lookup
quietfanatic so after getting make $final_result it continues and gets make $past anyway.
pmichaud I wonder if it would be hard to create term:sym<return> in NQP, and if that would even work. 22:15
ash_ sjohnson: you mean ~~ ?
rakudo: if 'abc' ~~ /a.c/ { say $_ }
p6eval rakudo 6a7ded: OUTPUT«Any()␤»
pmichaud sjohnson: if $string ~~ /something/ { do something }
ash_ rakudo: if 'abc' ~~ /(a.c)/ { say $_ } 22:16
p6eval rakudo 6a7ded: OUTPUT«Any()␤»
ash_ i guess i should of used $/
pmichaud rakudo: if 'abc' ~~ /a(.)c/ { say $0 }
p6eval rakudo 6a7ded: OUTPUT«b␤»
ash_ rakudo: given 'abc' ~~ /a.c/ { say $_ }
p6eval rakudo 6a7ded: OUTPUT«abc␤»
ash_ i rather like given 22:17
pmichaud rakudo: given 'abc' { when /a.c/ { say $_; } }
p6eval rakudo 6a7ded: OUTPUT«abc␤»
sjohnson pmichaud / ash_ : i realize the ~~ or given/when structure is there... but i was wondering if there was a javascript like way to do it... ie, a String method. 22:17
pmichaud sjohnson: oh. .match
sjohnson not saying that i would prefer this... just very curious about it
ahh, cool 22:18
pmichaud rakudo: say 'abc'.match(/a.c/);
p6eval rakudo 6a7ded: OUTPUT«abc␤»
pmichaud rakudo: if 'abc'.match(/a.c/) { say 'yes'; }
p6eval rakudo 6a7ded: OUTPUT«yes␤»
sjohnson pmichaud: indeed, this is what i was curious about. im kinda cool it is in there, as another timtowtdi way to do it
quietfanatic Aha! It works! jnthn++
sort of. May have caused a different error. 22:19
masak ahoy, #perl6! 22:21
bkeeler o/ masak!
masak say, has anyone else noticed that a lot of people report that they've been stumbling on the fact that nowadays you need to scope-declare free regexes with 'my'? 22:22
is it possible that that indicates a design smell?
bkeeler Could default them to 'my' if they're not in a class/grammar perhaps 22:23
masak perhaps.
PerlJam masak: where do they "need" to be scoped?
masak PerlJam: outside of a grammar. 22:24
at least if they're named.
PerlJam: because they're basically methods, and methods need a metaclass to has-scope themselves to.
or sump'n.
PerlJam oh, I see what you're saying
masak it wasn't always like that. 22:25
bkeeler Of course you can't really do much with them outside a grammar for now
masak in alpha, where we cheated more, it worked fine without 'my' :)
bkeeler / <foo> / won't find a lexical 'foo' 22:26
Perhaps I should work on that next
masak ++bkeeler 22:27
bkeeler pmichaud: had a chance to inspect my 'regex-interpolation' branch?
patrickas rakudo: use Test; sub p() {my (@a ,%h);@a = [];%h = {}; return @a, %h; }; plan *; is_deeply( p() , ( [] , {} ) ); done_testing; 22:34
p6eval rakudo 6a7ded: OUTPUT«not ok 1 - ␤# got: ([[]], {})␤# expected: ([], {})␤1..1␤# Looks like you failed 1 tests of 1␤»
lue ohai! 22:45
(I'd like to see the removal of the src/cheats folder. It just seems out of place)
masak lue: \o 22:48
lue: I'm afraid that folder is very much in use. 22:49
see the Makefile for just how much.
lue Not that I don't want it there, it just looks odd in a language interpreter. (It wouldn't be odd in a game :) )
masak your complaint seems to be purely on the level of naming. 22:50
what if the contents of that folder actually are a lot of cheats?
jnthn They *are* cheats. :-)
masak see? :)
jnthn It's a quite apt name.
masak and 'apt' is the opposite of 'out of place'. 22:51
quietfanatic Indeed, changing what routine_def makes breaks something else. 22:53
jnthn They're things that get us to a workingish Perl 6 without having to beat all the hard guys.
lue I know. You just wouldn't expect to find it in a language interpreter! :)
[then again, it is Perl 6...]
arnsholt Compiler writing is, to a certain extent, cheating I think =)
masak lue: Perl 6 is my MMORPG. 22:54
lue :) 22:55
lue finds +5 Beard of Unix
bkeeler If only we could charge millions of people $15 a month to hack on rakudo 22:56
masak lue: want to help me track down a GGE bug?
lue Ooh! Deep Magic™! What is it? 22:57
masak lue: I'm trying to port GGE from alpha to master, and I find one regex that simply hangs on parsing, and some others that parse wrong.
lue: I just pushed to the ng-compat branch at github.com/masak/gge, so if you want to play, please pull a copy and I'll guide you through it. 22:58
lue realizes how long it's been since he last logged into the RT
masak I cannot guarantee that this will result in an RT submit.
might be something wrong with GGE rather than Rakudo. 22:59
quietfanatic It makes Test.pm not work. "Ambiguous dispatch to multi 'plan'" 23:00
lue I know. You said bug I and thought .oO(Oh! RT! How long has _that_ been?)
quietfanatic where multi plan is only defined once
lue I didn't get any source code. Is that right? (no src/ folder) 23:01
masak lue: there's a lib/ folder.
lue: you'll need to switch branches. 'git pull; git co -b ng-compat origin/ng-compat' 23:02
lue ah. (dur) 23:03
I actually cloned it as a new repository *.*
masak that's good, if you didn't have it before. 23:04
lue git co doesn't work :) 23:05
masak hm.
any informative error message?
lue git: 'co' is not a git-command. See 'git --help'. 23:06
masak oh, sorry :)
it's 'git checkout'
masak falls victim to his convenient aliases :P 23:07
they're excellent until you try to tutor others...
lue > git checkout -b ng-compat origin/ng-compat
masak aye
should work.
lue fatal: git checkout: updating paths is incompatible with switching branches/forcing
Did you intend to checkout 'origin/ng-compat' which can not be resolved as commit?
[trying again]
PerlJam masak: git should come with those aliases by default. Everyone uses them.
masak lue: did you do a 'git pull' before?
quietfanatic I have rak aliased to rakudo perl 6 on my system, so I often find myself typing "rak: ..." into IRC 23:08
lue does git pull always have to come first
ash_ lue: git checkout -t origin/ng-compat
masak lue: or what ash_ said.
ash_ not only does it make a local branch, it makes it a tracking branch too, and checks it out
so that kills 3 birds with 1 stone 23:09
masak lue: well, the 'git pull' was so that it should pull the origin/ng-compat thing, so that it would know what it was. :)
ash_++
lue running what ash_ gave: fatal: git checkout: --track and --no-track require -b 23:10
What has happened to my copy of rakudo/git ? :)
then putting in -b causes the same fatal err as before!
masak :/ 23:11
ash_ git branch -l ?
lue still on master
lue will attempt to reclone rakudo to try and resolve this issue; please wait
masak er. 23:12
ash_ oh
lue I just went to the github page for GGE and realized.
ash_ there is no origin/ng-compat
masak GGE != Rakudo.
lue I am !SMART /o 23:13
\
masak so. if you try it with GGE, you're likely to have a higher success rate.
lue Unless I *need* rakudo to start, I'm ready. [probably do need it] 23:15
masak you need it. 23:16
as freshly a build as possible.
s/ly// 23:17
lue I acciendatly rm -rf 'd it [see above for attempt at resolution]. It's going to be fresher than 5 seconds ago.
masak actually, all you need is a 'perl6' executable in your path. 23:18
mathw hey
masak mathw! 23:19
mathw: congrats on the successful performance!
mathw Thanks
I can get to work on Form.pm after I've slept :)
masak YaY
masak ushers mathw towards the sleeping pod 23:20
lue forgot what floor those are on
mathw No I need to wind down first
I'm watching a bit of TV
masak they're on Nivelo 38. :)
mathw bit of chatting
masak .oO( src/chats ) 23:21
jnthn o/ mathw 23:22
mathw o/ jnthn
jnthn Form.pm! \o/
lue
.oO(src/chats/cheats/[OFF].pm)
mathw heh
tomorrow, jnthn
lue More of my !SMART coming, but what is Form.pm
mathw I should have time for that, maybe an aikido class (if I wake up soon enough), and some music to transcribe 23:23
masak lue: it's the R in Perl.
Reporting.
mathw lue: Data formatting, the Perl 6 approach to Perl 5's 'format' function
jnthn
.oO( look at that n00b, insinuating it's called PERL ;-) ;-) )
masak O.O
everybody knows it's really P.E.R.L. 23:24
lue PE L (<-- Wheel of Fortune)
masak recalls some Perl person naming a tool 'pler', and subsequently being nibbled to death by the Japanese 23:25
lue I thought were the Extraction of Practial Reports Language(EPRL)!
mathw Peppered Egg & Radish Langoustines
lue Or maybe the Reports of Practical Extraction Language (RPEL)!
mathw well it does have a REPL
lue
.oO(src/eastereggs/LifeOfBrian.pm)
23:26
masak lue: how's that Rakudo build coming?
lue core.pm > core.pir . Almost....
masak I've isolated the bug a bit more. 23:27
mathw oh yes 23:28
I could set a build going
I've not updated Rakudo for ages
lue I have set my rakudo folder to part of my $PATH [lazy], but that stupid "parrot must be with you!" err :( 23:29
EGETOFFMYSHOULDER
masak has updated Rakudo for ages :) 23:30
lue How do I fix that? 23:31
(stupid segmentation fault)
masak lue: 'make install'
lue That would never occur to me (considering I _never_ install it) dankon. 23:32
masak you should. that way, you can type 'perl6' from anywhere. 23:33
lue I would on my own computer, but never on a server I can't install to /usr/* . I don't know why, I just like having all my programs in /usr 23:36
masak all set?
ready to proceed to the next level? 23:37
lue I found the exit! World 6-0, here I come! 23:38
mathw has a rakudo
masak lue: ok, Mario. do you have GGE, and is it set to the ng-compat branch?
mathw hah
compilation error :) 23:39
lue yes i do. Haven't done anything else with GGE though.
masak right. so let's do something with it. :)
hm, let's make a Makefile.
saaki rakudo: $str = 'a' _ 'b'
p6eval rakudo 6a7ded: OUTPUT«Confused at line 11, near "$str = 'a'"␤current instr.: 'perl6;HLL;Grammar;panic' pc 501 (ext/nqp-rx/src/stage0/HLL-s0.pir:327)␤»
saaki ?
lue just run Configure, right?
masak lue: 'perl6 Configure' doesn't work too well. so maybe 'cp Makefile.in Makefile' instead. 23:40
saaki: the '_' is spelled '~' nowadays.
saaki thx
masak rakudo: my $str = 'a' ~ 'b'; say $str
p6eval rakudo 6a7ded: OUTPUT«ab␤»
masak lue: and then change the first three lines to say meaningful things rather than <PERL6> etc. 23:41
(in Makefile)
I have 'PERL6=perl6'
and RAKUDO_DIR pointing to my Rakudo dir.
and PERL6LIB pointing to the directory with GGE in it, colon, $(RAKUDO_DIR) 23:42
lue: after you've done something similar. try running 'make'.
lue Unable to find module 'GGE::Match' in the @*INC directories. 23:43
PERL6LIB='~/gge:$(RAKUDO_DIR)', RAKUDO_DIR=~/rakudo 23:44
masak try expanding the ~ into what it really means.
not sure the 'make' tool respects ~
lue Still no. That's weird. 23:45
masak oh, wait.
should be ~/gge/lib
or equiv.
lue Just realized that :) 23:46
masak because that's where the modules are.
sorry :)
lue winning...winning... (*cough* s/winning/compiling/)
masak I think you're home free now. 23:47
lue++
mathw hmm 23:48
some interesting problems with Form.pm in new rakudo
but much more of it works than it used to
lue aaand... done!
mathw I shall examine them properly tomorrow
but now... bed 23:49
masak lue: 'export PERL6LIB=`pwd`/lib; perl6 t/perl6regex/01-regex.t'
lue: over here, that runs the first 414 tests fine, and then hangs. see if it does the same for you. 23:50
mathw: \o
lue Why is the goal of GGE to be slow? (Besides heritage & name) 23:51
masak lue: being slow is just a side effect of the rest of the things it is: a grammar engine implemented on too high a level. 23:52
actually, it isn't as slow as I envisioned. :) 23:53
lue Ah. So hardware is your excuse :P
masak compilation is a bit of a drag, but it runs pretty OK.
rule compilation, that is. that's basically Rakudo being slow, though.
lue is looking for CAD tools to design the RD* while waiting, IIUC (or has a suggestion :) ) 23:54
masak well, if you're impatient to see the regex expression which hangs, you can do `./test-regex 'a**bc' ''` :) 23:55
masak that's the golfed version of test 415. 23:55
lue I can wait. There's a sleepover tonight and I'm confined to this computer :/ 23:56
cxreg i'm guessing "1..Inf" isn't meant to be lazy just yet in rakudo 23:59
masak I'm currently using that regex to try to figure out what's going on inside the optable parser that makes it hang.
lue takes the way of impatience