»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
JimmyZ niecza: if False, False -> *@a { say @a.perl } 02:22
p6eval niecza v12-11-g20a790d: OUTPUT«(Bool::False, Bool::False)␤»
JimmyZ nom: trait_mod:<is>($r, :$rw!) { $r.set_rw(); } #bug ? 02:45
p6eval nom 70d715: OUTPUT«===SORRY!===␤Variable $r is not predeclared at line 1, near ", :$rw!) {"␤»
sorear JimmyZ: you need "sub " before trait_mod 02:46
std: trait_mod:<is>($r, :$rw!) { $r.set_rw(); }
p6eval std be1f10e: OUTPUT«===SORRY!===␤Variable $r is not predeclared at /tmp/yQZhcRRUxJ line 1:␤------> trait_mod:<is>(⏏$r, :$rw!) { $r.set_rw(); }␤Variable $rw is not predeclared at /tmp/yQZhcRRUxJ line 1:␤------> trait_mod:<is>($r, :⏏$rw!…
JimmyZ LTA error?
sorear I'm not sure it can be improved much 02:47
buubot_backup: eval: sub foo { }
buubot_backup sorear: No output.
sorear buubot_backup: eval: foo { }
buubot_backup sorear: ERROR: Can't call method "foo" on an undefined value at (eval 20) line 1.
sorear not much better
JimmyZ pugs: foo { }
p6eval pugs b927740: OUTPUT«*** ␤ Unexpected end of input␤ Closing hash curly may not terminate a line;␤ please add a comma or a semicolon to disambiguate␤ at /tmp/mpDzjbLrPP line 2, column 1␤»
JimmyZ nom: sub trait_mod:<is>(my $r, :$rw!) { $r.set_rw(); } 02:49
p6eval nom 70d715: OUTPUT«===SORRY!===␤Invalid typename in parameter declaration at line 1, near " $r, :$rw!"␤»
JimmyZ nom: sub trait_mod:<is>($r, :$rw!) { my $r; $r.set_rw(); } 02:50
p6eval nom 70d715: OUTPUT«===SORRY!===␤Redeclaration of symbol $r at line 1, near "; $r.set_r"␤»
sorear JimmyZ: What are you trying to do?
JimmyZ sorear: looking at rt :) 02:53
JimmyZ anyone here can remove Tag testneeded from rt99362 ? 03:00
tadzik good morning 03:49
phenny tadzik: 10 Dec 19:40Z <jnthn> tell tadzik hmm, there's quite a few not-so-Windows-friendly bits, it seems. It claims to work, but there's no .perl6 directory created! Will see if I can figure it all out, anyways...
sorear hello tadzik, colomon 03:52
colomon o/
japhb *yawn* 04:33
sorear hello japhb 05:14
japhb Good evening, sorear. 05:19
japhb is wandering through the code generated during the Rakudo build
japhb If this code reflects real VM constraints, then there seem to be some design decisions there that are ... performance-hostile. 05:20
sorear, when niecza starts up, how does it reify the setting? What form is the setting stored in? 05:27
diakopter learns about wildcard type parameters in Java generics 05:28
japhb sorear, also, how large is the compiled form of the setting? 05:32
sorear currently, I'm looking at 73K for CORE.setting, 278K for Run.CORE.dll, and 258K for Run.CORE.ser 05:46
Run.CORE.dll is a CLR image file which contains byte-code for the setting code blocks
japhb And .ser is the serialized world state?
sorear .ser contains serialized metadata (including, among other things, a lot of line number tables and a copy of the source) 05:47
japhb ah
sorear it's worth noting that these values vary wildly from one version to the next
What's rakudo like these days? 05:48
Parrot has a very questionable "optimization" where "byte"codes are padded to full pointer size (4/8 bytes) for "fast aligned reads" 05:49
japhb CORE.setting is 257K, CORE.setting.pir is 10.4 MB, CORE.setting.pbc is 5.2 MB 05:50
Yeah, I don't buy that.
japhb is wondering if a Perl 6 implementation's code and starting state (setting, etc.) can be made to fit entirely in L3 cache of a modern consumer CPU. 05:53
ISTR Intel favors 1MB/core for consumer grade CPUs, so 4 MB or so these days 05:58
sorear japhb: depends how big you make the setting ;) 06:11
japhb: for niecza/c I have pipe dreams of loading the setting using demand paging
japhb sorear, sure. I meant the size for a setting and core that are fully compliant with the entirety of the spec. 06:12
sorear japhb: the spec is HUGE and includes stuff most one-off scripts won't need
japhb I'd be surprised if in normal usage a demand-paged setting could shrink the amount paged in at startup more than 2-4x without going into contortions. But that's just a hunch, not backed up by evidence. 06:13
sorear japhb: in particular, if you make me load and decompress the entire UCD at startup, that's quite a bit of the 4MB right there
japhb Well, I'll grant you that.
How big is the UCD, anyway? 06:14
sorear 50-odd properties x 1.1 million characters; contortions are inevitable 06:16
japhb >.<
sorear my current estimates for the working set for niecza's Unicode.cs is about 500kb-1MB
more if you use \c[CHARACTER NAME HERE]
japhb That's impressive. 06:18
sorear japhb: what specifically are you talking about re. 21:20 < japhb> If this code reflects real VM constraints, then there seem to be some design decisions there that are ... performance-hostile.
japhb: in which direction? 06:19
japhb: the data is kept in RLE form in memory, since a lot of blocks of characters share a lot of properties
japhb For example, 72% of CORE.setting.pir appears to be startup code (code that must run at startup to recreate the data structures of the setting)
smart, that 06:20
(the RLE encoding in memory)
sorear japhb: jnthn is working on adding .ser files or something equivalent to Rakudo
not copying Niecza - we've both had it on TODO for ages and I just found a round tuit earlier 06:21
japhb Another example is that perl6.ops grows nearly 8x in size when converted to C -- and expands slightly again to 236K, when converted to .so form.
Because Parrot insists on treating constant and non-constant args as separate copies of the op, and you get a combinatorial explosion on multiple args. 06:22
In any case, it's beginning to feel like a miracle things run as well as they do 06:23
sorear japhb: you are beginning to understand how I felt ca. June 2010 06:24
japhb Is that when you decided to create Niecza?
sorear yes 06:25
japhb Nodnod
The Forthwright in me is going apoplectic.
sorear has written more Forths than nontrivial programs _in_ Forth 06:27
japhb LOL
I resemble that remark
Though I can only claim to have written two Forths, the statement is still true. ;-)
sorear also, TimToady has given me a pass on Unihan properties 06:29
japhb This may be an odd question, but why? 06:30
sorear good question
they aren't terribly useful for regexes, and they would substantially increase the size of niecza .zips
japhb Fair enough. Something that can be loaded later if the user opts in? 06:32
Radvendii why does * represent so much in perl6? it represents multipication looks like exponents (**), infinity, and the "whatever" operator. it makes something like 0,0,* ** * ... * very confusing... :P
sorear yes
japhb good
Radvendii, the splat symbol is heavily overloaded in many technical contexts. Many of them leaked into Perl's design. 06:33
Radvendii it's annoying. they should utilize unicode, make • either multiplication or the whatever operator 06:34
or use some greek letters or something :P
japhb Oddly, after a while, one's brain has little difficulty contextualizing each different usage. Or maybe not so oddly. TimToady++ has done well by trusting in the vast capacity of the human brain to contextualize. 06:35
sorear meanwhile, other factions in the Perl 6 community like to wax polemical about the VILE DANGER of Unicode operators
japhb You are of course free to define your own Unicode operator set, and 'use' it at the top of your programs. All is fair if you predeclare. 06:36
Radvendii yeah, but isn't part of perl's motto that different operations look different, so it's easy to scan code?
sorear <3 japhb # "splat symbol"
japhb sorear, :-)
'asterisk' just seems so dry. 06:37
Radvendii but i have yet to find a way to redifine operators like the "whatever" or, do something like redifine both multiplication to some other symbol, and exponents to *...
Radvendii likes "splat" as well
japhb On the flip side, I've got to say I love 'octothorpe' for #
Radvendii, I thought someone managed that in the last day or so (the redef of multiplication and exponentiation that you wanted) 06:38
Radvendii did they? 06:39
sorear japhb: hmm, is that one 'grid'?
oh, 'mesh'
Radvendii how..?
sorear yes, it's quite easy :p
lexicality! 06:40
japhb I've heard hash, sharp, pound, octothorpe, and another that I can't remember at the moment
sorear japhb: I actually thought you were making a reference to the INTERCAL Character Set Tonsil
japhb LOL
.oO( How did INTERCAL get into this discussion?!? )
06:41
:-)
Radvendii hahaha INTERCAL always gets into the discussion :P
sorear japhb: you said "splat"
japhb shrugs with a devilish smile 06:42
ANYWAY
Ahhh ... Pandora manages to hit a decent streak 06:43
Radvendii what do you mean lexicality?
how do i "rename" * as •?
(the whatever operator, that is)
sorear Radvendii: there is no whatever operator 06:44
Radvendii the whatever thingy
whatever it's called
i know it's not an operator
sorear Radvendii: I think you are confusing term:<*> with infix:<*>
japhb *facepalm*
sorear and of course infix:<**> is not related to either
they are three separate names and must be overriden separately 06:45
Radvendii i know.
i
i'm saying how do i do that?
sorear how do you do _what_?
you haven't made it clear 06:47
japhb sorear, he's asking for an example ... and it sounds like he wants to replace the symbol used by term:<*>
sorear I think what you are saying you want to do is install a source filter that s/•/*/ on all source liens
Radvendii no.
i just want to replace term:<*> with •
not multiplication or exponents
sorear ah.
that can be half-done today
Radvendii which half :P (what do you mean)
sorear niecza: sub term:<•>() { * }; say •
p6eval niecza v12-11-g20a790d: OUTPUT«Whatever.new(...)␤»
sorear niecza: sub term:<•>() { * }; say 1..•
p6eval niecza v12-11-g20a790d: OUTPUT«1..Infinity␤»
sorear that half
the half that doesn't work is currying
Radvendii ah. 06:48
sorear niecza: sub term:<•>() { * }; say (1+•)
p6eval niecza v12-11-g20a790d: OUTPUT«Unhandled exception: Cannot use value like Whatever as a number␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /home/p6eval/niecza/lib/CORE.setting line 191 (Any.Numeric @ 4) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /tmp/QrLHlxnMoc line 1 (mainline @ …
sorear Whatever-currying is syntactic, and doesn't look into subs
to make that work, you'll need a _very_ simple macro
it's possible that masak's work is already far enough along to enable this
Radvendii i dont mind the * being currying, as long as i can replace all of the others 06:49
so to make multiplication be • i would do sub infix:<•> {*}? 06:50
japhb Radvendii, of course * ** * depends on currying ...
Radvendii but then how would i make * be exponents?
oh wait... never mind
im confusing myself 06:51
japhb yes
:-)
Radvendii would sub infix:<•> {*} work though?
sorear Radvendii: no, you would do sub infix:<•>($x,$y) is equiv<*> { $x * $y }
This isn't J :-)
japhb flicks at the devil on his left shoulder that was about to suggest something .... 06:52
sorear You can also do BEGIN my &infix:<•> := &infix:<*>; but it's unclear how to make operator precedence come out correctly like that. 06:53
Radvendii wouldn't it by default?
b: BEGIN my &infix:<•> := &infix:<*>; say 2•2+2; 06:54
p6eval b 1b7dd1: OUTPUT«===SORRY!===␤Could not find sub &infix:<•>␤»
Radvendii huh?
b: BEGIN our &infix:<•> := &infix:<*>; say 2•2+2;
p6eval b 1b7dd1: OUTPUT«===SORRY!===␤Could not find sub &infix:<•>␤»
sorear niecza: BEGIN my &infix:<•> := &infix:<*>; say 2•2+2; 06:55
p6eval niecza v12-11-g20a790d: OUTPUT«6␤»
sorear niecza: BEGIN my &infix:<•> := &infix:<*>; say 2+2•2;
p6eval niecza v12-11-g20a790d: OUTPUT«8␤»
sorear nom: BEGIN my &infix:<•> := &infix:<*>; say 2+2•2;
p6eval nom 70d715: OUTPUT«===SORRY!===␤Confused at line 1, near "say 2+2\u20222;"␤»
Radvendii what's niecza? 06:56
japhb Radvendii, the other major current Perl 6 implementation 06:57
(and sorear is the head honcho of it)
Radvendii ooh. so rakudo doesn't impliment this?
japhb not yet 06:58
Radvendii but what's the deal with the precidence?
japhb Radvendii, I'm assuming that mere binding of the code object is not enough to update the operator precedence parser's tables properly 06:59
Radvendii ah. is this the intended result? or will it be changed?
japhb sorear might know -- he's way more familiar with the workings of STD than I am. 07:00
sorear the code object has the wrong lifetime 07:02
when you say my &infix:<•> := &infix:<*>, you're totally free to do &infix:<•> := &infix:<+> at runtime 07:03
as such, there is no permanent association between the symbol table slot and the value
"is equiv<*>" sets up just such an association 07:04
Radvendii is there a way to add taht syntax to &infix:<•> := &infix:<*>? 07:06
jnthn yawns 09:49
lumi___ Is there some way to add file annotations to the setting, so stack traces would have the right file/line? 11:21
lumi___ I tried adding Q:PIR { .annotate 'file', '$file' } using gen_cat.pl, but that makes it explode because it doesn't have a compile-time Str 11:24
jnthn lumi___: "in method reify at src\gen\CORE.setting:4301" - is accurate, tells you which file to look at (the concatenated setting one) and as far as I know the line numbers in that are accurate. 11:27
moritz jnthn: but the file name in 'use'd .pm files is wrong 11:36
it always tells the name of the script file
jnthn moritz: Yeah, there is an issue there. Any idea what it is?
I think it doesn't happen in the pre-compiled case... 11:37
moritz: I think a my $?FILE = ... arond line 129 of src/Perl6/ModuleLoader.pm may help 11:40
er, := since it's NQP
moritz jnthn: I'll try later 11:44
JimmyZ Could anyone remove Tag testneeded from rt99362 ? 12:05
moritz why? where is the test for it? 12:07
JimmyZ bad, rosettacode is blocked 12:08
jnthn moritz: It seems that one ticket was used to file multiple bugs. 12:09
This should not really be done.
So one of them is indeed testneeded, the other one is unrelated and really should be a separate ticket. 12:10
moritz jnthn: my $?FILE := ... didn't help :( 12:15
erm, needs to be $?FILES maybe 12:16
jnthn moritz: Whatever Actions.pm looks for :)
my $file := pir::find_caller_lex__ps('$?FILES'); 12:17
JimmyZ nom: say <2/6>.perl # bug ?
p6eval nom 70d715: OUTPUT«"2/6"␤»
JimmyZ nom: say 3.14159_26535_89793 # it's a bug too 12:19
p6eval nom 70d715: OUTPUT«3.14159265358979␤»
lumi___ jnthn: Sorry I had to go away. It's accurate, but it's suboptimally informative. I don't know which method reify it is
moritz lumi___: yes, it's not good 12:21
lumi___: FYI it ususally comes from a 'for'-loop, or from a .map()
lumi___ moritz: So do you think my idea is worthwhile, adding the original source as an annotation? 12:24
dalek kudo/nom: d2a0960 | moritz++ | src/Perl6/ModuleLoader.pm:
fix file name annotations in "use"d modules
12:25
lumi___ moritz: Also, do you know how to make it not blow up?
moritz jnthn++ for that commit
lumi___: erm, I don't see how that works (and helps)
lumi___: the backtrace goes through the call chain, not through the text around the error 12:26
and a for-loop is compiled to something like sink list(<list here>).map($block) 12:27
lumi___ So you'd have 'in method reify at src/core/GatherIter.pm:23' or so
moritz lumi___: hm, that would be nice-ish, but I don't know if it's worth the trouble 12:28
nom: Q:PIR {␤.annotate "file", "foo"␤}; die "bar" 12:29
p6eval nom 70d715: OUTPUT«bar␤ in block <anon> at foo:3␤ in <anon> at /tmp/zruEQfmPs8:1␤»
moritz lumi___: that worked, set the file name to "foo" in that scope
moritz lumi___: but I guess you really need to change to codegen to not re-emit the original file name every other scope 12:30
jnthn I really don't think it's worth the hassle
Is it really so hard to open src/gen/CORE.setting and look up the line in question, if you can't guess? 12:31
It's going to be really tricky to get the line numbers to do the right thing. 12:32
cognominal I am getting caught in an infinit recursion when doing a say ~$/ 12:40
JimmyZ can't build rakudo on his virtualbox, due to not enough memory
cognominal Will give the stacktrace with the latest nom branch
cognominal too bad the stack trace is not printed anymore :( 12:49
moritz it is not? 13:05
moritz surprised 13:05
mikemol bleh 13:23
He loggd off just a few minutes ago. I wanted to ask what he meant by RC being blocked.
Seems odd someone would go to the trouble of blocking it. Even moreso that some proxy filter company might. 13:24
mikemol JimmyZ: What do you mean by rosettacode being blocked? What network? 13:25
JimmyZ mikemol: The Great Firewall
mikemol Again?
oi
JimmyZ again? 13:27
mikemol It's happened before, but been lifted. 13:28
JimmyZ don't know, wordpress is again
tadzik jnthn: does this mini-wget (gist.github.com/1460691) work for you on windows? 13:46
cognominal Weird, when executing outside the source tree I get the stack trace again. Filed a bug 13:54
maybe the recursion limit is not big enough? 13:56
how do I augment the limit? 13:58
moritz nom: nqp::getinterp__P().recursion_limit(10); 14:04
p6eval nom d2a096: OUTPUT«===SORRY!===␤Unrecognized nqp:: opcode 'nqp::getinterp__P' at line 1, near ".recursion"␤»
moritz nom: pir::getinterp__P().recursion_limit(10);
p6eval nom d2a096: ( no output ) 14:05
moritz nom: pir::getinterp__P().recursion_limit(10); sub f($x) { $x < 1 ?? 0 !! $x + 1 }; say f(20)
p6eval nom d2a096: OUTPUT«(signal SEGV)»
moritz nom: sub f($x) { $x < 1 ?? 0 !! $x + 1 }; say f(20)
p6eval nom d2a096: OUTPUT«21␤»
cognominal this is indeed the recursion limit. 14:07
jnthn tadzik: yes! :) 14:44
tadzik :) 14:46
okay, we can ship it as a mini-wget then
jnthn tadzik: OK. Next problem was that I fixed it up so that it did create a .panda in my home directory and put source files there. But it never created a .perl6 one...it claimed it was fully successful though. 14:53
JimmyZ looks like nqp can't build on windows with strawberry perl 15:16
tadzik jnthn: hmm 15:26
I may know what's going on
jnthn JimmyZ: With which compiler? 15:27
JimmyZ: And how does it fail?
tadzik jnthn: could you try gist.github.com/1461126 please?
JimmyZ strawberry perl with mingw32
tadzik dunno why it's not an issue on unixes 15:28
JimmyZ jnthn: something cmd does not support 'sh' and 'BUILD_DIR=.'
cd 3rdparty\dyncall && BUILD_DIR=. make 15:29
JimmyZ it said BUILD_DIR is not a command 15:31
jnthn tadzik: It makes the .perl6 directory now but it ends up empty 15:32
tadzik: Even though I get a stream of output ending with "==> Succesfully installed panda" 15:33
tadzik pff
liar
:/
jnthn tadzik: Yeah. I'd expect it to tell me where it fails... 15:34
tadzik somehow it skips installing, and claims it's ok
jnthn tadzik: I glanced over the code and it seems you do try to detect a bunch of failures...
tadzik jnthn: do tests for Panda::Installer pass?
tadzik I suppose so, just asking 15:35
jnthn ah! 15:36
loads of test fails
jnthn shoulda run those before
tadzik huh, so how did it even install it? 15:37
"==> Succesfully installed panda", did it omit tests or what?
jnthn gist.github.com/1461161
tadzik oh crap 15:38
'rm' is not recognized as an internal or external command, for one
it also seems that IO.copy does nothing, or so 15:39
could you try in the REPL? like, "README".IO.copy('readme2'); die unless slurp "README" eq slurp "readme2"
jnthn > "README".IO.copy('readme2'); 15:40
Bool::True
> die unless slurp "README" eq slurp "readme2"
Unable to open filehandle from path 'readme2'
o.
O
tadzik there we go
we have no spectests for that, for it's not spec 15:41
[Coke] goes to fix the niecza spec tests that sorear pointed out... and make spectest is already no longer green. 15:42
Radvendii does anyone know what niecza is named after?
tadzik yes 15:43
I think it comes from Polish "nie czas", which is, hmm, somewhat like "not a right time for that"
Radvendii haha. that's an odd name for a compiler...
[Coke] octothorpe-- 15:44
jnthn octocat++ 15:45
tadzik \/\/O\/\/ -- octopus!
Radvendii what is this ++ -- business?
tadzik it's karma
Radvendii are we incrimenting people?
what's karma?
tadzik like saying "I agree with him", or "kudos to you"
Radvendii oh 15:46
tadzik if you get 200 000 of those, whiteknight buys you a donut
or I heard so
Radvendii got it. that's clever.
they are recorded?
tadzik aye
karma tadzik
aloha tadzik has karma of 846.
tadzik wow, that's a lot of karma
karma Radvendii
aloha Radvendii has karma of 1.
[Coke] karma Coke
aloha Coke has karma of 574.
[Coke] karma [Coke]
aloha [Coke] has karma of 0.
Radvendii hahaha
tadzik Radvendii++ # for the new road of life ;)
[Coke] suspects a reset, somewhere. ah well.
sjn [Coke]: or, that most of those karma points come from git commits? :) 15:47
Radvendii karma sorear
aloha sorear has karma of 2040.
sjn [Coke]++ # For spreading out his karma points among several nicks 15:48
Radvendii woah. :P
tadzik jnthn: could you investigate at which level the .copy mechanism fails?
nom does pir::new__PS('File').copy(nqp::unbox_s(~$.path), nqp::unbox_s(~$dest));
[Coke] seen purl? 15:50
aloha purl was last seen in 15319 days 15 hours ago .
[Coke] seen epoch? (aloha--)
aloha epoch? (aloha--) was last seen in 15319 days 15 hours ago .
jnthn pir::new__PS('File').copy(nqp::unbox_s('README'), nqp::unbox_s('README2')); 1
tadzik: ^^ actually results in a README2
tadzik eek
jnthn 'README'.IO.copy('README2') just worked 15:52
huh
how did it fail before
oh!
duh
I did it in a directory without a README file :/
jnthn--
tadzik :P 15:53
okay, still
I suspect indir() now
could you try: use Panda::Common; indir 't-or-something', { 'some-file'.IO.copy('other-file') }; ? 15:55
jnthn tadzik: On the REPL that comes back with Nil 15:57
tadzik: Did you want me to create those files?
tadzik did it copy the file?
jnthn: I want to see if that works
you can try it on t/fudge or whatever 15:58
jnthn use Panda::Common; indir 't', { 'stubs.t'.IO.copy('other-file') };
I did that
tadzik did it work?
jnthn other-file is created
tadzik okay
jnthn (and exact same length as the original)
(diff says they're the same) 15:59
tadzik jnthn: with gist.github.com/1461126#file_installer.pm do you get any insightful output?
jnthn tadzik: No extra output during bootstrap 16:04
jnthn tadzik: gist.github.com/1461290 16:05
tadzik huh 16:06
ooh
$i.IO.copy("$!destdir/{$i.Str.substr(5)}");
shouldn't '/' be '\' on windows?
creating dir: C:\consulting\perl6\panda/removeme/lib -- looks fishy too 16:07
jnthn I checked whether copy can take care of / on Windows and it seemed to
tadzik mhm
does C:\consulting\perl6\panda/removeme/lib exist?
jnthn yes
REMOVEME\lib does
However, the directory is empty 16:08
tadzik could you modify the patch to Installer.pm to also print "$!destdir/{$i.Str.substr(5)}"? 16:09
maybe that'll give us some clues
jnthn Changed it to say "copying $i to $!destdir/{$i.Str.substr(5)}"; and I get: 16:11
creating dir: C:\consulting\perl6\panda/removeme/lib
copying blib/lib/foo.pir to C:\consulting\perl6\panda/removeme/lib/foo.pir
creating dir: C:\consulting\perl6\panda/removeme/lib
copying blib/lib/foo.pm to C:\consulting\perl6\panda/removeme/lib/foo.pm
tadzik does mkdir and IO.copy cope well with a path with both \'s and /'s? 16:12
jnthn > mkdir('t\bar') 16:13
Bool::True
> mkdir('t\bar/baz')
Bool::True
And the directories are there
tadzik okay. How about copy? 16:13
jnthn 't/panda\builder.t'.IO.copy('t/bar\baz') 16:14
ah
that fails to copy the file
jnthn even though it returns true 16:14
oh 16:15
't/panda\builder.t'.IO.copy('t/bar\baz/x.t')
tadzik gotcha
jnthn That works
tadzik ooh
jnthn that is, provided I explicitly call out the file name
If the destination is a directory it fails, it seems.
tadzik okay, on it
or not. Have to leave for 30 or so, I can poke it then or leave it to you, if you want :) 16:16
jnthn tadzik: I'm kinda tied up finishing some $dayjob task, so I'll have to leave it to later you, I'm afraid :) 16:17
[Coke] perl6: say "abc1_2" ~~ m/^ <ident> $/ 16:25
p6eval rakudo d2a096: OUTPUT«=> <abc1_2>␤ ident => <abc1_2>␤␤»
..pugs b927740: OUTPUT«Error eval perl5: "if (!$INC{'Pugs/Runtime/Match/HsBridge.pm'}) {␤ unshift @INC, '/home/p6eval/.cabal/share/Pugs-6.2.13.20111008/blib6/pugs/perl5/lib';␤ eval q[require 'Pugs/Runtime/Match/HsBridge.pm'] or die $@;␤}␤'Pugs::Runtime::Match::HsBridge'␤"␤*** '<HAND…
..niecza v12-11-g20a790d: OUTPUT«Bool::False␤»
tadzik okay, I'll poke it in a second 16:40
JimmyZ don't know how to fix 'BUILD_DIR is not a command' 16:43
dalek ecza: 0271e98 | Coke++ | t/spectest.data:
Don't run exploding spectest.
16:44
ast: 7787018 | Coke++ | S05-m (2 files):
niecza: fudge with tickets
16:45
[Coke] perl6: say *@INC 16:48
p6eval niecza v12-11-g20a790d: OUTPUT«===SORRY!===␤␤Two terms in a row at /tmp/KCCg9suY87 line 1:␤------> say *⏏@INC␤␤Parse failed␤␤»
..rakudo d2a096: OUTPUT«===SORRY!===␤Confused at line 1, near "say *@INC"␤»
..pugs b927740: OUTPUT«*** ␤ Unexpected "INC"␤ expecting term postfix, operator, ":" or ","␤ at /tmp/LmTYn3vwR6 line 1, column 7␤»
[Coke] perl6: say @*INC
p6eval rakudo d2a096: OUTPUT«lib /home/p6eval/.perl6/lib /home/p6eval/nom-inst1/lib/parrot/3.10.0-devel/languages/perl6/lib .␤»
..pugs b927740, niecza v12-11-g20a790d: OUTPUT«␤»
[Coke] niecza: @*INC.push('nodir'); say @*INC; 16:49
p6eval niecza v12-11-g20a790d: OUTPUT«nodir␤»
[Coke] perl6: eval('CORE::.<&not>') 16:52
p6eval rakudo d2a096: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&CORE' called (line 1)␤»
..pugs b927740, niecza v12-11-g20a790d: ( no output )
colomon hey, sorry to (possibly) be a johnny come lately here, but do we have an Advent post lined up for today? 16:53
moritz I don't think so 16:54
I'll try to whip one up later
jnthn I was gonna do just one post on meta-programming stuff, but I could do two: 1 showing how we can use it to implement stuff inside Rakudo, and then another showing how you can use it in your own modules.
And/or I could one on trusts and private methods. 16:55
moritz jnthn: both options would be very welcome
colomon moritz++ 16:56
colomon moritz: I've got a concert today, so I couldn't possibly start working on one until late. But I will try to get mine for the 17th in okay shape in the next couple of days, so it can run early if needed. 16:57
JimmyZ jnthn: +1 to both 16:58
JimmyZ jnthn: hmm, I mean +1 to 'I could do two:' :) 17:09
jnthn JimmyZ: Ah, you're less interested in the one about privates? OK :) 17:15
JimmyZ yeah 17:22
jnthn: Actullay, I am not sure whether I'm interested in the one about trusts and private methods. 17:24
Radvendii b: say (a,b,c)».uc; 18:27
p6eval b 1b7dd1: OUTPUT«Could not find sub &a␤ in main program body at line 22:/tmp/4cwUJW53ly␤»
Radvendii ..?
oh
b: say <a b c>».uc;
p6eval b 1b7dd1: OUTPUT«ABC␤»
Radvendii b: @C=<a b c>; say @c».uc; 18:28
p6eval b 1b7dd1: OUTPUT«===SORRY!===␤Symbol '@C' not predeclared in <anonymous> (/tmp/to774sfsAR:22)␤»
Radvendii b: my @C=<a b c>; say @c».uc;
p6eval b 1b7dd1: OUTPUT«===SORRY!===␤Symbol '@c' not predeclared in <anonymous> (/tmp/M1Wt45F80y:22)␤»
Radvendii b: my @C=<a b c>; say @C».uc;
p6eval b 1b7dd1: OUTPUT«ABC␤»
Radvendii so why do i get the error no ICU lib loaded in Cool::uc? 18:29
say my @A = [0, <a b c>».uc], [0, <a b c>]; 18:31
b: say my @A = [0, <a b c>».uc], [0, <a b c>];
p6eval b 1b7dd1: OUTPUT«0 A B C0 a b c␤»
Radvendii the line that's giving me trouble is this one: my @word = [0,@C».uc],[0,@C],[1,@V],[0,@C]; it works without the ».uc... 18:35
ah! 18:37
b: say 'ƶ'.uc
p6eval b 1b7dd1: OUTPUT«Ƶ␤»
Radvendii rakudo: say 'ƶ'.uc; 18:41
p6eval rakudo d2a096: OUTPUT«Ƶ␤»
moritz you might need libicu installed for that to work
Radvendii what's that? (and how do i install it) 18:42
moritz Radvendii: see site.icu-project.org/
Radvendii: installation is platform dependent 18:43
Radvendii when i say sudo port install icu, it just gives me ---> cleaning icu 18:46
if i install icu, do i have to reinstall rakudo? 18:50
moritz yes, you even have to reconfigure and compile parrot 18:54
and if your package manager separates libraries and development packages (including headers), you also need the development package 18:58
Radvendii ugh 19:03
while i'm at it, what is the --gen-parrot-option="" for where you want it to be installed (prefix?) 19:04
Radvendii b: say chomp "abc\n"; 19:20
p6eval b 1b7dd1: OUTPUT«abc␤»
Radvendii yay :D
they changed it so chomp returns the chomped string rather than the return status :D
benabik nom: my $s = "abc\n"; say chomp $s; say $s 19:22
p6eval nom d2a096: OUTPUT«abc␤abc␤␤»
Radvendii it doesnt even modify the value :D:D:D 19:23
Radvendii (im a fan of the functional-like aspect of perl in case you hadnt noticed) 19:23
sorear good * #perl6 19:36
jnthn hi sorear 19:40
moritz I'm sorry, I won't get around to writing an advent post today :( 19:57
I can do one tomorrow though 19:58
sorear o/ jnthn 20:00
fsergot karma moritz 20:05
aloha moritz has karma of 2850.
jnthn argh POS wordpress screwing up my preformatted stuff :/ 21:28
jnthn There. WE have an advent post for today. 21:32
perl6advent.wordpress.com/2011/12/1...y-and-oop/
japhb jnthn++ 21:33
jnthn Done in a rush, but hopefully fine :) 21:37
japhb Yep. The one thing it lacked is an explanation of $! and $. attributes. You mention declaring attributes with !, but don't explain why you didn't do that in 'my class Item' 21:40
Hmmm, maybe a topic for another day, along with an explanation of 'Item.new(:$name, :$price)' which might give readers a double take. 21:41
jnthn Well, a few things in there might :) 21:44
I used multiple meta-operators too :)
jnthn finds himself writing such things pretty effortlessly these days 21:46
japhb chuckles 21:47
I looked at !compute_subtotal and thought "Ahhh, how short and sweet" and it didn't even occur to me that it wasn't obvious. 21:48
At least not consciously
jnthn Even more so than Perl 5, Perl 6 often seems to give me relatively little overhead in translating thoughts about what I want to achieve into code.
japhb Agreed. Enough now that the if ladder in !compute_discount seems out of place, a remnant of an earlier age. 21:49
jnthn I don't immediately hit upon something that woulda been much clearer. 21:50
I coulda done it with a ?? !! ladder
japhb Hmmm ... a given/when gets kinda ugly ... 21:53
jnthn yeah
That makes things worse here.
japhb Oh, BTW, you have a bug ... the if branches need to be evaluated in 1000, 100, default order
jnthn oh 21:54
fail :)
Fixed, thanks
japhb np 21:54
jlaire if $sum >= 100 ... elsif $sum >= 1000 21:56
that second branch is never taken?
japhb trying various combinations of syntax to replace that if ladder.
jlaire, already fixed. :-)
jlaire oh
darn :P
japhb Close though, you only missed it by 3 minutes. ;-)
Man, this now makes me want some sort of .range-classify builtin .... 21:57
Excellent for implementing wide trees. :-) 21:58
sorear wonders whether it might be better to steal data from ICU 22:18
sorear wonders whether it might be better to steal data from ICU 22:21
sorear the ICU folks are quite distrustful of the XML UCD 22:21
japhb That it contains bogus data?
sorear site.icu-project.org/design/props/ppucd 22:25
sorear japhb: read that 22:25
japhb sorear, OK, will do. 22:26
japhb is finishing up www.research.ibm.com/people/h/hind/ACACES06.pdf first
sorear oooh, I just noticed the preparseucd.py on the ICU site 22:42