Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6, 2013-09-05

Perl 6 | Reference Documentation | Rakudo

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

All times shown according to UTC.

Time Nick Message
00:04 stevan_ joined #perl6
00:05 markov joined #perl6
00:12 Psyche^_ joined #perl6
00:22 stevan_ joined #perl6
00:25 fridim_ joined #perl6
00:29 araujo joined #perl6
00:41 skids joined #perl6
00:42 jnap joined #perl6
00:57 clkao joined #perl6
01:12 clkao joined #perl6
01:28 zakame joined #perl6
01:33 dayangkun_ joined #perl6
01:57 pernatiy joined #perl6
01:59 skids joined #perl6
02:08 diakopter [OT] based on the idiocy parrotted in the Congress today... clearly the US wants to invade/bomb Syria for some other reason they won't admit, such as wanting to destroy/capture underground Iranian weapons labs in Syria
02:16 colomon rn: say sprintf("%G", Inf)
02:16 camelia niecza v24-94-g1042054: OUTPUT«INFINITY␤»
02:16 camelia ..rakudo a25616: OUTPUT«NaNE+Inf␤»
02:16 colomon ugh
02:17 colomon rn: say sprintf("%g", Inf)
02:17 camelia niecza v24-94-g1042054: OUTPUT«Infinity␤»
02:17 camelia ..rakudo a25616: OUTPUT«NaNe+Inf␤»
02:17 diakopter haha NaN * 10**Inf
02:18 colomon Wynne:spec colomon$ perl -e 'printf("%g\n", Inf)'
02:19 colomon inf
02:19 colomon Wynne:spec colomon$ perl -e 'printf("%G\n", Inf)'
02:19 colomon INF
02:28 Mouq rn: say Inf.new
02:28 camelia rakudo a25616, niecza v24-94-g1042054: OUTPUT«0␤»
02:28 Mouq rn: 1.new.say # oh
02:28 camelia rakudo a25616, niecza v24-94-g1042054: OUTPUT«0␤»
02:29 dalek roast: 93e2173 | (Solomon Foster)++ | S32-str/sprintf.t:
02:29 dalek roast: Add more tests for Inf and -Inf.
02:29 dalek roast:
02:29 dalek roast: These tests follow the Perl 5 convention.  I'm not convinced of
02:29 dalek roast: its correctness.  I also changed two existing tests to conform.
02:29 dalek roast: review: https://github.com/perl6/roast/commit/93e217370d
02:33 Mouq r: q{("a" ~~ /a/).perl}.eval
02:33 camelia rakudo a25616:  ( no output )
02:33 Mouq but
02:33 Mouq r: ("a" ~~ /a/).perl.eval
02:33 camelia rakudo a25616: OUTPUT«Cannot modify an immutable value␤  in block  at src/gen/CORE.setting:863␤  in method BUILDALL at src/gen/CORE.setting:846␤  in method bless at src/gen/CORE.setting:835␤  in method new at src/gen/CORE.setting:820␤  in method new at src/gen/CORE.setting:818␤  in bloc…
02:36 Mouq Having trouble figuring out what that's about, since
02:37 Mouq r: (Int).perl.eval
02:37 camelia rakudo a25616:  ( no output )
02:37 Mouq r: Int.new.perl.eval
02:37 camelia rakudo a25616:  ( no output )
02:37 Mouq r: Match.new.perl.eval
02:37 camelia rakudo a25616: OUTPUT«Cannot modify an immutable value␤  in block  at src/gen/CORE.setting:863␤  in method BUILDALL at src/gen/CORE.setting:846␤  in method bless at src/gen/CORE.setting:835␤  in method new at src/gen/CORE.setting:820␤  in method new at src/gen/CORE.setting:818␤  in bloc…
02:38 dalek niecza: a6d4c5f | (Solomon Foster)++ | lib/Printf.cs:
02:38 dalek niecza: Special case Inf in sprintf.
02:38 dalek niecza: review: https://github.com/sorear/niecza/commit/a6d4c5f551
02:45 Mouq colomon: It looks like sprintf is defined in src/core/Cool.pm:256 in rakudo. (sprintf in nqp appears to delegate to parrot/java)
02:45 * colomon will give #perl6 a day or two to think on that before tackling fixing it in nqp
02:57 xenoterracide joined #perl6
03:29 cognominal__ joined #perl6
03:29 preflex_ joined #perl6
03:30 cognominal joined #perl6
04:44 Rotwang joined #perl6
04:56 SamuraiJack__ joined #perl6
05:08 hummeleBop joined #perl6
05:09 yannickberthoud joined #perl6
05:09 hummeleBop left #perl6
05:23 abnorman joined #perl6
05:30 domidumont joined #perl6
05:35 domidumont joined #perl6
06:00 FROGGS joined #perl6
06:01 FROGGS nr: printf "%d", Inf
06:01 camelia niecza v24-95-ga6d4c5f: OUTPUT«Unhandled exception: Cannot unbox a BigInteger from an object of repr P6box[Double]␤  at /home/p6eval/niecza/lib/CORE.setting line 1403 (sprintf @ 4) ␤  at /home/p6eval/niecza/lib/CORE.setting line 1404 (printf @ 5) ␤  at /tmp/zmPCBE_mkq line 1 (mainline @…
06:01 camelia ..rakudo a25616: OUTPUT«get_boxed_ref could not unbox for the given representation␤␤»
06:01 FROGGS nr: say Inf.fmt("%d")
06:01 camelia niecza v24-95-ga6d4c5f: OUTPUT«Unhandled exception: Cannot unbox a BigInteger from an object of repr P6box[Double]␤  at /home/p6eval/niecza/lib/CORE.setting line 1403 (sprintf @ 4) ␤  at /home/p6eval/niecza/lib/CORE.setting line 750 (Cool.fmt @ 4) ␤  at /tmp/UCXOJiCd1p line 1 (mainline …
06:01 camelia ..rakudo a25616: OUTPUT«get_boxed_ref could not unbox for the given representation␤␤»
06:01 FROGGS nr: say Inf.fmt("%s")
06:02 camelia rakudo a25616, niecza v24-95-ga6d4c5f: OUTPUT«Inf␤»
06:02 FROGGS morning
06:02 dayangkun joined #perl6
06:27 agre joined #perl6
06:29 denisboyun joined #perl6
06:32 salv0 joined #perl6
06:42 colomon joined #perl6
06:49 daniel-s joined #perl6
06:51 woosley joined #perl6
06:59 domidumont joined #perl6
07:00 dmol joined #perl6
07:01 domidumont joined #perl6
07:02 sqirrel joined #perl6
07:06 haruka joined #perl6
07:07 haruka left #perl6
07:13 zakharyas joined #perl6
07:16 moritz \o
07:16 moritz timotimo: what's wrong with calling subroutines before they are defined?
07:19 xenoterracide_ joined #perl6
07:28 dalek nqp: e57bb75 | (Arne Skjærholt)++ | src/vm/parrot/QAST/Operations.nqp:
07:28 dalek nqp: Expose pir::nqp_native_call_init as nqp::op.
07:28 dalek nqp: review: https://github.com/perl6/nqp/commit/e57bb7589f
07:28 dalek nqp: 8cd38ba | (Arne Skjærholt)++ | t/nativecall/01-basic.t:
07:28 dalek nqp: Add basic test file for native call functionality.
07:28 dalek nqp: review: https://github.com/perl6/nqp/commit/8cd38ba5ff
07:28 dalek nqp: fe8cb95 | (Arne Skjærholt)++ | tools/build/Makefile-Parrot.in:
07:28 dalek nqp: Run native call tests as part of Parrot test suite.
07:28 dalek nqp: review: https://github.com/perl6/nqp/commit/fe8cb95377
07:35 kaleem joined #perl6
07:44 zakharyas joined #perl6
07:57 go|dfish joined #perl6
08:20 sqirrel joined #perl6
08:23 xinming joined #perl6
08:25 rindolf joined #perl6
08:29 pmurias joined #perl6
08:30 pmurias jnthn: what is stored in $P11 (in grammar code on parrot)?
08:32 ivan`` joined #perl6
08:34 diakopter pmurias: mwahaha
08:35 diakopter pmurias: more seriously, take a look at https://github.com/MoarVM/MoarVM/blob/master/nqp-cc/src/QASTRegexCompilerMAST.nqp
08:35 diakopter where I directly transliterated much of that
08:35 diakopter for moar's regex compiler
08:35 diakopter even to the name of the variables/registers
08:35 diakopter so, search P11 and you'll find it
08:35 diakopter it may be easier to read/grok there
08:36 pmurias I think the JVM backend calls P11  subcur
08:37 diakopter see line 742 in that file
08:37 diakopter (above)
08:40 donaldh joined #perl6
08:42 nwc10 is there a clear list of blockers between "now" and "what's needed for a JVM Star release"?
08:44 donaldh nwc10: I'm working on completing a sockets impl for JVM, plus the pipe and qqx features that are used in the socket tests.
08:44 diakopter donaldh is the blocker! :)
08:44 daniel-s joined #perl6
08:44 donaldh nwc10: once that lands, there are some bugs to be chased in panda.
08:44 donaldh well, not panda, but exposed by panda
08:45 nwc10 ah OK.
08:45 diakopter also, nativecall is kinda important
08:45 nwc10 so pipes and qqx unblock the socket tests, the socket tests unblock sockets, sockets unblock people working on panda-related things
08:45 nwc10 and nativecall unblocks other things
08:45 nwc10 ?
08:46 donaldh last week I had panda bootstrap.sh working, with a couple of tweaks to panda to support jar as well as pir.
08:46 moritz I don't think panda needs sockets directly
08:46 moritz "just" parts of the ecosystem
08:46 moritz same with nativecall
08:46 nwc10 OK
08:46 cibs joined #perl6
08:47 dakkar joined #perl6
08:47 donaldh panda uses INET sockets to fetch the package list, and presumably to download packages
08:47 diakopter it's just that it's still squarely in the "toy" realm .. I guess I'm opposed to the idea of "releases" right now.. we always just tell people to use the latest from the repo anyway when they ask why stuff doesn't work
08:47 moritz I'm pretty sure it shells out to download the packages, because that's done via git
08:48 moritz but the package list would be problematic though
08:48 donaldh moritz, yes, you're right.
08:48 donaldh the package list is what I hit, which is why I'm working on sockets ;-)
08:48 nwc10 diakopter: I'm not sure how many people (if any) install from releases. But they seem to be useful (or even "necessary") as marketing
08:48 nwc10 but dead releases are awful
08:49 nwc10 eg, I feel that it's counterproductive that (*currently*) distributions are shipping packages of Rakudo, as they are all months or years out of date
08:49 arnsholt I finally got the native call tests figured out, so I hope I'll be able to make some real progress on JVM NativeCall Real Soon Now (tm)
08:49 nwc10 (this will change)
08:49 diakopter RSN++
08:49 nwc10 current build packages - that's a different matter.
08:49 fhelmberger joined #perl6
08:49 nwc10 gah, built
08:50 donaldh This is where I am at with sockets on JVM: Failed 9/41 subtests
08:50 arnsholt One problem with Rakudo in distros is that Rakudo is such a moving target ATM
08:50 arnsholt Pretty much too fast for all but the rolling-release ones, I think
08:51 nwc10 yes, agree
08:51 nwc10 there was one approach that I saw that I liked. IIRC it was chromium in Ubunutu.
08:51 hoelzro I have a nice package built for Arch
08:51 hoelzro and I update the Homebrew package for each release
08:51 nwc10 The "package" in the official repository installed keys and other steup for a "nightly" repository
08:52 hoelzro one of my goals is to have RPMs/DEBs, though
08:52 nwc10 and from that you could get a regularly updated .deb
08:52 diakopter nwc10: yep, that's the way to do it
08:52 bonsaikitten I find updating once a month quite convenient
08:52 nwc10 and I'm sort of surprised/disappointed that that hasn't happened.
08:52 bonsaikitten <-- gentoo maintainer
08:52 hoelzro as well as to split the rakudo-star package into separate packages, and rakudo-star becoming a "meta package"
08:55 xinming joined #perl6
08:57 rindolf joined #perl6
08:58 jnthn pmurias: $P11 is, iirc, set to the cursor we want to backtrack into, while backtracking the cursor stack.
08:58 diakopter that's the use of it at the topmost level, yes
08:59 diakopter (as that comment I pointed out earlier explains)
09:02 pmurias jnthn: why are a lot of the registers used by number vs used as %*REG<foo>?
09:03 pmurias jnthn: just avoiding changing stuff with no big benefit?
09:04 jnthn pmurias: I think it conveys temporary-ness vs. whole-regex-lifetime...
09:04 jnthn pmurias: Thjough $P11 clearly breaks that rule. I gave it a better name in the JVM port :)
09:04 daxim joined #perl6
09:05 pmurias subcur?
09:06 jnthn yes, I think so
09:07 jnthn Which is quite descriptive of what it is :)
09:08 pmurias much more than $P11 for sure ;)
09:08 jnthn yes, the darn $P11 thing took me a few hours to figure out too :P
09:09 * diakopter too
09:34 agre joined #perl6
09:52 daxim joined #perl6
09:54 donaldh Can anyone help with golfing https://gist.github.com/donaldh/48a7427077c1db9795f8
09:55 tadzik org.perl6.nqp.runtime.LexoticException
09:55 tadzik doesn't sound good :|
09:55 tadzik donaldh++ # excellent progress
09:56 tadzik any idea about builder.t failure, may that be just a hardcoded check for .pir?
09:56 tadzik and maybe same for installer
09:57 donaldh I replaced pir with jar in my code. Not got a patch for that yet.
09:57 donaldh my copy
09:57 tadzik in tests too?
09:58 * hoelzro initially parsed that as org.perl6.nqp.runtime.ExoticException
09:59 moritz EroticException
09:59 donaldh tadzik, yep, could just be explicit pir checks in tests.
10:00 hoelzro "EroticException: too hot for Perl"
10:00 donaldh tadzik: does that mean that testmodules needs a pir and a jar variant, or rethought ?
10:02 tadzik donaldh: they can have a VM-dependent part somewhere, like 'my $postfix-for-precompiled-files = %expected_postfixes{$*VM}'
10:02 tadzik I'd be fine with that, unless you have a diffent idea
10:05 donaldh tadzik: agreed
10:06 tadzik donaldh: how is that done in the code?
10:08 donaldh sorry, brain is afk
10:18 lizmat r: say KeyBag.new<a>--  # shouldn't decrement of a non-existing bag element be silent, or die ?
10:18 camelia rakudo a25616: OUTPUT«0␤»
10:18 donaldh darned conference calls. I was expected to think and everything
10:18 lizmat *should
10:20 lizmat S02:1646  Should return a Failure
10:20 synopsebot Link: http://perlcabal.org/syn/S02.html#line_1646
10:20 * lizmat goes and fixes that
10:22 dalek rakudo/nom: 105d588 | (Elizabeth Mattijsen)++ | src/core/Bag.pm:
10:22 dalek rakudo/nom: Slight optimization in pick/roll, much more is needed
10:22 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/105d588782
10:22 dalek rakudo/nom: 3feb92e | (Elizabeth Mattijsen)++ | src/core/Bag.pm:
10:22 dalek rakudo/nom: Fail on invalid values, rather than die
10:22 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/3feb92eb42
10:26 tadzik ooooh. That feeling when you accidentally remove an uncommited file, and then hysterically look for a vim session that still has it open...
10:33 * lizmat hopes tadzik will get that euphorious feeling when he has found that vim session
10:33 tadzik I did :)
10:34 tadzik finally, having 10 virtual desktop with unmaintainable amount of backgrounded vims pays off
10:40 yoleaux joined #perl6
10:53 lizmat r: say "a" ~~ KeyBag.new(<a b c>)  # this is intended behaviour, is it not?
10:53 camelia rakudo a25616: OUTPUT«True␤»
10:53 * lizmat wonders why there is a spectest expecting this to give False
10:58 iSlug joined #perl6
11:00 FROGGS joined #perl6
11:20 iSlug joined #perl6
11:22 jnthn donaldh: LexoticException can happen when you do a return in a pointy and there's no enclosing sub or method, perhaps...
11:23 jnthn nqp-jvm: (-> { return 1; })()
11:23 camelia nqp-jvm: OUTPUT«(timeout)»
11:23 jnthn aww
11:23 jnthn nqp-jvm: (-> { return 1; })()
11:23 camelia nqp-jvm: OUTPUT«Lexical 'RETURN' not found␤  in <anon>␤  in <anon>␤  in <anon>␤  in eval␤  in evalfiles␤  in command_eval␤  in command_line␤  in MAIN␤  in <anon>␤  in <anon>»
11:23 * jnthn tries again
11:23 jnthn ah,
11:23 jnthn well, or it could do that :)
11:23 moritz r: sub f { -> { return 1 }}; my $x = f(); $x()
11:24 camelia rakudo 3feb92: OUTPUT«Attempt to return outside of any Routine␤  in block  at src/gen/CORE.setting:550␤  in block  at /tmp/aGewOPXLGo:1␤␤»
11:24 jnthn Yeah...Rakudo should do that.
11:24 jnthn LexoticException is the exception used to unwind in a return, anyways...
11:24 jnthn But it sure shouldn't leek
11:24 moritz nqp-jvm: sub f { -> { return 1 }}; my $x := f(); $x()
11:24 camelia nqp-jvm: OUTPUT«Routine declaration requires a signature at line 2, near "{ -> { ret"␤  in panic␤  in routine_def␤  in routine_declarator:sym<sub>␤  in !protoregex␤  in routine_declarator␤  in term:sym<routine_declarator>␤  in !protoregex␤  in term␤  in termish␤  in EXPR␤  in statement␤…
11:25 moritz nqp-jvm: sub f() { -> { return 1 }}; my $x := f(); $x()
11:25 camelia nqp-jvm: OUTPUT«Exception in thread "main" org.perl6.nqp.runtime.LexoticException␤      at org.perl6.nqp.runtime.ThreadContext.<init>(ThreadContext.java:86)␤   at org.perl6.nqp.runtime.GlobalContext.<init>(GlobalContext.java:129)␤  at org.perl6.nqp.runtime.CompilationUnit.enterFromMain(Compilat…
11:25 jnthn aha
11:25 jnthn moritz++
11:26 colomon lizmat: "a" ~~ KeyBag.new(<a b c>) should be False.  ~~ tests whether Sets are equivalent, NOT set membership.  If you want to test set membership, use ∈
11:27 lizmat colomon o/
11:27 lizmat but, is the ACCEPTS then correct ?
11:29 * colomon has no idea what Rakudo's set ACCEPTS looks like, bringing up github...
11:30 colomon as far as I know, that should be correct
11:30 lizmat (<+)
11:30 colomon $other (<+) self && self (<+) $other
11:30 lizmat so all $a.keys.map({ $a{$_} <= $b{$_} })
11:30 lizmat that doesn't seem right, then ?
11:31 lizmat shouldn't that be == ?
11:31 moritz == is sfor numbers
11:31 moritz eqv maybe
11:31 colomon it does it both directions
11:31 * moritz didn't really pay attention enough
11:31 colomon if A (<+) B and B (<+) A, then A and B have the same members and counts
11:32 moritz sounds like eqv, yes
11:32 lizmat hmmm…   feels there should be a faster way to do the ACCEPTS
11:32 colomon err … or is there a catch there?
11:33 * colomon thinks not, on second thought
11:33 lizmat ok, will search further  :-)
11:33 lizmat colomon: is there a reason not to make new a multi, with an optional :p for pairs ?
11:34 colomon lizmat: yes
11:34 lizmat ah, no named parameters after a slurpy
11:35 colomon "p" => True is a valid thing to put into a Bag
11:35 moritz r: sub f(*@a, :$a) {}
11:35 camelia rakudo 3feb92:  ( no output )
11:35 colomon afk # garbage collection
11:35 moritz r: sub f(*@a, :$a!) {}
11:35 camelia rakudo 3feb92:  ( no output )
11:39 sqirrel joined #perl6
11:44 moritz seems my feeling about rakudo setting compilation times were inaccurate
11:45 * moritz does some measurements
12:01 dmol joined #perl6
12:11 kbaker joined #perl6
12:27 dalek rakudo-js: fc41b4d | (Pawel Murias)++ | src/QAST/Compiler/JavaScript.nqp:
12:27 dalek rakudo-js: Implement altseq.
12:27 dalek rakudo-js: review: https://github.com/pmurias/rakudo-js/commit/fc41b4dead
12:27 dalek rakudo-js: c3db051 | (Pawel Murias)++ | / (4 files):
12:27 dalek rakudo-js: Pass rx_captures.
12:27 dalek rakudo-js:
12:27 dalek rakudo-js: Handle cstack properly. Implement negate cclass matching.
12:27 dalek rakudo-js: Implement nqp::findcclass,nqp::findnotclass, support more cclasses.
12:27 dalek rakudo-js: review: https://github.com/pmurias/rakudo-js/commit/c3db0515ab
12:29 spider-mario joined #perl6
12:34 xinming joined #perl6
12:40 dalek roast: d32875f | (Elizabeth Mattijsen)++ | S02-types/ (4 files):
12:40 dalek roast: (Un)fudges for work on Bag/KeyBag
12:40 dalek roast: review: https://github.com/perl6/roast/commit/d32875f8de
12:40 xinming joined #perl6
12:41 dayangkun joined #perl6
12:43 woolfy joined #perl6
12:50 dalek rakudo/nom: fb7c07c | (Elizabeth Mattijsen)++ | src/core/ (4 files):
12:50 dalek rakudo/nom: Make KeyBag work according to spec (mostly) + additional fixes/tweaks
12:50 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/fb7c07cea6
13:07 dakkar joined #perl6
13:11 donaldh joined #perl6
13:12 JimmyZ donaldh: Did you see the backlog for LexoticException?
13:13 donaldh JimmyZ: from jnthn - oh yep.
13:16 PacoAir joined #perl6
13:17 moritz http://moritz.faui2k3.org/tmp/times.log # setting compilation times for different rakudo revisions
13:19 Fatalnix okay, I gotta do some research on Perl6 for the JVM so I can make some MC mods.
13:19 Fatalnix today
13:20 Fatalnix only thing I hate about the Java API is that everything is camel case.. ew.
13:21 jnthn It's funny, you'd think Perl programmers would like CamelCase, what with The Camel... :)
13:21 Fatalnix loool
13:21 Fatalnix I think its so hard to read
13:22 Fatalnix like wth, functionThatDoesSomethingCoolAndAwesome is hard to follow compared to function_that_does_something_cool_and_awesome.. both of which are retarded function names but hey
13:23 lizmat moritz++
13:23 lizmat would it be possible to add #lines in CORE.setting as well ?
13:24 Fatalnix but what I am curious about, is that if I use Rakudo on the JVM- can I generate JVM class code?
13:24 denis_boyun joined #perl6
13:24 timotimo moritz: er, nothing. just my brain having a little fart
13:27 lizmat moritz: checked the oldest, CORE.setting had 14207 lines then
13:29 lizmat so yes, it has gotten slower than the size of the CORE.setting would indicate
13:29 dalek joined #perl6
13:29 lizmat 20% slower or so, against 14% increase in size
13:30 jnthn Lines is not a very good measure of much, though.
13:30 jnthn I mean, a one-line that does a BEGIN is a lot mroe work than 10 lines of comments :)
13:30 denis_boyun_ joined #perl6
13:30 Fatalnix jnthn: haha
13:31 Fatalnix testing rakudo on jvm now
13:31 lizmat jnthn: what would be a better metric then: number of subs/methods/classes/ops
13:31 Fatalnix gotta compile it
13:32 dalek rakudo-js: 7e871f1 | (Pawel Murias)++ | / (3 files):
13:32 dalek rakudo-js: Pass nqp/t/qcaps.
13:32 dalek rakudo-js:
13:32 dalek rakudo-js: Fix non frugal quantifiers.
13:32 dalek rakudo-js: review: https://github.com/pmurias/rakudo-js/commit/7e871f1717
13:32 jnthn lizmat: Well, the point was more that a 20% time increase for a 14% line count increase isn't automatically unreasonable.
13:32 jnthn lizmat: Since there are different metrics
13:33 lizmat ok, well, if you're not too worried, I'm not  :)
13:33 jnthn lizmat: It's hard to come up with a good one because there's so many factors.
13:33 jnthn lizmat: Well, I worry that dynamic comp is more expensive than we woudl really want it to be.
13:33 jnthn lizmat: I want to understand why that's slow...
13:34 jnthn lizmat: that is, how much time we spend in Perl6::World.compile_in_context
13:34 jnthn Any stats anybody fancies gathering on that (maybe just with timing code or maybe with --profile) would be interesting.
13:35 lizmat does compile_in_context show up in --profile ?
13:35 jnthn Oh, good question...
13:35 jnthn 'cus it's compile time...
13:36 jnthn I don't know but maybe not.
13:36 jnthn In which case we're down to nqp::time_n :)
13:36 jnthn But that should be good enough resolution.
13:37 lizmat is the interface to --profile functionality documented somewhere ?
13:37 jnthn dunno; is there a docs/running.pod?
13:38 Fatalnix how long is it going to compile rakudo on a core 2 duo?
13:38 Fatalnix I think she's 2 Ghz
13:39 tadzik Fatalnix: about 6 minutes
13:39 tadzik oh, JVM may be shorter
13:40 jnthn It doesn't have to build a Parrot, just NQP and Rakudo. And the setting compile takes about half the time. But, startup... :) So yeah, probably a bit less on JVM
13:40 Fatalnix been going for like 10 mins heh
13:41 jnthn Well, RAM and if you have an SSD can make soem difference too I guess... :)
13:41 timotimo Fatalnix: i fear you'll be disappointed; the machinery to expose perl6 things as java-compatible thingies isn't in place yet AFAICT
13:41 timotimo hm, at least not completely
13:41 Fatalnix ah. Well that's fine
13:42 Fatalnix but is it currently possible to at least make a hello world .class file with Perl6?
13:42 timotimo i do think you can assign subs to be called by callbacks for SWT or something?
13:42 timotimo modules are compiled to .class files, yes
13:42 Fatalnix ooooh
13:42 bruges_ joined #perl6
13:42 timotimo but i don't know if they have a .main right off the bat? no clue how all of that works
13:42 Fatalnix so at least theres hope
13:43 timotimo nqp and perl6 "binaries" (actually .jar files) are created by nqp, not by rakudo ...
13:43 Fatalnix yeah when I wrote a small clojure mod I used callbacks as jump from Java to clojure because for some reason I couldn't find out how to bridge the main class
13:44 timotimo i'm afraid performance may turn out to be an issue, too. at least if your mod wants to do stuff every tick
13:44 timotimo how many ticks per second does minecraft do?
13:44 Fatalnix 20
13:45 timotimo at any rate, i'm excited for the performance improvements rakudo-jvm is going to get in the future
13:45 Fatalnix yeah I dont expect it all to be spectacular, but I believe that in the future itl be prettyy cool
13:45 timotimo it's already faster than rakudo-parrot for most, but rakudo-parrot has seen years of optimization and rakudo-jvm hasn't really seen any.
13:46 Fatalnix hmm
13:46 Fatalnix how new is rakudo-jvm though?
13:47 timotimo depends on how you measure it
13:47 timotimo preparations for "getting rakudo decoupled from just one VM so it can target different VMs in the future" are old
13:47 Fatalnix woot that looks cool: perl -MExtUtils::Command -e cp src/stage2/nqpmo.jar .
13:47 Fatalnix anything with a jar for a cp in Perl is useful
13:47 timotimo that's a perl5 module being used to do a cp ;)
13:48 jnthn The JVM porting effort started about November last year. I think we first could run interesting Perl 6 code in July.
13:48 Fatalnix wait wat
13:48 jnthn Well, late June maybe... Anyway, the JVM port is rather new :)
13:48 Fatalnix okay, so its not like an abandonment
13:48 Fatalnix in terms of optimization
13:49 jnthn Of course, we'd been designing to be able to do multi-backend for quite a while.
13:49 timotimo what do you mean "abandonment"? abandoning parrot?
13:49 Fatalnix I would rather not be forced to use the JVM for my personal perl projects
13:49 Fatalnix but for MC mods I don't have an option :D
13:49 timotimo right. we're keeping parrot, because it kicks the JVM's ass for very short runs, because its startup time is so good
13:49 jnthn Anyway, for now the focus is on tracking down things that don't work more than optimizing. :)
13:49 timotimo and we're getting a javascript and MoarVM backend for the future as well
13:50 * timotimo checks for more yapc talk recordings
13:50 jnthn :)
13:50 Fatalnix I was here yesterday thinking about a Xen backend
13:50 Fatalnix like http://erlangonxen.org
13:50 Fatalnix for making parallel spawn clusters.
13:51 Fatalnix its really useful for projects like that where you need lots of parallel processing power, but don't want the overhead of an operating system
13:51 timotimo hm. perl in my butt^W^Wthe cloud and 25 years of perl in 25 minutes are up, as well as design decisions on p2
13:52 lizmat r: bag(bag(<a b c>)).perl.say  # expected something like bag(bag()), right?
13:52 camelia rakudo fb7c07: OUTPUT«Bag.new-fp("a" => 1=>1,"b" => 1=>1,"c" => 1=>1)␤»
13:52 timotimo Fatalnix: sometimes i get mad at people who suggest that and say: "this has been invented 50 years ago and back then they called it 'processes'!"
13:52 Fatalnix timotimo: HAHA
13:52 Fatalnix that's a good one :D
13:52 lizmat the problem, I think, is caused by the slurpy of bag()
13:52 lizmat it causes flattening of the bag on the inside
13:53 lizmat but that's not something we want
13:53 btyler joined #perl6
13:53 dalek joined #perl6
13:53 timotimo but seriously: we had processes, then people wanted more separation between the processes so they made virtual machines with operating systems inside, now they are trashing the operating system part and the only thing they've gained is pretty good separation of processes, although other solutions offer that, too (like lxc, or if you want it more lightweight namespacing)
13:53 nwc10 what did dalek want to tell us about?
13:53 timotimo nwc10: stuff in #moarvm
13:53 lizmat r: my $b=bag(<a b c>); bag($b).perl.say # whereas this works as expected
13:53 camelia rakudo fb7c07: OUTPUT«Bag.new-fp(Bag.new-fp("a"=>1,"b"=>1,"c"=>1)=>1)␤»
13:54 timotimo "computed goto dispatch" were 'is last words
13:54 Fatalnix for some reason every time I see rakudo I think Rcaputo
13:55 lizmat so how can I get the ($b) behaviour for the (bag(…)) case
13:55 lizmat or is that just the way it is?
13:55 lizmat fwiw, several spectests are failing because of this
13:56 lizmat I also tried to give Bag/Set a "method flat { self }", but that didn't make a difference
13:56 timotimo r: bag(bag(<a b c>).item).perl.say  # expected something like bag(bag()), right?
13:56 camelia rakudo fb7c07: OUTPUT«Bag.new-fp(Bag.new-fp("a"=>1,"b"=>1,"c"=>1)=>1)␤»
13:56 lizmat timotimo: but is the .item really needed ?
13:56 timotimo not sure, haven't read the specs and don't really have an opinion
13:57 timotimo using the regular flattening/nonflattening mechanisms would be kind of nice, because a perl6 programmer would be used to that already
13:57 timotimo or do you mean to make bag auto-nonflatten?
13:57 lizmat the latter, but no success yet
14:01 bluescreen10 joined #perl6
14:07 thou joined #perl6
14:07 jnap joined #perl6
14:27 * lizmat adjusts the failing spectests
14:29 locsmif joined #perl6
14:32 pernatiy joined #perl6
14:35 colomon joined #perl6
14:40 lizmat r: say bag(bag())  # TimToady: should this give bag(bag()) or bag() ?
14:40 camelia rakudo fb7c07: OUTPUT«bag()␤»
14:40 lizmat problem is that with the slurpy sig of bag(), the inner bag() gets flattened before being added to the outer bag
14:40 lizmat r: say bag(set())  # TimToady: should this give bag(bag()) or bag() ?
14:40 camelia rakudo fb7c07: OUTPUT«bag()␤»
14:41 lizmat r: say set(bag())
14:41 camelia rakudo fb7c07: OUTPUT«set()␤»
14:41 lizmat r: say set(bag().item)  # specifically itemizing works
14:41 camelia rakudo fb7c07: OUTPUT«set(bag())␤»
14:42 PacoAir joined #perl6
14:54 benabik joined #perl6
14:55 colomon lizmat: that's a rakudo bug
14:55 lizmat ok, so not much point me chasing this further right now
14:59 colomon bag is not supposed to flatten
15:01 lizmat you mean, .flat should just return self ?
15:01 lizmat bag.flat
15:01 lizmat or you mean *@args ?
15:05 lizmat r: bag { a => 1, b=> 2 }.elems.say  # should this be 1 or 2 ?
15:05 camelia rakudo fb7c07: OUTPUT«2␤»
15:06 lizmat r: bag( { a => 1, b=> 2 }).elems.say  # should this be 1 or 2 ?
15:06 camelia rakudo fb7c07: OUTPUT«1␤»
15:07 kaare_ joined #perl6
15:07 colomon I'm not sure about .flat.
15:08 colomon but sets and bags are not supposed to flatten in a slurpy list.
15:08 colomon that's how you create sets of sets, etc.
15:10 TimToady what he says
15:12 * colomon apparently had TimToady explain this to him often enough that it finally stuck.  ;)
15:13 colomon TimToady++, I should have said
15:13 colomon TimToady: don't know if you've seen it or not, but lizmat++ has made great strides at getting a full Set implementation on Rakudo.
15:13 * TimToady has been watching :)
15:14 colomon r: set("a", 1, True).values.map({ .WHAT.asy })
15:14 camelia rakudo fb7c07: OUTPUT«Method 'asy' not found for invocant of class 'Bool'␤current instr.: '' pc 162 ((file unknown):237105798) (/tmp/24AfOMYECD:1)␤called from Sub '' pc 315901 (src/gen/CORE.setting.pir:134087) (src/gen/CORE.setting:6869)␤called from Sub 'reify' pc 314890 (src/gen/CORE.s…
15:14 colomon r: set("a", 1, True).values.map({ .WHAT.say })
15:14 camelia rakudo fb7c07: OUTPUT«(Bool)␤(Bool)␤(Bool)␤»
15:14 colomon r: set("a", 1, True).keys.map({ .WHAT.asy })
15:14 camelia rakudo fb7c07: OUTPUT«Method 'asy' not found for invocant of class 'Str'␤current instr.: '' pc 162 ((file unknown):94) (/tmp/ndAXUgJ_sX:1)␤called from Sub '' pc 315901 (src/gen/CORE.setting.pir:134087) (src/gen/CORE.setting:6869)␤called from Sub 'reify' pc 314890 (src/gen/CORE.setting.p…
15:14 colomon r: set("a", 1, True).keys.map({ .WHAT.say })
15:14 camelia rakudo fb7c07: OUTPUT«(Str)␤(Int)␤(Bool)␤»
15:14 colomon there we go
15:17 TimToady it's possible that set() and bag() should use ** (lol) rather than * (slurpy), though that would WAT on use of parens for grouping inside the list
15:17 lizmat indeed, tried that, has all sorts of effects, like set( <a b c > ) not doing what you expect
15:18 TimToady right, so scratch that :)
15:18 TimToady either that, or we teach people to use |<a b c> all over the place... :/
15:19 lizmat r: set( my $a=set() ).perl.say  # so I guess the $a provides an item context
15:19 TimToady but if we can get away with just teaching sets and bags to be a little more $-y in the absence of explicit unpacking, then let's stick with that approach
15:19 camelia rakudo fb7c07: OUTPUT«set(set())␤»
15:20 lizmat r: set( set().item ).perl.say  # so I guess the $a provides an item context
15:20 camelia rakudo fb7c07: OUTPUT«set(set())␤»
15:21 TimToady sets and bags are more like scalar containers than like list containers, basically
15:21 benabik Perhaps we want set<a b c>?  ;-)
15:21 lizmat well, I tried to make Set.flat { self }
15:21 TimToady std: set<a b c>
15:21 camelia std 27326bc: OUTPUT«[31m===[0mSORRY![31m===[0mâ�¤The 'set' listop may not be called without arguments (please use () or whitespace to clarify) at /tmp/m89OitjNpn line 1:â�¤------> [32mset[33mâ��[31m<a b c>[0mâ�¤Potential difficulties:â�¤  Use of non-subscript <...> where postfix is expect…
15:21 lizmat but the slurpy would still flatten it
15:21 lizmat maybe *that* is the problem
15:22 lizmat that the slurpy doesn't call .flat on the parameters ?
15:25 lizmat r: class A { method flat { say "flat"; self } }; sub a (*@a) { say @a }; a(A.new)  # expected to see "flat"
15:25 camelia rakudo fb7c07: OUTPUT«A.new()␤»
15:26 lizmat if a slurpy would call .flat on all its parameters, we could have objects for themselves decide how they would want to be flattened
15:26 benabik r: sub a(*@a) { say @a.perl }; my @a =1,2,3; a(@a); a([1,2,3])
15:26 camelia rakudo fb7c07: OUTPUT«Array.new(1, 2, 3)␤Array.new([1, 2, 3])␤»
15:26 benabik lizmat: I think the A is an item, so it doesn't get flattened.
15:27 * benabik finds flattening a little overly magical...
15:27 * TimToady wonders if the binder is trying to do it by introspection instead
15:30 TimToady r: class A does Iterable { method flat { say "flat"; self } }; sub a (*@a) { say @a }; a(A.new)
15:30 camelia rakudo fb7c07: OUTPUT«[31m===[0mSORRY![31m===[0m Error while compiling /tmp/F7JpqhDSj2�Iterable is not composable, so A cannot compose it�at /tmp/F7JpqhDSj2:1�------> �»
15:30 lizmat is Iterable ?
15:31 TimToady r: class A is Iterable { method flat { say "flat"; self } }; sub a (*@a) { say @a }; a(A.new)
15:31 camelia rakudo fb7c07: OUTPUT«No such method 'iterator' for invocant of type 'A'␤  in method reify at src/gen/CORE.setting:6760␤  in method reify at src/gen/CORE.setting:6764␤  in method reify at src/gen/CORE.setting:6764␤  in method reify at src/gen/CORE.setting:6860␤  in method reify at src/g…
15:31 TimToady r: class A is Iterable { method iterator { say "iterated"; self } }; sub a (*@a) { say @a }; a(A.new)
15:31 camelia rakudo fb7c07: OUTPUT«iterated␤No such method 'reify' for invocant of type 'A'␤  in method reify at src/gen/CORE.setting:6764␤  in method reify at src/gen/CORE.setting:6764␤  in method reify at src/gen/CORE.setting:6764␤  in method reify at src/gen/CORE.setting:6860␤  in method reify at…
15:32 TimToady looks like it's using .iterator, not .flat
15:32 lizmat aha!
15:34 lizmat builiding without a method "iterator"
15:39 lizmat builiding with "method iterator { self }
15:44 REPLeffect joined #perl6
15:50 [Coke] nwc10: I would like to get the daily star stuff working again for rakudo.parrot, and also start running it for rakudo.jvm - will make it easier to see which bundled modules (which should be the same for both) break. (rakudo.jvm being slightly more fragile at this point)
15:51 lizmat adapting the iterator, fails because of missing reify
15:51 TimToady is it still declared Iterable?
15:51 lizmat adapting eager (which is even lower in the stack) to "eager { self }" doesn't do it either
15:51 lizmat i'm out of ideas and hungry
15:52 lizmat so cycling and dinner&
15:52 jnthn evening, #perl6
15:52 colomon o/
15:57 pmurias jnthn: evening, jnthn
15:58 SamuraiJack joined #perl6
15:58 jnthn o/ colomon, p,
15:58 jnthn um, pmurias
15:58 jnthn .oO( keyboards, how do they work... )
16:04 dalek rakudo-js: dfe5518 | (Pawel Murias)++ | / (2 files):
16:04 dalek rakudo-js: Pass nqp/t/rx_modifiers.
16:04 dalek rakudo-js:
16:04 dalek rakudo-js: Implement bos and eos anchors, fix bugs.
16:04 dalek rakudo-js: review: https://github.com/pmurias/rakudo-js/commit/dfe5518ad5
16:04 dalek rakudo-js: 5c5a89d | (Pawel Murias)++ | / (2 files):
16:04 dalek rakudo-js: Pass nqp/t/qregex/rx_quantifiers.
16:04 dalek rakudo-js:
16:04 dalek rakudo-js: Fix quantifiers.
16:04 dalek rakudo-js: review: https://github.com/pmurias/rakudo-js/commit/5c5a89d936
16:05 * diakopter giggles at parrot register names in PIR making it into both the moarvm and javascript backends of the rakudo regex compiler..
16:09 prateeksha joined #perl6
16:10 [Coke] will be fun for the archaeologists.
16:11 jnthn We might just rename it in the MoarVM one :P
16:12 diakopter jnthn: yeah but it's there ... hundreds of times
16:17 * TimToady is reminded of the longevity of car and cdr...
16:18 lowpro30 joined #perl6
16:20 diakopter blame pmichaud++'s ineffable regex compiler
16:21 jnthn .oO( I think I may have eff'd at it once... :P )
16:21 jnthn Probably when working out what P11 does :P
16:25 masak oh hai from a train! \o/
16:25 diakopter as long as your eggs and ham aren't also green
16:26 jnthn o/ masak
16:26 dalek rakudo-js: e27dd5c | (Pawel Murias)++ | src/QAST/Compiler/JavaScript.nqp:
16:26 dalek rakudo-js: Stop using I18 as a variable name.
16:26 dalek rakudo-js: review: https://github.com/pmurias/rakudo-js/commit/e27dd5cb2e
16:27 dmol joined #perl6
16:29 diakopter #perl6, where non-sequitors follow at least each other
16:31 domidumont joined #perl6
16:31 skids joined #perl6
16:39 rindolf joined #perl6
16:39 PacoAir joined #perl6
16:40 * donaldh is still struggling to golf the LexoticException in the panda tests
16:43 agre joined #perl6
16:44 alester joined #perl6
16:45 masak diakopter: a chain of non sequiturs is only as strong as its weakest non-link.
16:45 masak diakopter: you cannot step down into the same non sequitur twice.
16:46 masak diakopter: I'm sorry, I do not follow.
16:46 diakopter masak: you're following too closely; back off
16:46 bbkr joined #perl6
16:46 * masak dresses up as a sad clown, and dives into a barrel of blueberries
16:47 diakopter too bad the barrel is inside out
16:47 masak if I cannot follow, I would like to subscribe to your newsletter.
16:48 diakopter (inside out barrel of blueberries means the entire universe is blueberries except inside the barrel)
16:48 * masak .oO( this modus totally doesn't ponens )
16:48 masak diakopter: I read that as "except inside the Parrot".
16:49 diakopter ah yes, that's what I meant
16:49 masak I follow now, which frightens me a lot.
16:50 TimToady inside of a parrot, it's too dark to read a newsletter
16:50 masak TimToady: on the Internet, nobody knows you're a blueberry.
16:50 diakopter my god, it's full of blueberries
16:50 * masak .oO( memier than thou )
16:52 diakopter .oO( but daddy, I want an oompa loompa )
16:52 * TimToady has to go smog a car, which is about the same as desmogging a car
16:52 TimToady and unpeeling a banana is the same as peeling it
16:52 * masak .oO( better than snogging a car )
16:52 masak unpeeling a banana sounds really unappealing.
16:53 diakopter oh, you must've meant annealling a banana
16:53 TimToady Cation! Chemists at work!
16:54 TimToady smog chemists in this case, unless it's desmog chemists...
16:54 cognominal joined #perl6
16:54 TimToady afk &
16:54 TimToady afkr &
16:55 PerlJam I know I can always count on #perl6 for humor or confusion.   Sometimes both simultaneously.
16:55 diakopter afkira &
16:55 PerlJam Though today it looks like just humor.
16:56 masak PerlJam: on the Internet, nobody knows you're a pair of non secateurs.
16:58 PerlJam pair?  We're a whole tribe of non-secanteurs!
17:00 * masak .oO( the carafe was a total non decantur )
17:02 masak PerlJam: I may not be a secanteur, but I'm a devoted sixateur.
17:03 * masak .oO( this classical computing machine is so non sequantum )
17:04 diakopter masak: it's not von sequantum?
17:04 masak LOL
17:04 masak that joke was Neu, man.
17:05 * masak .oO( I feel we have reached the capacity of the von annoy-man bottleneck )
17:06 diakopter moritz: you should put random pictures of chromatic in the irclogs with postcards "wish you were here"
17:06 PerlJam masak: Not as long as you're turing the channel
17:06 masak PerlJam: you mean turing the shannon.
17:07 diakopter "I thought you said you wanted me to curette the channel"
17:08 diakopter "er.. tourette"
17:08 * masak .oO( "Radioactivity?" asked Marie, curiously... )
17:09 * arnsholt starts his third branch for native call on JVM
17:09 masak diakopter: at least you didn't accidentally misspell "tourette" as "go stick your head inside a pig"
17:11 Rotwang joined #perl6
17:11 diakopter how would I have done that :( :( :( :( :( :( :( :(   at least we're not debating the existing of irony
17:11 diakopter *existence
17:11 masak jnthn: you have to check this out: https://en.wikipedia.org/wiki/Tom_Swifty#Examples
17:12 Fatalnix Back!
17:12 Fatalnix soooo...
17:12 diakopter to life or reality?
17:12 masak diakopter: the existence of irony is not under question. people just disagree what it is, exactly :P
17:12 Fatalnix I was doing make install with the JVM rokudo:
17:12 Fatalnix is this supposed to happen?: make: *** [CORE.setting.jar] Killed
17:12 diakopter ...or the here and now?
17:13 PerlJam masak: some of my wood working tools are irony, but most are steely
17:13 diakopter masak: right, but if you can't identify it, it doesn't exist to you
17:14 PerlJam diakopter: you just have to ferric it out.
17:14 masak PerlJam: irony is going to a ferreteria and being attacked by marmots.
17:14 diakopter I read this headline and thought "well that's a job for moritz" http://www.cnn.com/2013/09/05/world/asia/china-river-dead-fish/index.html
17:15 arnsholt Fatalnix: You happen to be on Linux?
17:15 diakopter or at least marmalade
17:15 Fatalnix arnsholt: yep
17:15 Fatalnix Slackware to be precise
17:15 Fatalnix wait, it doesn't have to do with LD_LIBRARY_PATH does it?
17:16 Fatalnix because I have java installed in a strange location
17:16 arnsholt How much RAM do you have? It could be the OOM killer
17:16 diakopter .oO( the moon? )
17:16 Fatalnix a gig on this box
17:16 jnthn Yeah, Killed implies it hit a resource limit...
17:16 Fatalnix I have 16 GB on my home desktop
17:17 Fatalnix but this is a work machine heh
17:17 arnsholt A gig might be a bit tight, I think
17:18 Fatalnix technically I could install it on my desktop then bring it in?
17:18 arnsholt Probably
17:18 diakopter masak: is your local ferreteria all-you-can-eat?
17:18 jnthn If the paths are the same, it *should* easily work.
17:18 Fatalnix yes
17:18 Fatalnix they both should be like, /usr/lib64/java/jre/lib/amd64
17:18 Fatalnix or whatever
17:19 Fatalnix for the runtime
17:19 Fatalnix and the jdk isnt far
17:19 Fatalnix yep
17:20 colomon joined #perl6
17:20 arnsholt jnthn: When we bundle JNA as a 3rd party lib, do we prefer it to be LGPL2.1 or Apache 2.0?
17:20 Fatalnix however I think my desktops running jdk6, so I'd need to upgrade it
17:20 diakopter masak: remind me to not visit twitter
17:20 masak diakopter: don't visit twitter.
17:20 diakopter masak: remind me to not visit twitter
17:21 jnthn arnsholt: Hmm...Apache is perhaps the liberaller
17:21 jnthn but, IANAL :)
17:21 locsmif_ joined #perl6
17:21 masak diakopter: don't visit twitter.
17:24 arnsholt I'll go for Apache for now then. It's dual licenced, so we can always change it over later, but it's always good to get it right the first time
17:24 masak diakopter: the closest local ferreteria from here is probably in Spain.
17:25 flussence fwiw I got rakudo-jvm to compile on 1GB, I just had to give it 16GB of swap...
17:25 masak o.O
17:25 diakopter did you try 15GB?
17:25 flussence I had a spare SD card and didn't feel like being fancy
17:29 flussence (it'd probably be fine with 1-2GB swap, considering that's a 32bit CPU...)
17:31 sergot hi ! o/
17:32 arnsholt sergot!
17:35 diakopter masak: remind me to not visit twitter
17:35 masak sergocie! \o/
17:35 diakopter oops, too late
17:35 masak diakopter: don't visit twitter.
17:38 arnsholt Is test failures due to missing chdir a known problem on NQP/JVM?
17:42 TimToady diakopter: don't forget to visit twitter
17:42 PerlJam jnthn: I've found the perfect residence for you I think:  http://www.quora.com/What-Does-It-Feel-Like-to-X/What-is-it-like-to-have-won-an-unlimited-supply-of-something#ans2577515
17:46 masak quora-- # obligatory sign-in :(
17:48 flussence the content isn't all that hard to get to for me (with almost everything except the bare html blocked... :)
17:51 arnsholt jnthn: What goes in src/vm/jvm/NQP/Ops.nqp and what in src/vm/jvm/QAST/Compiler.nqp?
17:52 * benabik loves "Inspect Element" for the ability to add display:none to annoying things.
17:53 masak benabik: ooh
17:54 benabik Although that doesn't help when they don't include anything other than the first answer in the HTML.
17:54 benabik quora--
17:54 arnsholt I've given up on Quora
18:03 jnthn arnsholt: NQP/Ops.nqp is things that are only relevant to NQP, not to Rakudo.
18:04 arnsholt Right. Cheers!
18:14 ajr joined #perl6
18:14 donaldh jnthn: any preference between adding nqp::setinputlinesep and changing nqp::readline to take a linesep ?
18:15 donaldh readlinefh, I mean
18:15 donaldh of course, readlineintfh and others would also need configurable linesep
18:15 jnthn donaldh: Is it sep or seps?
18:16 jnthn (Thinking \r\n vs \n)
18:16 donaldh string?
18:17 colomon rn: my $s = KeySet.new; $s<nothing>--; say $s;
18:17 jnthn Or, I guess it's not chomping, just hunting, so...
18:17 camelia rakudo fb7c07: OUTPUT«KeySet.new()␤»
18:17 camelia ..niecza v24-95-ga6d4c5f: OUTPUT«keyset()␤»
18:17 colomon rn: my $s = KeyBag.new; $s<nothing>--; say $s;
18:17 Fatalnix sep and rep?
18:17 camelia niecza v24-95-ga6d4c5f: OUTPUT«keybag()␤»
18:17 camelia ..rakudo fb7c07: OUTPUT«Could not find symbol '&Return'␤  in method <anon> at src/gen/CORE.setting:11550␤  in any  at src/gen/Metamodel.nqp:2671␤  in any find_method_fallback at src/gen/Metamodel.nqp:2659␤  in any find_method at src/gen/Metamodel.nqp:946␤  in sub EXHAUST at src/gen/CORE.s…
18:17 Fatalnix reminds me of the 65c816 cpu
18:18 diakopter random-looking words in backtraces?
18:19 diakopter DRAGON
18:19 diakopter EASTER
18:19 diakopter TRANSMOGRIFIER
18:20 FROGGS joined #perl6
18:20 diakopter donaldh: let's make linesep a global
18:20 jnthn I think it needs to be per handle, no?
18:21 diakopter I think it should be a global named $/
18:21 donaldh per handle, at least. possibly per operatioon
18:21 donaldh diakopter: are you trolling ;-)
18:22 diakopter half-heartedly
18:23 donaldh separate op if it is per handle?
18:23 donaldh so the setting is consistent across readlinefh calls for a given handle?
18:24 * flussence makes a mental note to use inscrutable all-caps synonyms more often in code to keep it interesting
18:24 ajr_ joined #perl6
18:24 donaldh or, is it included in every readline* op so that nqp handle and rakudo handle cannot get out of sync??
18:26 arnsholt Oh, awesome! Opening random files in the git history was super easy with fugitive
18:26 nwc10 masak: http://www.quora.com/What-Does-It-Feel-Like-to-X/What-is-it-like-to-have-won-an-unlimited-supply-of-something?share=1#ans2577515
18:26 nwc10 or even http://www.quora.com/What-Does-It-Feel-Like-to-X/What-is-it-like-to-have-won-an-unlimited-supply-of-something?share=1#ans2577515
18:26 nwc10 if your client highlights that better.
18:26 benabik ack --cathy
18:27 benabik ww
18:27 flussence .oO( what's the escape sequence for reverse video... )
18:28 locsmif_ joined #perl6
18:29 masak nwc10: you rock. as opposed to quora--
18:29 nwc10 IIRC mst told me that one
18:29 nwc10 no idea how long before they figure out how to block it
18:30 masak PerlJam: nice! too bad it was Carlsberg, though :/
18:30 jnthn donaldh: Hmm....good question. It feels odd to pass something that'll likely not change with every readline op...
18:31 jnthn masak: Calrsberg is probably the best beer in the world
18:32 dmol joined #perl6
18:32 masak jnthn: there is that.
18:33 jnthn "there are several studies that indicate that being drunk can actually improve your creativity" - tbh, Carlsberg is sufficiently weak you'd need an unlimited supply to achieve drunk :P
18:35 sqirrel joined #perl6
18:37 alester benabik: ISN'T THAT THE BEST?
18:37 donaldh jnthn: I'll put in a new op.
18:37 benabik alester: I always love new ack options.
18:37 alester And all I did was add an issue to the GitHub tracker saying "I would like this"
18:37 alester and voila!
18:42 masak :)
18:42 arnsholt jnthn: I <3 how fiddling with the runtime stuff is SO much faster on JVM
18:42 arnsholt jnthn++
18:46 agre_ joined #perl6
18:56 arnsholt JVM segfault! /o\
18:57 [Coke] whoa.
19:02 dalek perl6-roast-data: 5b9d329 | coke++ | / (5 files):
19:02 dalek perl6-roast-data: today (automated commit)
19:02 dalek perl6-roast-data: review: https://github.com/coke/perl6-roast-data/commit/5b9d329cf1
19:03 [Coke] niecza is passing some todo'd tests, but also failing a new keybag test.
19:03 abnorman joined #perl6
19:08 [Coke] +S32-str/sprintf.rakudo.jvm aborted 145 test(s) - there's most of rakudo.jvm's backslide from yesterday
19:09 colomon :(
19:09 colomon thought I added a skip for the changes I made to that sprintf.t...
19:09 colomon [Coke]: my feeling is the new keybag test is wrong.
19:10 [Coke] https://gist.github.com/coke/6454695 - there's a bunch of passed todos in -all- the impls that should be unfudgable.
19:11 colomon I'm also getting niecza failures in S04-phasers/start.t, haven't looked into them yet.
19:11 [Coke] colomon++: I'll let you and lizmat++ duke that out.
19:11 [Coke] colomon: I ran roast as of d32875f - not sure if you have a newer version.
19:12 * [Coke] has to drop off. l8rs.
19:13 dalek joined #perl6
19:19 donaldh gak. I should have checked parrot. It uses $!PIO.readline($sep)
19:19 donaldh do we want consistency with parrot ?
19:20 donaldh on JVM  / nqp op signatures that is....
19:21 FROGGS the nqp:: ops should have the same signature, yes
19:21 donaldh so that's an additional parameter to each nqp::readline* op rather than nqp::setinputlinesep, agreed?
19:22 zwut00 joined #perl6
19:23 FROGGS I'd say so but you might ask jnthn for a decision
19:25 zwut00 joined #perl6
19:27 dalek Perlito: 9643c62 | (Flavio S. Glock)++ | TODO-perlito5:
19:27 dalek Perlito: Perlito5 - TODO update
19:27 dalek Perlito: review: https://github.com/fglock/Perlito/commit/9643c620a5
19:28 moritz \o
19:30 abnorman joined #perl6
19:30 donaldh jnthn: are you if I choose consistency with parrot with nqp::readlinefh(… , $sep)  # seel last 10 mins of backlog
19:30 donaldh *happy*
19:31 * donaldh has added setinputlinesep and is oscillating here :-)
19:32 benabik parameters > globals
19:32 jnthn The latter makes a bit more sense to me...
19:32 jnthn As in, it feels odd to look up and pass something every line we want to read.
19:32 jnthn benabik: Well, it's not so much global as on the iflehandle...
19:33 donaldh yes, nqp::setinputlinesep($iohandle, $sep)
19:33 benabik jnthn: Hm.  I'm not sure if parameters and object state are well-ordered.
19:33 donaldh the encoding is currently an op
19:33 donaldh so the linesep as an op is consistent with that.
19:34 jnthn aye
19:35 donaldh The rakudo code is oriented around passing it as a parameter to readline though.
19:35 donaldh Grr. not consistent on parrot anyway.
19:36 dalek Perlito: a0beddf | (Flavio S. Glock)++ | t5/01-perlito/080-array.t:
19:36 dalek Perlito: Perlito5 - tests - slice tricks
19:36 dalek Perlito: review: https://github.com/fglock/Perlito/commit/a0beddf35b
19:36 donaldh rakudo code does this for parrot:          $PIO.encoding($encoding);
19:36 donaldh my str $line = $PIO.readline($sep);
19:51 Util r: class Z { has $.attr1; }; my Z $a .= new: attr1 => "A"; my Z $b .= new: attr1 => "A"; use Test; is_deeply($a, $b, "Have same attribute values");
19:51 camelia rakudo fb7c07: OUTPUT«not ok 1 - Have same attribute values␤#      got: Z.new(attr1 => "A")␤# expected: Z.new(attr1 => "A")␤»
19:51 Util "Not ok" ???
19:51 Util What should I be doing different to compare objects with Test?
19:51 Util Something besides is_deeply()?
19:52 masak I suspect is_deeply was never made to handle objects.
19:52 masak only arrays/lists and hashes.
19:52 masak &
19:54 moritz is_deeply simply uses eqv
19:54 moritz and eqv uses identity semantis on objects it doesn't know about
19:55 Util Is there no known trick to achieving object comparison with the current Test.pm code?
19:55 moritz no
19:56 Util I would start writing such a sub for Test.pm, but I actually need it to also work when the objects are parts of Arrays or Hashes that are compared with is_deeply().
19:56 Util moritz: Thanks! I will give it some thought, as to how to improve Test.pm .
19:57 moritz Util: maybe src/core/Mu.pm method perl can serve as inspiration
19:57 moritz Util: it does a walk through the attributes and .perl()s them
19:57 moritz Util: comparing them isn't that far away :-)
19:58 * Util looks...
19:58 Util moritz: Great idea! Thanks again!
20:03 xenoterracide_ joined #perl6
20:05 moritz r: https://gist.github.com/moritz/6455428
20:05 camelia rakudo fb7c07: OUTPUT«False␤True␤»
20:05 moritz ^^ for Util
20:06 Util moritz: Thanks twice; for the code, and for showing me camelia's URL-reading feature!
20:08 moritz it special-caseses public gist URLs
20:09 diakopter moritz: should add that feature to Perl 6 proper ;)
20:17 moritz diakopter: ... as soon as we have decided on how to mark value types, and only apply it to value types
20:19 diakopter moritz: ??
20:19 diakopter moritz: oh, I meant the gist-special-casing :)
20:19 moritz oh.
20:19 moritz :-)
20:21 benabik One of the more interesting features of Go is the import statement takes URLs,
20:21 diakopter benabik: I thought Perl 6's "use" had that capability
20:24 moritz it has, for authority. But that doesn't mean the runtime automatically downloads the dependency for you.
20:29 dalek roast: 2b8eda1 | (David Warring)++ | S29-conversions/ord_and_chr.t:
20:29 dalek roast: ord/chr tests on high chars > 0xFFF
20:29 dalek roast: review: https://github.com/perl6/roast/commit/2b8eda1fa5
20:33 arlinius joined #perl6
20:47 * skids takes note never to trust CA software written in Go :-)
20:49 lelf joined #perl6
21:03 clkao joined #perl6
21:05 skids joined #perl6
21:07 cognominal joined #perl6
21:17 dayangkun joined #perl6
21:24 itz joined #perl6
21:28 lowpro30_ joined #perl6
21:34 donaldh joined #perl6
21:36 donaldh .seen tadzik
21:36 yoleaux I saw tadzik 13:40Z in #perl6: <tadzik> oh, JVM may be shorter
21:41 lizmat r: my %h = set <a b o p a p o o>  # should this work, or fail with odd number of elements ?
21:41 camelia rakudo fb7c07:  ( no output )
21:41 lizmat r: my %h = set <a b o p a p o o> ; say %h # should this work, or fail with odd number of elements ?
21:41 camelia rakudo fb7c07: OUTPUT«("a" => "b", "o" => "p").hash␤»
21:42 EvanTeitelman joined #perl6
21:48 TimToady my %h = { :a, :b :o, :p, :a, :p, :o, :o }; say %h
21:48 TimToady r: my %h = { :a, :b, :o, :p, :a, :p, :o, :o }; say %h
21:48 camelia rakudo fb7c07: OUTPUT«("a" => Bool::True, "b" => Bool::True, "o" => Bool::True, "p" => Bool::True).hash␤»
21:48 TimToady it should end up like that, I suspect
21:48 arlinius joined #perl6
21:49 TimToady unless we decide to completely undo the %h assignment dwimmery on hashes in the list
21:49 TimToady which there's an argument for, since it encourages people to expect the wrong thing here:
21:50 TimToady r: my @a = [ 1,2,3,4,5 ]; say @a.elems
21:50 camelia rakudo fb7c07: OUTPUT«1␤»
21:50 TimToady r: my @a = [ 1,2,3,4,5 ][]; say @a.elems
21:50 camelia rakudo fb7c07: OUTPUT«5␤»
21:51 TimToady r: my @a = [ 1,2,3,4,5 ].list; say @a.elems
21:51 camelia rakudo fb7c07: OUTPUT«5␤»
21:51 TimToady r: my @a = |[ 1,2,3,4,5 ]; say @a.elems
21:51 camelia rakudo fb7c07: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&prefix:<|>' called (line 1)␤»
21:51 TimToady aww
21:53 lizmat $ perl6 -e 'set(set()).say'
21:53 lizmat set(set())
21:53 lizmat the trick is really by taking things away
21:53 masak \o/
21:53 masak lizmat++
21:53 lizmat as in: make Set *not* inherit from Iterable, and get rid of the iterator method altogether
21:54 masak yay
21:54 lizmat the consequence of that, is that %h = set() doesn't work
21:54 lizmat %h := set() *does*
21:54 jnthn TimToady: Rakudo only knows what to do with | in the context of an argument list.
21:54 masak the what the what what?
21:54 masak lizmat: how does that I don't even
21:54 masak sets are unordered.
21:54 lizmat masak: and they still are
21:55 jnthn TimToady: Which is largely a result of me not knwing what to do with it in any other context. ;-)
21:55 lizmat well, at least as much as the *underlying* hash is
21:55 jnthn lizmat: Can you still iterate a Set?
21:55 lizmat as in, asking its .values or .keys ?
21:56 lizmat yes
21:56 colomon iterating the .values of a Set is Boring.
21:57 lizmat let me put it this way: does it pass the spectest: yes
21:57 masak \o/
21:57 masak wfm!
21:58 jnthn masak: yeah but are the tests sane? :P
21:59 jnthn Anyways, lizmat++
21:59 lizmat the only thing that doesn't work atm is .Str
21:59 * jnthn hopes to have branes/tuits to catch up soon... :)
21:59 jnthn Weekend soon \o/
22:00 donaldh the socket tests are brutal on JVM. ~30s per test, launching sub-processes.
22:00 jnthn o.O
22:00 jnthn I wonder if we can somehow make it happen through the evalserver?
22:02 donaldh I've been thinking about spawning just the server, via a pipe, then running the client calls directly from the test code.
22:03 donaldh still, woohoo, closing in -->| |<--  Failed 3/41 subtests
22:03 jnthn donaldh++ \o/
22:04 donaldh Also implemented nqp::openpipe along the way, so will have a shot at IO::Pipe when I get a chance.
22:04 jnthn \o/
22:05 jnthn Very happy to see all of this happening.
22:05 jnthn Heading off for the night... o/
22:05 dalek nqp/donaldh-sockets: f2e5bb8 | (Donald Hunter)++ | src/vm/jvm/runtime/org/perl6/nqp/io/ (3 files):
22:05 dalek nqp/donaldh-sockets: donaldh first hack on sockets for JVM.
22:05 dalek nqp/donaldh-sockets: review: https://github.com/perl6/nqp/commit/f2e5bb8bae
22:05 dalek nqp/donaldh-sockets: bdce26a | (Donald Hunter)++ | src/vm/jvm/ (3 files):
22:05 dalek nqp/donaldh-sockets: Initial ops for socket IO using NIO.
22:05 dalek nqp/donaldh-sockets: review: https://github.com/perl6/nqp/commit/bdce26a2a0
22:05 dalek nqp/donaldh-sockets: f93c49d | (Donald Hunter)++ | src/vm/jvm/ (6 files):
22:05 dalek nqp/donaldh-sockets: Added server socket and process pipe to IO.
22:05 dalek nqp/donaldh-sockets: review: https://github.com/perl6/nqp/commit/f93c49d092
22:05 dalek nqp/donaldh-sockets: eccf03e | (Donald Hunter)++ | / (4 files):
22:05 dalek nqp/donaldh-sockets: Add nqp::openpipe tests (JVM only)
22:05 dalek nqp/donaldh-sockets: review: https://github.com/perl6/nqp/commit/eccf03e558
22:05 dalek nqp/donaldh-sockets: 2990f78 | (Donald Hunter)++ | src/vm/jvm/ (5 files):
22:05 dalek nqp/donaldh-sockets: Add nqp::setinputlinesep for JVM.
22:05 dalek nqp/donaldh-sockets: review: https://github.com/perl6/nqp/commit/2990f78a7c
22:06 lizmat gnight jnthn!
22:06 donaldh 'night jnthn
22:06 donaldh also goodnight from me
22:06 lizmat having "multi method Str(Set:D --> Str) { say "Str"; ~ %!elems.values }" in class Set, why would this happen?
22:06 lizmat $ perl6 -e 'say Set.new.Str'
22:06 lizmat Set<8667138321660864054>
22:07 lizmat aka, the .Str in the Set class is *not* invoked, but the default from Any
22:10 lizmat hmmm… not sure which one get used now
22:15 s00pcan joined #perl6
22:16 masak lizmat: $ perl6 -e 'say set( set(), set() ).elems'
22:17 lizmat 2
22:17 masak :(
22:17 lizmat not good ?
22:17 masak I'm not sure.
22:17 lizmat the outer set contains 2 inner sets
22:17 masak but I think I can make a good case for 1.
22:17 masak sets are value objects.
22:17 lizmat why ?
22:18 lizmat ah, you mean, one empty set is the other
22:18 masak right.
22:18 masak they are isomorphic to their hash value.
22:18 masak in other words, there's really only one empty set.
22:18 lizmat $ perl6 -e 'say set().WHICH; say set().WHICH'
22:18 lizmat Set|-1241934011241020495
22:18 lizmat Set|-1241934013386517835
22:19 masak I'm aware that the case can be argued both ways here, though.
22:19 masak and it should probably be argued at the highest court, aka TimToady.
22:20 lizmat well, my original idea was to use typed hashes
22:20 lizmat that uses .WHICH for the keys
22:20 lizmat I basically re-used that idea for Sets/Bags
22:20 lizmat if that doesn't work, we need to think of something else, something probably much more expensice
22:20 lizmat expensive
22:21 lizmat well, in the case of the empty set, I guess we can work around that
22:22 lizmat as soon as we have ∅ for the canonical empty set
22:22 abnorman joined #perl6
22:22 lizmat we can have set() return that
22:22 lizmat but that wouldn't solve the pb of set( set(<a>), set(<a>) )
22:23 lizmat I will have to sleep on that one
22:24 timotimo sets are immutable?
22:25 lizmat yes, but KeySets aren't
22:25 REPLeffect joined #perl6
22:25 timotimo k
22:25 timotimo so if they are nested and an inner one changes: ouch
22:25 masak lizmat: AFAIU, set(<a>) has a hash code (aka .WHICH), so it'd hash the same way twice.
22:26 lizmat hash code?  you mean .Str ?
22:27 Mouq joined #perl6
22:27 timotimo actually, putting mutable things into a set is inherently a problem
22:27 masak when I say "hash" or "hash code" in this situation, I mean "something that could be used as a hash key".
22:27 masak timotimo: correct.
22:27 masak timotimo: it's a bit of a DIHWIDT thing.
22:27 timotimo i agree
22:27 lizmat masak: ah, ok
22:28 masak timotimo: if you have a mutable type with hashes that change as your object mutates, and you put those in a set-like thing, your foot is basically solidly shot at.
22:28 lizmat anyway, with these changes I get ~30 TODO's passing on the set tests
22:28 masak timotimo: but we also believe that Perl 6 programmers are grown-ups, who can be told such a thing, and not throw themselves off cliffs.
22:28 masak at least not for reasons other than -Ofun.
22:29 diakopter *throw*
22:29 benabik joined #perl6
22:31 * masak descends, wordlessly
22:31 timotimo indeed
22:32 timotimo masak.new.throw?
22:32 masak Python strikes a pretty good balance there, fwiw.
22:32 masak tuples are hashable. lists (arrays) are not. hashes are not. sets are.
22:32 timotimo right
22:33 masak the concept hashable has privileges (you can use the object as a hash key) and responsibilities (it's immutable, so you cannot change it).
22:34 lizmat so: KeySet.new( KeySet.new(), KeySet.new() ).elems, 1 elems or 2 elems ?
22:34 masak I suspect Perl 6 will end up having a social convention there. ("if you want to hash the objects, don't allow them to change in such a way that the hash changes")
22:34 masak lizmat: what I just wrote above.
22:34 masak lizmat: there's a case could be made that it's (socially) not-a-good-idea to even hash KeySets, because they are mutable.
22:35 lizmat right,ok
22:35 masak you can use KeySets for lots of things, but hashing them is not one of those things.
22:35 masak it's a bit like pushing a commit and then rebasing it :)
22:35 * masak has been teaching Advanced Git today
22:36 timotimo is sumbodules advanced git or super-advanced git?
22:36 masak it's in that course.
22:39 skids joined #perl6
22:45 EvanTeitelman joined #perl6
22:53 jnap joined #perl6
22:53 dalek rakudo/nom: d5b47b7 | (Elizabeth Mattijsen)++ | src/core/ (2 files):
22:53 dalek rakudo/nom: Code esthetics on set() and bag()
22:53 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/d5b47b7003
22:53 dalek rakudo/nom: a426d5a | (Elizabeth Mattijsen)++ | src/core/ (2 files):
22:53 dalek rakudo/nom: Set/Bag are no longer Iterable, Any (implicitely so)
22:53 dalek rakudo/nom:
22:53 dalek rakudo/nom: This solves the problem of sets/bags being flattened at most places
22:53 dalek rakudo/nom: review: https://github.com/rakudo/rakudo/commit/a426d5a1d9
22:54 dalek roast: 6825fb0 | (Elizabeth Mattijsen)++ | S0 (6 files):
22:54 dalek roast: (Un)Fudges for the latest Set/Bag code
22:54 dalek roast: review: https://github.com/perl6/roast/commit/6825fb0deb
22:55 fridim_ joined #perl6
22:55 lizmat will sleep on the issues masak++ and TimToady++ brought up
22:55 lizmat gnight #perl6!
23:01 tadzik joined #perl6
23:01 tadzik I... I disappeared :|
23:04 TimToady the identity of a mutable object is just its container .WHICH, same as === treats it
23:05 TimToady you can have a mutable object in a set, but it's the set that contains that mutable object, and the set doesn't care whether the mutable object changes, only that the object in the set is the same object
23:06 diakopter is there a method to recalculate the unique set if the object's identity changes?
23:06 TimToady an object's identity must not change
23:06 masak TimToady: agree so far, I think.
23:07 masak TimToady: what about the .WHICH of Set objects? does it have reference semantics, or value semantics?
23:07 TimToady if the GC moves an object around, you can't depend on its location as its identity
23:07 diakopter there's no such thing as mutable objects?
23:07 masak diakopter: it can be mutable without the *identity* changing.
23:08 diakopter .WHICH's output can't change on an object?
23:08 TimToady shouldn't
23:08 masak that's how I understood it.
23:08 masak which makes sense, since that's the thing we use for hashing.
23:08 diakopter at what point in the BUILD/new process can this be enforced?
23:09 TimToady it's exactly the same thing that === uses for comparison of identies, either value or object
23:09 diakopter *start being enforced
23:09 diakopter s/enforced/relied upon/
23:11 TimToady hopefully from the time the repr creates the actual scaffolding for the BUILD submethods to fill in
23:11 TimToady but I could be argued into the other extreme too, I suppose
23:11 diakopter when new returns?
23:12 TimToady however, it seems to me that self-caching objects would like to know their identity early
23:13 diakopter it's just that maybe WHICH should know to fail before the identity-determining state is finalized
23:13 TimToady otoh, self-caching objects will probably tend to be value-based rather than ref-based
23:13 TimToady but if value-based, you have to complete the value first
23:13 TimToady so maybe it's on return from .bless that we guarantee identity
23:17 diakopter "$a.foo" should warn me that I might have meant "$a.foo()"
23:19 tadzik hoelzro++ # very nice blogpost
23:38 masak tadzik: url?
23:45 flussence http://hoelz.ro/blog/perl-5-internals-part-two
23:58 masak 'night, #perl6

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

Perl 6 | Reference Documentation | Rakudo