»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
PerlJam r: printf("%.50f", 1.115) 00:04
camelia rakudo-jvm 9a2f3e: OUTPUT«(timeout)»
..rakudo-{parrot,moar} 9a2f3e: OUTPUT«1.11500000000000000000000000000000000000000000000000»
PerlJam nqp-jvm: say(nqp::sprintf("%.50f",[1.115])) 00:05
camelia nqp-jvm: OUTPUT«#␤# There is insufficient memory for the Java Runtime Environment to continue.␤# pthread_getattr_np␤# An error report file with more information is saved as:␤# /home/p6eval/hs_err_pid5092.log␤»
[Coke] t/spec/S02-types/multi_dimensional_array.t is failing. 00:16
PerlJam Seems we need a "fudge" for setting LOLLY 00:20
TimToady yes, I mentioned that test last night
but it's a temporary thing, so maybe just run the tests under LOLLY, since I've already vetted them for poisoned lollipops 00:21
it's really only the panda modules and dar6pan that need to run once without LOLLY and get fixed 00:24
6arkpan?
PerlJam
.oO( sharkpan? )
TimToady: Are you going to do shaped decls next? :) 00:25
TimToady no, I think Mouq++ is headed that direction
TimToady is working toward a faster gather/take now
PerlJam TimToady++ that would be awesome 00:26
TimToady first target, make a version of GatherIter that can take a batch of values every %% batchsize instead of one at a time 00:27
a variant, not a replacement, to be used when known eager
or known pure code
and possibly parameterize the co-routine with the target to reify to directly, and use the coro only for coordination, not to pass data back through an exception, but that's a bigger stretch, and possibly prone to locking issues 00:30
TimToady if I can get the latter to work, it makes it easier to reify a batch all at once before yielding 00:34
TimToady then take becomes something like 'push $!reified, $taken; yield if $!reified.elems %% $batchsize' 00:36
PerlJam the former seems way easier though :)
it would be a good stepping stone 00:37
TimToady except you have to wrap and unwrap each batch
since batches aren't supposed to turn into parcels
adding each parcel directly to $!reified would be simpler
and if we make every take wrap in a batch container, then normal lazy take becomes slower 00:38
PerlJam true
TimToady boy, that's hard to parse :)
so I think the 2nd is a worthwhile yakshave if I can swing it 00:39
TimToady first, an experiment to see if I can pass a parameter to the block() 00:41
PerlJam Would you end up getting rid of $GATHER_PROMPT and $SENTINEL? They look like artifacts of the current implementation to me. 00:44
TimToady maybe
hoelzro should I leave the content method on for POD blocks and mark it as deprecated, so that people aren't surprised when they try it instead of .contents? 01:09
tadzik +1 01:10
TimToady seems reasonable to an outsider :)
tadzik deprecation warnings tend to be so annoying that people fix their stuff in no time :D 01:11
TimToady which is partly why I didn't even bother to make the lolligag a warning, just a parse error
dalek Heuristic branch merge: pushed 137 commits to roast/S26-WHY by hoelzro
TimToady actually, we probably need to not only keep the continuation tag, but refine it to do lexotic gathers as specced, and not yet implemented 01:16
TimToady S04:796 01:17
synopsebot Link: perlcabal.org/syn/S04.html#line_796
jnthn accidentally the whole evening with fun :) 01:18
japhb LHF request: Implement PIO.isatty on all backends. I could really use the .t (is a TTY) file test for a couple UI features.
TimToady yowser xx *
japhb jnthn: Accident? Or Freudian Behavior?
TimToady RFTMI (Request For...) 01:19
japhb LOL
jnthn Uh, I went for curry and had some beer. :P
hagiri hello 01:19
=)
jnthn As opposed to writing my talks. :)
awwaiid hello
TimToady you sure you didn't go for beer and have some curry?
japhb Yeah, I realized that joke would probably be immediately misinterpreted ... right after I hit enter.
jnthn No, the order was certainly curry first. :)
japhb .ask timotimo If you are still tracking LHF requests, I'm looking for someone to implement PIO.isatty on all backends, so I can rely on the .t (is a TTY) file test. 01:21
yoleaux japhb: I'll pass your message to timotimo.
jnthn is going to be away from home for a month, and figured he'd better get in a trip to his local curry house before that. :)
jnthn There's so much backlog I didn't manage to get through it all on the train home. :) 01:22
jnthn I did get to the gather/take and coroutines (actually continuations in Moar) bit. 01:24
TimToady m: (<a b c>;<d e f>) 01:25
camelia rakudo-moar 9a2f3e: OUTPUT«===SORRY!=== Error while compiling /tmp/m_TX6wEpxt␤Unsupported use of ; in brackets as a statement sequence; in this and future versions please use SEQ(;) or $(;) for C comma semantics (or set LOLLY for the new list-of-list semantics fo…»
jnthn One thing I've wondered is how many of those cases could be eliminated by implementing r-value loops.
TimToady so you know about the lolly merge
jnthn xx could be done that way, for example
jnthn I think the lolly merge is just ahead of where I'm reading :) 01:25
dalek ecs: 273da4c | TimToady++ | S99-glossary.pod:
add tl;dr and TMI
01:30
jnthn finally read it all :) 01:36
TimToady er...congrats?
jnthn fwiw, I don't think GATHER_PROMPT and SENTINEL are problems. They're simply unique enough markers. 01:37
TimToady I figgered that out, and that we'd use that even harder for lexotic gathers 01:38
jnthn They actually were taken directly from sorear++'s JVM continuation impl. I did the same API on Moar.
Though what's underneath it is quite different. 01:39
(Since stack frames are more "first class" in Moar)
TimToady do you think it would work to give 'take' a direct reference to $!reified to push to? 01:40
jnthn Perhaps so. When I've thought about speeding it up, I'd considered having it not yield until there are another values. 01:41
That is, still have take do the exception throw, but it immediately resumes rather than doing continuation-y stuff.
So far as I can tell, the major cost is in the continuation, not the exception. 01:42
TimToady which is why you want to batch them if you can under one continuation
jnthn Right, that's what I'd been hoping for
The other thing I'd been thinking - though didn't yet figure out a good model, is that in:
my @a = 0 xx 1000; 01:43
It's be really nice if we could have it reify directly into $!items of @a
And avoid all the copying.
jnthn Maybe that's what you meant by direct reference to $!reified... 01:44
Question really is when we know we can get away with such cheating.
jnthn It felt to me like it was a sole consumer vs bound distinction. 01:45
TimToady well, that's my job, and pmichaud++'s
jnthn As in, in the direct assignment case, it's clear that there's a single sinker.
TimToady well, if multiple, you have to have a queue that can be pushed onto, and anyone take off 01:46
which is why I mentioned potential locking issues
jnthn Yes, today if two threads want to reify the same thing at a time...problem.
The main thing to look out for there is that we don't end up with circular waiting. 01:47
TimToady well, yes, I'd like a constant list to be able to define itself in terms of its earlier elements, as Haskell allows 01:47
we haven't got there quite yet 01:48
jnthn Yes, it's making that situation work out without ending up with deadlock... 01:49
.tell lizmat On SEGV, maybe try bumping to latest MoarVM; I fixed a nasty bug that broke a GC invariant earlier today...uh, yesterday... 01:51
yoleaux jnthn: I'll pass your message to lizmat.
TimToady but direct reification might be just what the doctor ordered to avoid the current behavior
jnthn If we can get rid of the continuation for every value and the copying in something with an eager array assignment on the LHS and a gather/take-using thing on the RHS, we're probably onto something that can perform well. 01:52
TimToady m: constant foo = 1, foo; say foo[1]
camelia rakudo-moar 9a2f3e: OUTPUT«===SORRY!===␤Cannot invoke null object␤»
jnthn The other thing that would be really nice is if: 01:53
for something() { ... }
Could compile into something that pulls values from some iterator, and so can flatten away taht block
Though maybe that's less of an issue when spesh gets cleverer about closure semantics. 01:54
TimToady or at turn it into a loop with a simple goto
jnthn Well, the reason we do well on some for-using benchmarks and not others is because we can turn for 1..10000 { } into a while loop 01:55
(But not the other cases)
TimToady though that's not as bad as it used to be, even without that optimization, since Range knows how to do some batching on it's own when called from MapIter
jnthn Another one to keep in mind - which I know is slow but don't have a good answer for - is for @a X @b { ... }
Yes, but for a for <literal range> { ... } today, Rakudo completely optimizes away need for a MapIter or a Range. 01:56
*the need 01:57
TimToady well, at least we have @x[@a;@b] notation now to play with there, though I doubt it's blazing fast yet
TimToady yes, I know, but not for 1..10, 100..200 {...} 01:57
jnthn Right
So far as I can tell, much of the cost in forest fire, which we're > 150x slower at than Perl 5, is overhead from list-y stuff. 01:59
TimToady that's the old ff, not my revised one that doesn't copy, I assume
jnthn (I can try and get some higher resolution answers on where the cost is if it helps, but it'll be at/after YAPC)
jnthn Whichever one perl6-bench as 01:59
*has
TimToady looking 02:00
jnthn Though array_set_xx is probably our most awful result
TimToady yes, that's the old one that copies element by element 02:01
(the new one has a Warming state to enable processing it in place)
jnthn Current r-m weighs in 350x slower there. Though it's an improvement on a year ago, when the latest and greatest r-p was 2060x slower :)
TimToady well xx should be pretty easy to optimize when the LHS is constant, since it's relatively pure like a Range 02:02
jnthn visit_2d_indices_cross is a good one to look at for X being slow, fwiw. 02:03
TimToady so you can at least batch it even if it's in a lazy context, or infinite
jnthn Yes, true.
TimToady well, X should be constant foldable with constant ranges, fwiw 02:06
jnthn Hm, true
TimToady but I suspect a lot of the overhead is in the indexing end
note that ff uses the same constant X over and over 02:07
so might be worth it there
jnthn The result in visit_2d_indices_for suggests the cost is in the X, afaict.
TimToady and uses it in multiple places
maybe it is, now, with jit
if you know you're binding to $x,$y, you can preflatten the X constant too 02:08
jnthn Gonna sleep. Should try and not get my body used to crazy late nights when I'll have to get up early for a YAPC flight in a couple of days... :)
TimToady and share all the same ones in the program
'night
japhb Good night, jnthn!
jnthn o/
(BTW, really pleased to see list performance is getting some serious attention. If we can get that a good bit faster, we will be in a much better place overall.) 02:09
'night
dalek Heuristic branch merge: pushed 92 commits to rakudo/S26-WHY by hoelzro 03:05
ast/S26-WHY: f9ad8e9 | (Rob Hoelz)++ | integration/advent2011-day10.t:
Fix calls to POD .content

It's now .contents
ast: 2c0ae6c | (David Warring [email@hidden.address] | integration/advent2012-day04.t:
removed invalid test
03:07
dalek kudo/S26-WHY: 358271b | (Rob Hoelz)++ | src/core/Pod.pm:
Mark Pod::Block.content as deprecated
04:01
clkao w/in 2 05:04
dalek kudo/nom: e7835e9 | TimToady++ | src/core/GatherIter.pm:
gather should batch an eager reify

Just changing the batch size from 1 to 1000 makes a simple gather/take run twice as fast, even though it's still doing all the continuations.
05:49
TimToady also makes 0 xx 100000 run roughly 10% faster, but that's in a case it shouldn't be using gather/take at all 05:52
dalek kudo/nom: f1a7c65 | TimToady++ | src/core/List.pm:
make xx about 3 times faster on literals
06:16
TimToady for N in the neighborhood of 100000 06:17
still uses gather/take, but does batches of 100 for N larger than 100 06:19
doubtless one could still do much better with something handrolled in nqp 06:20
it's also a pity we don't have a GatherIter that just pushes rather than parcelizing each take
and really one should scale the batch size to the order of magnitude of sqrt(N) or so 06:22
but this is a start
ingy1 jnthn: you about? 07:05
TimToady could probably help me the most but I'm scared of his response :) 07:06
sergot o/ 07:47
daniel-s_ \o 08:09
Hey sergot
Ven hahaha that take seq $n -= 100 feels like a bit of a hack :P 08:14
sergot hi daniel-s_ 08:20
lizmat jnthn: confirmed that Moar master does not segv's with jit enabled and without LOLLY
yoleaux 01:51Z <jnthn> lizmat: On SEGV, maybe try bumping to latest MoarVM; I fixed a nasty bug that broke a GC invariant earlier today...uh, yesterday...
nwc10 lizmat: yay! So now works on your machine? 08:22
lizmat yup, and spectest is clean 08:23
except for LOLLY tests
so I'm gonna bump revisions
dalek p: 3857128 | (Elizabeth Mattijsen)++ | tools/build/MOAR_REVISION:
Bump for fix for LOLLY crash on OSX
08:24
kudo/nom: f532c1d | TimToady++ | src/core/List.pm:
scale xx better based on size
lizmat testing bumped NQP version now 08:26
FROGGS nwc10: The requested URL /apw2014/wikiedit was not found on this server. :o( 08:30
nwc10: hmm, now it works... weird 08:31
nwc10 odd 08:32
FROGGS yeah, maybe the preview is broken only
dalek kudo/nom: 6e536ac | TimToady++ | src/core/List.pm:
couple of buglets in previous patch
08:34
lizmat hmmm... serious failures with this NQP version :-( 08:38
seem to all fail with: Unexpected named parameter 'thunked' passed 08:40
lizmat ah, buglets 08:40
trying again with latest patch...
dalek kudo/nom: ebfe24f | (Elizabeth Mattijsen)++ | tools/build/NQP_REVISION:
Bump NQP to fix jit/LOLLY problem on OSX
08:45
TimToady with these patches, 42 xx 1_000_000 appears to be about 50 times faster
lizmat still same problems, but seem dependent on TimToady's patches
lizmat so bumping anyway 08:45
fitness, back in ~ 2 hours& 08:46
TimToady and on 10_000_000 at least 100 times faster
will run another fulll spectest 08:47
brrt what is the LOLLY problem?
TimToady doesn't do nqp::getenvhash right when there's no entry 08:49
TimToady reproduced test failures here, investigating 08:49
dalek kudo/nom: c516d5e | TimToady++ | src/core/List.pm:
xx * can also be called with :thunked
08:57
TimToady looks much cleaner so far up through S17 08:58
TimToady sorry, for some reason I thought that repeat.t was enough testing for xx :) 08:59
TimToady now just fails the usual two suspects, IO-Socket-Async and uniq 09:01
TimToady once this recompiles, you should be able to just about do 'say (42 xx 10_000_00).elems' before camelia times out; takes 2 seconds on my slower machine 09:03
m: say (42 xx 10_000_00).elems 09:04
camelia rakudo-moar f1a7c6: OUTPUT«1000000␤»
TimToady oh, that's missing a 0 09:04
m: say (42 xx 10_000_000).elems
nwc10 oh, much spectest fail :-(
camelia rakudo-moar f1a7c6: OUTPUT«10000000␤»
TimToady fetch again
if you're failing array and set 09:05
nwc10 Unexpected named parameter 'thunked' passed
TimToady that was what I just fixed
nwc10 ah righto
TimToady repeat.t doesn't test anything like rand xx * 09:06
TimToady m: say (rand xx *)[10] 09:08
camelia rakudo-moar f1a7c6: OUTPUT«0.900392391008587␤»
masak good antenoon, #perl6
TimToady very ante here in California
masak TimToady: yes, what are you doing up at this unblogly hour? 09:10
TimToady speeding up gather and xx 09:11
masak \o/
xxcellent. 09:12
jnthn morning o/ 09:13
TimToady m: say (42 xx 20_000_000).elems
camelia rakudo-moar f1a7c6: OUTPUT«(timeout)»
TimToady m: say (42 xx 10_000_000).elems
camelia rakudo-moar f1a7c6: OUTPUT«(timeout)» 09:14
TimToady guess I got lucky before
m: say (42 xx 1_000_000).elems
camelia rakudo-moar f1a7c6: OUTPUT«1000000␤»
jnthn TimToady++ # lots of GatherIter patches
TimToady well, only one really 09:14
plus removing an unneeded .eager 09:15
jnthn Yes, I was wondering about that...and whether it's really unneeded
TimToady and it should be a sink() if it were needed :) 09:16
jnthn hm, good point 09:18
nwc10 TimToady: yes, pass 09:19
jnthn is spectesting here also
TimToady mostly I've been trying to get xx faster, and scale well to large values of N
nwc10 t/spec/S32-list/uniq.t failed spectest, but seems to be OK when re-run
TimToady it seems to flap a bit 09:20
jnthn Yeah, I've see that too.
TimToady random coredumps
nwc10 t/spec/S02-types/multi_dimensional_array.rakudo.moar passes when I set LOLLY
TimToady that's also expected
nwc10 t/spec/S32-io/IO-Socket-Async.rakudo.moar is our usual flappy friend
everything else decided to pass
TimToady about what I got here too
jnthn
.oO( Flappy Test, the hit successor to Flappy Bird... )
09:21
TimToady and that 5-times gather/take speedup was merely paying attention to eager context with the mechanism already there 09:23
didn't get rid of coro calls, but now call a bunch of them at once, so cache probably stays hotter
jnthn will do a perl6-bench run in a bit and see if there's a nice difference on the xx benchmark :) 09:28
TimToady should go to bed before raising the ante on noon much more 09:33
zzz &
timotimo o/ 09:47
yoleaux 01:21Z <japhb> timotimo: If you are still tracking LHF requests, I'm looking for someone to implement PIO.isatty on all backends, so I can rely on the .t (is a TTY) file test.
timotimo oh 09:50
do we also have/get isatty for our standard input/output?
sergot what is 'LHF requests'? 09:56
Ven looking for help?
donaldh low hanging fruit 09:57
Ven oh
jnthn As in, a task that's relatively easy to pick off 09:58
masak spectest run: gist.github.com/masak/e3702f7029125394e50c 10:00
sergot where is the list? 10:01
lizmat masak: the first one needs LOLLY=1 10:13
the other ones are flappers as far as I can see
(as in, they're ok now, seen them randomly, depending on load, fail in the past) 10:14
masak I was not aware of LOLLY=1 10:15
masak but it does indeed work when that env var is set. 10:15
any reason I wouldn't want to set it permanently?
jnthn TimToady: array_set_xx was 350x slower than Perl 5, now only 21 times slower 10:18
Marginal improvement on rc-forest-fire 10:19
sergot jnthn: could you tell me where is the LHF requests list? 10:22
is it just on rt?
in
masak is positively surprised by t/spec/S02-types/multi_dimensional_array.t 10:24
I didn't know we had that much of multidim in place.
means I'll start using it in code, I guess. 10:25
jnthn sergot: Dunno how many things are now, but in RT we've sometimes tagged things [LHF] 10:26
In the title
masak: Yes, I need to catch up on what's been happening there too :)
sergot jnthn++ thanks :) 10:27
nwc10 would it be better to make a LHF queue, and move stuff there? 10:29
something that makes it easy to have a URL which lists LHF
sergot +1 10:31
Ven masak: migrating code, I guess? 10:37
masak not sure I understand the question. 10:46
moritz nwc10: I'm against a LHF queue; I don't know how to view tickets from multiple queues in RT 11:58
colomon JSON::Jansson isn't in the ecosystem yet? 12:56
lizmat m: class A {}; INIT say "starting"; say A::B # is there a reason this is a runtime error, not a compile time error ? 13:05
camelia rakudo-moar c516d5: OUTPUT«starting␤Could not find symbol '&B'␤ in method <anon> at src/gen/m-CORE.setting:13076␤ in any find_method_fallback at src/gen/m-Metamodel.nqp:2625␤ in any find_method at src/gen/m-Metamodel.nqp:944␤ in block at /tmp/TTfklu9aHM:1␤␤»
dalek kudo-star-daily: 4033bf4 | coke++ | log/ (14 files):
today (automated commit)
13:23
[Coke] nwc10: I think there's already a URL for that. one sec. 13:24
[Coke] rakudo.org/tickets/ //Tickets marked "easy" 13:24
rakudo.org/rt/easy 13:25
though it could use some xss loving.
awwaiid Happy _why Day! 13:26
[Coke] ... it's pretty broken actually. there's some LHF, fix that url. :)
786 new/open tickets in RT. 13:31
masak I think we were near 800 when the RT queue was at its worst somewhere around 2009-2010. 13:32
but it doesn't feel nearly as bad these days :)
[Coke] 685 rakudo fudges in roast that don't say "NYI, RT#, unspecced"
masak: ^^ that's why. :P
we're hiding almost as many tickets in the test suite, unopened.
masak *nod* 13:33
FROGGS I'd like to do a bugfixathon again soonish... though, would be nice to not do that alone... 13:33
lizmat t/spec/S02-types/range.t tests for Range:D:.push and friends
the comments indicate that it should fail because of the immutablility of Ranges 13:34
however, it fails for quite different reasons:
m: my $r = 1..5; $r.shift
camelia rakudo-moar c516d5: OUTPUT«No such method 'shift' for invocant of type 'Range'␤ in block at /tmp/36kaOlOCRx:1␤␤»
moritz well, it doesn't have that method because it's immutable 13:35
so that's kinda OK, IMHO
lizmat m: my $r = 1..5; $r.unshift(6)
camelia rakudo-moar c516d5: OUTPUT«Cannot call 'unshift'; none of these signatures match:␤:(Any:U \SELF: *@values, *%_)␤ in block at /tmp/IEJq8R6krq:1␤␤»
lizmat ranges are interpreted by many people to be listy things 13:36
masak relevant: arstechnica.com/information-technol...its-flaws/
lizmat I would think a better error message would be helpful in that respect
by I guess I am wrong in that respect 13:37
masak the consensus of those answers seems to be "don't upgrade existing code".
lizmat which is *exactly* what Perl 6 will allow you to do, component wise, once S11 and S22 are fully operational 13:38
moritz lizmat: I'm not against better error messages, I just wanted to point out that the tests aren't wrong
PerlJam +1 for better error messages
lizmat I would argue that in this case the test is incomplete, because it does not test *why* t failed 13:39
which is why I'm going through the test-suite
nwc10 why is that article dated 2014/08/16 but the stack exchange question that it "summarises" is from 1 year aho?
[Coke] is this the move from dies_ok to throws_like? +1 from me. (and anywhere where the type is adhoc, that's a place to think about improving our exception types) 13:40
moritz well, if the tests become more specific, the specs should reflect that 13:40
[Coke] TimToady: some bugs in RT about uniname(), btw.
the specs don't really list what exceptions can be thrown when, do they? 13:41
(they probably should)
[Coke] S02-lexical-conventions/comments.rakudo.jvm........ still hanging on jvm. 13:41
[6~[6~[6~
moritz [Coke]: not yet
[Coke] parrot is building again: should we keep rt.perl.org/Ticket/Display.html?id=122436 open? 13:42
lizmat S03:3412 states that Ranges are immutable 13:43
synopsebot Link: perlcabal.org/syn/S03.html#line_3412
gtodd1 [Coke]: yay!!
gtodd parrot was just resting ;-) 13:44
dalek ecs: 775d078 | (Elizabeth Mattijsen)++ | S03-operators.pod:
Remove Range :by fossil
13:45
gtodd nwc10: the article also says python3 has been "available for 4 years"
or one of the comments
but "Python 3.0 final was released on December 3rd, 2008."
[Coke] rakudo: Foo::bar(); module Foo { our $x = 42; our sub bar() { $x.say } } 13:47
camelia rakudo-jvm c516d5: OUTPUT«(timeout)»
..rakudo-{parrot,moar} c516d5: OUTPUT«(Any)␤»
nwc10 gtodd: that's what caused me to go digging
[Coke] ^^ rt.perl.org/Ticket/Display.html?id=79464 just needs a test and is closable. 13:48
[Coke] r: say NaN===NaN 13:50
camelia rakudo-{parrot,jvm,moar} c516d5: OUTPUT«False␤»
gtodd nwc10: if you include the time testing and planning new features etc python 3 is a lot closer in age to perl6 than the interweb thinks it is :-) 13:52
[Coke] m: multi infix:<===>(NaN \a, NaN \b) { True }; say NaN===NaN 13:53
camelia rakudo-moar c516d5: OUTPUT«True␤»
dalek ast: 8120b6b | (Elizabeth Mattijsen)++ | S02- (10 files):
Last batch of dies_ok -> throws_like cleanup
[Coke] ^^ is that an ok way to handle that? preferable to putting in logic in the Num variant, aye?
lizmat it just wears me out too much
afk for a bit&
[Coke] hugme: hug lizmat 13:54
hugme hugs lizmat
gtodd lizmat: don't wear out!
masak hugs lizmat 13:56
gtodd are: multi infix:<===>(NaN \a, NaN \b) { True }; say NaN===NaN 13:57
oops
msg camelia
[Coke] is spectesting a run with that change.
masak m: multi infix:<===>(NaN, NaN) { True }; say NaN === NaN 13:58
camelia rakudo-moar c516d5: OUTPUT«True␤»
masak [Coke]: simpler.
Ulti neat Cris Fields is pushing to the BioPerl6 repo again >:3 13:59
*Chris
gtodd I like staring at it ... multi infix:<===>(NaN \a, NaN \b) { True }; say NaN===NaN ...
moritz didn't know you could use NaN in a type position 14:00
gtodd is this still accurate: rosettacode.org/wiki/List_comprehensions#Perl6 14:02
masak molaf: you can use any value in type position. 14:03
er, moritz*
m: multi infix:<+>(2, 2) { 5 }; say 2 + 2
camelia rakudo-moar c516d5: OUTPUT«5␤»
moritz m: multi infix:<+>(2 $a, 2 $b) { 5}; say 2 + 2
camelia rakudo-moar c516d5: OUTPUT«5␤»
moritz such wow. 14:04
masak I argued for that change. it made fibonacci much nicer to write :)
you go `multi fib(0)` instead of `multi fib($ where { $_ === 0 })`
masak or, hm, I don't know if it's === semantics there. 14:05
moritz ~~ iirc
masak ah, yes.
moritz well, we've had that feature for a while, but I didn't know it allowed a variable after the expression
TTIAR and all that
masak m: multi infix:<+>(/foo/ $l, /bar/ $r) { $l ~ $r }; say "the foo says: " + "OH bar HAI!" 14:06
camelia rakudo-moar c516d5: OUTPUT«===SORRY!=== Error while compiling /tmp/E8Lhjkgcsv␤Cannot use a value type constraints whose value is unknown at compile time␤at /tmp/E8Lhjkgcsv:1␤------> multi infix:<+>(/foo/ ⏏$l, /bar/ $r) { $l ~ $r }; say "the f…»
masak apparently there are limits.
"whose value is unknown at compile time"?
how is that? I thought a regex was a fairly known thing.
m: multi infix:<+>($l where /foo/, $r where /bar/) { $l ~ $r }; say "the foo says: " + "OH bar HAI!" 14:07
camelia rakudo-moar c516d5: OUTPUT«the foo says: OH bar HAI!␤»
masak :)
m: multi infix:<+>($l where /foo/, $r where /bar/) { $l ~ $r }; say 2 + 2 14:08
camelia rakudo-moar c516d5: OUTPUT«4␤»
masak ♥ Perl 6
moritz remembers a time using your own multi with a setting-defined multi wouldn't work reliable 14:09
masak aye. 14:10
not so long ago.
(whoever fixed that)++
moritz jnthn++ # seems like a good candidate 14:11
FROGGS[mobile] there was also the problem where you got a conflict when trying to import another candidate from a module
moritz or the same candidate one through a module, once directly 14:12
FROGGS[mobile] yeah
(that was the first issue I ran into) 14:13
and it took only about two months to fix it
dalek kudo/nom: a82c407 | coke++ | src/core/Num.pm:
NaN === NaN (RT #83622)

  masak++ for a simplification
14:14
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=83622
dalek ast: a5a1fcf | coke++ | S02-types/nan.t:
Fixed in rakudo
14:15
grondilu today I tried again to write a parallel version of mandelbrot. Failed again: gist.github.com/grondilu/9990847
colomon grondilu: failed in what sense? 14:16
grondilu it appear to fail non-determinastically and when it fails it's with the can not write read-only variable
colomon under moar?
grondilu yes
colomon may well be a moar bug 14:17
colomon at least, last time I tried parallel mandelbrot, it worked great under JVM and was glitchy under Moar 14:17
grondilu exat error is:
===SORRY!===
Cannot assign to a readonly variable or a value
colomon: which did you use? 14:18
colomon which what did I use?
grondilu « last time I tried parallel mandelbrot »
colomon is building jvm
make: *** No rule to make target `j-clean', needed by `clean'. Stop.
Failed running make realclean at /Users/colomon/.rakudobrew/bin/rakudobrew line 23.
I tried jvm and moar.
tadzik grr 14:19
I think I'm going to put git clean in there
hoelzro ahoy #perl6 14:24
colomon hopes tadzik++ is fixing rakudobrew right now... 14:28
tadzik nah, I'm at work
moritz m: say NaN === NaN, NaN == NaN 14:29
camelia rakudo-moar c516d5: OUTPUT«FalseFalse␤»
moritz nonononono 14:30
after a82c4076057fb543ec5bd56b06be1ffd67796f26, NaN === NaN will say True and NaN == NaN will say False
that's just SO WRONG
how can two things be identical, but not equal?
gtodd m: my @y; my @x <== 1..5; @x ==> @y ==> { .print }
camelia rakudo-moar c516d5: OUTPUT«===SORRY!=== Error while compiling /tmp/l52Lg0vVjz␤Sorry, do not know how to handle this case of a feed operator yet.␤at /tmp/l52Lg0vVjz:1␤------> my @x <== 1..5; @x ==> @y ==> { .print }⏏<EOL>␤ expecting a…»
colomon moritz: that's the magic of NaN
colomon it's not equal to itself 14:31
gtodd oh wait ... "expecting a…" is "expecting any of:" heheh 14:32
PerlJam m: say NaN === NaN, NaN eq NaN;
camelia rakudo-moar c516d5: OUTPUT«FalseTrue␤»
PerlJam moritz: will that be better for you? :)
colomon "A comparison with a NaN always returns an unordered result even when comparing with itself."
en.wikipedia.org/wiki/NaN 14:33
gtodd an easy way to segfault the perl6-m repl is to copy a line from IRC starting with "r:" :-) ... perl6-j gives java.lang.NullPointerException .... 14:34
PerlJam weird. 14:35
I would have thought it would just be taken as a target for goto 14:36
gtodd I think that given the popularity of evalbots the repl should handle r: m: j: in some nice way :-) e.g. "I'm stripping the 'r:' from the start of your line of code ... you shouldn't cut and paste things from IRC bad user" 14:37
masak moritz: if you permit, I don't see anything weird in the way NaN behaves now. 14:39
moritz: IEEE 754 requires that NaN not be numerically equal to *anything*, not even itself.
PerlJam gtodd: treating it as a label would be a nice way to handle it, and that's what should happen IMHO
masak moritz: which makes sense, because two NaNs that you got through different computations will, in general, be different.
moritz: but === ignores numerical semantics, and asks "is this *the same thing*?". yes it is. it's NaN, twice. 14:40
moritz: meaning, for example, that `$num === NaN` will tell you the truth. 14:41
[Coke] S29-os/system.rakudo.jvm...........................00-parrot 01-sanity 02-rakudo fudgeandrun harness spec spectest.data 14:43
dir: cannot access t: No such file or directory
moritz masak: I guess my error is to assume that $a != $b always implies $a !=== $b
if they aren't equal, how can they be identical?
masak moritz: no, I think that's an excellent intuition.
moritz: it's just that == for NaN is a special case.
PerlJam moritz: but, I've already shown that they are "equal" :) 14:44
masak moritz: for the sake of mathematical sanity, it will "lie" to you.
moritz: because those two NaN's *are* identical, of course. they're just not equal, because IEEE 754.
moritz (depends on the NaNs, of course...)
masak well, can you create two different NaNs in Perl 6?
I hadn't thought about that. 14:45
if you can, then they maybe shouldn't be === equal :)
also, in that case, which NaN is NaN? so to speak.
huf you need a does-she-make-cookies() function to tell them apart
masak huf: necessary, but not sufficient.
masak makes cookies, yet is not a nan 14:46
gtodd PerlJam: ++ yes , I should have thought of that ... and that would not be special casing things 14:48
huf masak: yes, but you're == to yourself
or...?
masak huf: yes, of course. all non-NaN values are.
gtodd PerlJam: I am now thinking of it as a label .... of course the core dump still occurs so :-D 14:49
masak huf: well -- I'm assuming we're only talking about my numification, nothing else.
huf there you are then, if it's not == to itself, you check with does-she-make-cookies() and you know which NaN you have :)
masak all NaNs make cookies.
huf whoa. TIL.
masak not many people get that far into IEEE 754. 14:50
[Coke] m: say +NaN 14:51
camelia rakudo-moar c516d5: OUTPUT«NaN␤»
masak m: say Inf/Inf
camelia rakudo-moar c516d5: OUTPUT«NaN␤»
masak m: say Inf/-Inf
camelia rakudo-moar c516d5: OUTPUT«NaN␤»
moritz there are signalling and quiet NaNs
[Coke] m: say +Inf # there are some tickets about this.
camelia rakudo-moar c516d5: OUTPUT«Inf␤»
[Coke] m: say Inf.Int # there are some tickets about this, I mean. 14:52
camelia rakudo-moar c516d5: OUTPUT«Cannot coerce Inf or NaN to an Int␤ in method gist at src/gen/m-CORE.setting:13072␤ in sub say at src/gen/m-CORE.setting:14010␤ in block at /tmp/R8FE3h5u3q:1␤␤»
masak wow, the error message doesn't know what it failed to convert.
moritz also, NaNs have some more bits left that could be any value
[Coke] that looks reasonable to me.
masak [Coke]: it does, but then you find out the spec isn't reasonable.
[Coke] (that it errored, not the specifics of the text of the error)
masak [Coke]: in the spec, Inf is a Num, an Int, and a Str. 14:53
[Coke] the spec is an ass.
masak [Coke]: or at least enough like one to act as the rhs of a range.
masak .oO( enough of the donkey business, spec! ) 14:54
gtodd hmm using Perl6::Feeds I experimented with feeds ... but now, using perl6, not all the syntax from en.wikibooks.org/wiki/Perl_6_Progra...eeds#Feeds works as well as in perl5... 8-) ... 15:04
for the missing bits the the error messages say perl6 can't handle that kind of feed "yet" 15:06
OTOH maybe the syntax has changed ... @x ==> @y ==> { .print } doesn't work but @x ==> @y ==> print does .... 15:08
TimToady feeds are "experimental" :) 15:09
gtodd oh
well they are nice :-)
feeds ++
++ ==> feeds 15:10
carlin
.oO( experimental... use feature 'feeds'; )
15:11
PerlJam I didn't think feeds did auto-map.
gtodd for 5.22!!
oops this is the perl6 channel
;)
PerlJam (at least that's what @foo ==> { .print } looks like to me.
)
masak at some point, I want to give a talk exclusively about interesting corner cases found in RT tickets. :)
TimToady the only thing that changed recently was lollipop syntax
masak .oO( Alan Perlis, is that you? ) 15:12
TimToady @foo ==> map { .print } should work fine 15:17
masak m: my @foo = <a b c>; @foo ==> map { .print } 15:18
camelia rakudo-moar c516d5: OUTPUT«abc»
masak yep.
ingy1 seen jnthn
masak ingy: I last saw jnthn last night. 15:19
ingy: (there were beers)
ingy masak: do you know a lot about p6 parsing? 15:19
masak I've lost touch with the NQP internals about two parser overhauls ago. 15:20
but I write a lot of grammars, if that's what you mean.
ingy yeah, I'm kinda stuck on a lex vs parse thing, and pinged jnthn about it last night 15:21
ingy it doesn't involve p6 but I think a p6 mindset is needed 15:22
masak ooh, sounds interesting.
ingy I wrote it up (tired) here: gist.github.com/anonymous/31b2017c97abee2c5af0 15:22
jnthn Ah, I glanced that this morning, then got sucked into writing my YAPC::EU talks... :)
ingy when I woke up (just now) I had a fuzzy conclusion
PerlJam just read "it doesn't involve perl 6, but perl6 people are really smart, so ... " ;) 15:23
ingy that it is ok to pre lex up to the end of a statement
ie the lexing rules won't change mid-statement 15:24
ingy ah yes, YAPC::EU 15:24
and I remember jnthn (or maybe TimToady) saying that p6 rules provides a lexer for you, and I never really got what that meant 15:26
and maybe I'm running into that need here
masak ingy: I read the gist. indeed interesting. 15:27
ingy: my first thought is: I have no idea.
:P
ingy cool :)
TimToady now knows what TimToady's answer would be that ingy is scared of :) 15:27
masak ingy: I believe it's TimToady who said that a p6 grammar induces a lexer.
ingy masak: but you weren't in that room in tokyo 15:28
masak nope. I wasn't.
whatever room that was.
ingy but maybe you are psychic
masak or maybe things are said multiple times in different places.
ingy :D
PerlJam masak: quick! What are the winning lottery numbers?!?
masak ingy: maybe a first approximation to what that means is that leaf nodes of the parse tend to be found in `token` declarations. 15:29
TimToady no, I never repeat myself
masak PerlJam: all I'm getting is negative numbers.
PerlJam it's a sign!
masak PerlJam: oops, there's an imaginary one.
I think that means we're perpendicular to the actual lottery.
TimToady i agree 15:30
PerlJam we just need to choose a different basis function
masak PerlJam: sure, as long as you remember to transpose *all* the free variables accordingly.
TimToady what e said
ingy some of that problem space also applies to parsing YAML, which I've been working on with some success 15:31
masak ingy: what if you turned your problem into one that parses line by line? would something fall out of that?
ingy: I mean, obviously some lines would need to return "carry flag" information.
ingy: like "yes, this line parses, but need to parse the next one in this mode" 15:32
ingy ie YAML also has mixable indent and {} scoping
masak: well {} has no real line need/concept
masak troo.
ingy so that's a bit oh the wrench 15:33
*of
masak ingy: could you somehow turn the indent into meaningful tokens?
ingy: and then parse on those?
PerlJam ingy: your problem strikes me as a form of mini-slang. I dunno if that helps
ingy masak: you are onto something there
masak ingy: tokens like <same-indent> <more-indent> <outdent 1>
ingy: maybe think of it as a preprocessing step, even if it isn't. 15:34
rurban parrot-6.7.0 released
ingy indent/ondent/undent I call them
masak ingy: a preprocessing step that converts the problem into a trivial one :)
ingy and andent is a continuation dent
masak rurban++ # parrot-6.7.0
TimToady endent feels left out
ingy masak: now you are getting to the cruxt
TimToady the crunchy bits!
ingy preprocessing is desired and yet undesired 15:35
rurban parrot: this time only marginal perf improvements, but added some more missing UNICODE name aliases
ingy TimToady: I'm reserving endent
thought of errdent
TimToady endent should mean $ :)
ingy :) 15:36
masak ingy: if you're lucky, the preprocessing doesn't actually need to happen. that is, you can hide it behind rules. 15:37
timotimo eeeh, so much backlog :\
ingy masak: yes
TimToady timotimo: don't go away for so long next time, silly!
masak cf accessors, where you don't know if an accessor is something computed, or an attribute slot.
timotimo TimToady: that sounds like quite the compliment :) 15:38
ingy another option is to redefine tokeninzinf ws inside a indent or {} statement context
timotimo ingy: are you going to look some more into making TestML and YAML work again? 15:39
ingy masak: if I'm *really* lucky, jnthn will do this as an example in p6rules
timotimo: certainly
timotimo sounds good :)
ingy my p6 breakout is just around the corner 15:40
always
TimToady well, that's better than always 20 years away, like fusion
ingy actually if I can get past this problem, I am getting very close to p6 action 15:41
nwc10 how is energy independence?
IPv6, and a few other things...
ingy hungry time. bbl
timotimo .o( or General AI )
nwc10 yes, good point. AI
PerlJam I thought masak was the psychic one?
nwc10 and still no flying cars
masak I... outsource. 15:42
japhb nwc10: IPv6 is here. It's just unevenly distributed 15:49
japhb (So are flying cars, actually, but considerably more so). 15:50
masak it's kind of interesting to read steve-yegge.blogspot.se/2007/02/nex...guage.html 7.5 years later. 15:53
timotimo did he ever say what that language was actually supposed to be? 15:56
masak don't think so.
I'm not sure he has/had a particular language in mind.
there's a lot of speculation in the comments.
everything from JavaScript to Perl 6.
timotimo i wondered about that also
[Coke] how's that corporate sponsorship thing working out for us? 15:57
timotimo js is certainly big
masak js has already won.
it's not big, it's won.
timotimo I did not receive my ship in the mail yet 15:58
masak all the rest of us can do at this point is to compile to JavaScript.
(pmurias++)
timotimo it is the assembly of the web, after all
masak right. or the OS, or the VM. 15:59
huf emphasis on the "ass"
but i suppose it was the hero the web needed :)
masak it doesn't matter exactly what of the web it is. it's the substrate to which we target our compilers so that our code runs on everyone's browser.
wise people treat it as a compiled-to language sooner rather than later, and choose a suitable author language. 16:00
huf yeah. soon we'll forget our grievances, just like the industry eventually accepted PC hardware :)
masak right! JavaScript is the x86 of languages!
huf :D
what a great sales pitch
masak worse is better! it better be!
huf otherwise where's my lisp machine 16:01
masak hands huf a lisp machine VM written in JavaScript
huf :)
running on the browser, yeah
dalek p: 53583b8 | coke++ | tools/build/PARROT_REVISION:
require parrot 6.7.0
16:02
[Coke] man, cloning parrot is slow. 16:04
masak [Coke]: remember that if you already have a local repo, you can clone locally. don't know if it applies in your case, but just in case. 16:05
masak I know many people who don't know that they can clone locally, and waste a lot of time re-fetching history from ze Net. 16:05
gtodd how does one do a full rakudo build and grab the latest parrot? perl Configure.pl --backends=moar,parrot,jvm --gen-nqp --gen-parrot --gen-moar --prefix=/home/devbuilder/perl6 ....seems to not grab a new parrot 16:09
[Coke] masak: then I have to remember to update my local master.
gtodd: your parrot is new enough, then. 16:10
gtodd oh
[Coke] if you want to force it, you can do --gen-parrot=master
but unless you're testing/fixing something parrot releated, prolly not worth it.
gtodd it uses 6.6.0 and breaks somewhere :-)
masak [Coke]: yes. it'd be local clone + pull. but it'd likely be a lot faster.
gtodd so I thought I'd try the newer one
thanks
hmm might not really be a parrot thing ... more likely my toolchain ... starting a new build will paste error when it breaks 16:12
moritz for latest parrot, --gen-parrot=master 16:13
[Coke] you then have to pre-checkout the repo whenever you want it. too many moving parts for day to day dev. (I automated it for the daily runs so I get the benefit there, anyway) 16:18
gtodd ok same old error I've had for a while paste.scsys.co.uk/416737?tx=on&...rmat+it%21 16:20
gtodd not really a parrot thing 16:21
dalek p-js: 03e4199 | (Pawel Murias)++ | src/vm/js/QAST/Compiler.nqp:
Implement nqp::pow_n.
16:22
gtodd I redid the build with --gen-parrot=RELEASE_6_7_0 and it seems to have worked :) 16:24
[Coke] the next rakudo release will require that version, so good it fixes something. 16:31
gtodd parrot built not sure if perl6-p is going to go but ... one step at a time :) 16:31
dalek rl6-roast-data: 9b8cb15 | coke++ | / (6 files):
today (automated commit)
[Coke] rakudo.parrot failing 71 tests. jvm, 186. moar, 66-67 16:32
*sadface*
gtodd oops same error here on perl6-p
/usr/bin/ld: ../../../../3rdparty/dyncall/dyncall/libdyncall_s.a(dyncall_api.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
[Coke] S02-types/multi_dimensional_array.t is aborting 58 tests on all platforms. 16:33
TimToady presumably because you haven't set LOLLY=1 16:36
masak what's the big idea with LOLLY=1 ? 16:37
TimToady it's a one-release envvar
masak doesn't everyone want a little lolly in their life?
TimToady it's a temporary 'use future'
masak I mean, why is it opt-in?
is it dangerous?
TimToady to force star to fix all the lollipops
as soon as the modules and the dark6pan fix all the lolligags, they're ready for the new semantics 16:38
[Coke] I shouldn't have to set LOLLY to run the spectests. 16:39
TimToady if they want to play with the new semantics, they have to set LOLLY in this release, otherwise they can forget it
masak I agree with [Coke].
TimToady the spectests are playing with the new semantics already
masak it's wrong that we have spectests failing by default.
[Coke] I'm fudging that test file so it works with an out of the box rakudo.
TimToady so don't include that spectest yet
nwc10 so could the Rakudo makefile set LOLLY to run the spectests?
[Coke] if someone wants to refudge them so they skip the tests only if lolly isn't set, that's fine. 16:40
masak TimToady: what does "fix all the lolligags" mean?
TimToady: what needs to be fixed before this opt-in feature can be the default?
[Coke] I'm fine with removing that test file from the default spectest run.
TimToady (foo;bar) that are intended to mean SEQ(foo;bar), not LoL
masak feels like he fell asleep and woke up in a different Perl 6 16:41
TimToady which the compiler gags on if you don't have LOLLY set
masak who writes (foo;bar) ? not me.
TimToady masak: don't go away for so long next time, silly!
masak I'll... try.
maybe I should backlog harder. 16:42
TimToady apparently a number of test writers do that
masak OK, let's start over.
TimToady trying to shoehorn statements into an argument
masak what does SEQ(foo;bar) mean?
is it spec'd?
TimToady yes
masak looks
[Coke] is there an RT for the SEQ stuff?
TimToady see S02:2462 16:43
synopsebot Link: perlcabal.org/syn/S02.html#line_2462
masak ok, it's from yesterday.
masak that makes me feel a little better. :) 16:43
[Coke] how does one set LOLLY? env? 16:44
masak I can live with being one day out of touch.
[Coke]: yes.
I'm happy we're spec'ing these lol things. that's been long in the coming. TimToady++ for that. 16:45
[Coke] r: say "HI" if not $*ENV{lolly}
camelia rakudo-jvm a82c40: OUTPUT«(timeout)»
..rakudo-{parrot,moar} a82c40: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Undeclared routine:␤ lolly used at line 1. Did you mean 'roll'?␤␤»
masak I'm skeptical about env-varing our way to happiness. but that may or may not be me not seeing the whole picture.
[Coke] rant: the jvm rakudo in eval is almost useless. :(
masak [Coke]: <LOLLY>
TimToady masak: it's very temporary
[Coke] r: say "HI" if not %*ENV<lolly>
camelia rakudo-{parrot,jvm,moar} a82c40: OUTPUT«HI␤»
[Coke] r: say "HI" if not %*ENV<LOLLY>
masak [Coke]: CAPS.
camelia rakudo-{parrot,jvm,moar} a82c40: OUTPUT«HI␤»
[Coke] masak: GETTING THERE
masak OK! 16:46
TimToady next release after this one, the lolligag check goes away, and lollipops get the new LoL meaning
masak (WHY ARE WE WHISPERING???)
[Coke] TimToady: have you added this to the changelog?
TimToady never touches the changelog
[Coke] and/or the release announcement?
ok. then please make sure the release manager knows about your plans, or he will be quite irate. 16:47
TimToady expects his mom to pick up after him
dalek ecs: e29e9a1 | masak++ | S02-bits.pod:
fix a wee typo
TimToady thinks release managers should backlog occasionally :)
and read the git log
masak TimToady: in theory, that's what the release guide advises. 16:48
TimToady: in practice, moritz++ does a lot of the heavy lifting. :/
TimToady thinks the git log is the real changelog :)
timotimo git the change you want to log in the world 16:49
dalek ast: 40bd158 | coke++ | S02-types/multi_dimensional_array.t:
Fudge test so it's runnable LOLLY +/-
16:51
TimToady SEQ() is not necessarily the final form of sequential syntax, so some bikeshedding on that is okay; just don't anyone suggest we adopt the C comma operator
[Coke] ^^ fixed it the right way.
TimToady how to ship two versions of the product simultaneously :) 16:52
s/how/how not/ if Bool.pick; 16:53
what I really wanted to avoid was declarations that live forever in the program, like "use future" 16:54
well, maybe 'use future' is a bad example of that
TimToady BASICPLUS2 had a permanent "extend" statement at the front, and that traumatized me 16:55
[Coke] I think you mean 'use feature' ! 16:56
TimToady er, I was just confusing perl with python 16:56
masak or maybe you meant `from __future__ import...` 16:57
timotimo from __future__ import braces 16:57
masak timotimo: SyntaxError: not a chance 16:57
TimToady cool, Cannot reference undeclared local '__lowered_lex_3063' 16:59
nqp has such lovely error messages 17:00
TimToady "That's wrong, here, have a flying butt unicorn." 17:01
timotimo at least you can almost immediately see that it's something to do with the optimizer
TimToady all I'm trying to do is wrap the gather block in another block that traps TAKE exceptions and batches them up before doing the real take 17:02
japhb camelia: r: my %h = a => "b > c > d"; say %h.perl; %h<a> .= split(/\s*">"\s*/); say %h.perl; 17:02
camelia japhb: rakudo-moar a82c40: OUTPUT«("a" => "b > c > d").hash␤("a" => ("b", "c", "d").list.item).hash␤»
..rakudo-{parrot,jvm} a82c40: OUTPUT«("a" => "b > c > d").hash␤("a" => ().list.item).hash␤»
japhb ^^ Note the different result for r-j
Current annoying bug of the day. :-) 17:03
japhb Well, I guess r-m is the only one that gets it right. I hadn't even tested r-p locally. Hmmmm. 17:04
pmichaud a proposed patch for nqp was just posted to the debian rakudo-devel list 17:12
lists.alioth.debian.org/pipermail/p...00432.html 17:13
itz I wonder if aveuserow/star parrot tests pass with the new version 17:14
I would guess probably not :) 17:15
itz s/ave/av/ 17:17
japhb r: my %h = a => "b > c > d"; say %h.perl; %h<a> = %h<a>.split(/\s*">"\s*/); say %h.perl; 17:19
camelia rakudo-{parrot,jvm,moar} a82c40: OUTPUT«("a" => "b > c > d").hash␤("a" => ("b", "c", "d").list.item).hash␤»
japhb ^^ For what it's worth, r-j and r-p are only wrong when doing .= split; desugaring seems to work around the bug. 17:20
timotimo tee hee. .list.item).hash
ingy masak: I have a strawman solution 17:45
I should write it up
masak :)
moritz likes strawberry better than strawmen 18:04
Ven wonders why ... 18:08
dalek o: 83674a0 | (Steve Mynott)++ | bin/ufo:
fix ufo to work with new compiled suffixes
18:10
o: 8e72aa3 | (Carl Mäsak)++ | bin/ufo:
Merge pull request #17 from stmuk/master

fix ufo to work with new compiled suffixes
Ven .o( Steve Wynot ) 18:14
itz if I had a pound/EU/$ for everytime I'd heard that.. ;) 18:15
or "lev2 18:18
^ "lev"
nwc10 Swiss Francs are prettier, and seem to be a better currency of last resort
Ven I'll give you an inductive profof. works?
proof. not profof.
nwc10: damn these Swiss with their old monies! 18:19
ingy masak, jnthn, TimToady: Here's my strawman: gist.github.com/anonymous/32ce4746...-swim-L101 18:20
It seems pretty elegant.
Huff and puff and blow it down!
PerlJam ingy: doesn't that grammar mean that continued expressions over several lines will gradually walk to the right? (andent says "more than current indentation") Or do the andents not count for indentation? 18:49
Ven remembers of if and implicit calls in coffee ...
PerlJam I guess only the latter thing makes sense. nevermind :) 18:51
carlin how can I catch SIGINFO or SIGUSR1? 19:39
flussence m: say &signal; say Signal.enums 19:42
camelia rakudo-moar a82c40: OUTPUT«sub signal (Signal $signal, *@signals, Any :scheduler($scheduler) = { ... }) { #`(Sub|67669632) ... }␤("SIGBREAK" => 2, "SIGHUP" => 3, "SIGINT" => 1, "SIGWINCH" => 4).hash␤»
flussence That enum type seems kinda short...
jnthn Sometimes leaving an LHF task for others works out. Sometimes, this happens. :) 19:43
flussence I haven't poked around in the rakudo source for a while, maybe I'll go take a look... 19:44
flussence okay, I know enough about signals to know I don't know enough to touch this :) 19:56
is there any special meaning to those enum numbers, or are they just sorted by "order people needed these in"? 19:58
TimToady Cast in Order of Appearance 19:59
flussence now that I think about it, the same probably applies to posix signal numbers... 20:02
gtodd flussence: Signal.enums is even shorter in perl6-j 20:07
carlin looks like the actual signal codes are defined in Moar 20:19
carlin so it would involve, adding more signal code to Moar. Adding more const::SIG_XXX to NQP, and mapping the SIGNAMES to the NQP constants in Rakudo 20:26
carlin gotta touch all the repos 20:26
where does Signal.^enum_value_list get defined?
jnthn carlin: That's just derived from the enum declaration. 20:26
carlin ah of course, I see 20:28
I should be able to take a stab at doing this tonight
jnthn Cool :)
++carlin
flussence I've got this so far, if it's any help: gist.github.com/flussence/7520b3a659e9cd95fec1 20:31
(seems like SIGRTMIN and SIGRTMAX are runtime-defined, fun)
carlin rakudo does qx/kill -l/.words to get the list 20:32
gtodd Signals.enum in perl6-j too! 20:33
carlin rakudo: say $*KERNEL.signals 20:35
camelia rakudo-moar a82c40: OUTPUT«(Any) SIGHUP SIGINT (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) (Any) SIGWINCH␤»
..rakudo-{parrot,jvm} a82c40: OUTPUT«No such method 'signals' for invocant of type 'Kernel'␤ in block at /tmp/tmpfile:1␤␤»
carlin rakudo: say Signal.enums
camelia rakudo-{parrot,jvm} a82c40: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Undeclared name:␤ Signal used at line 1␤␤»
..rakudo-moar a82c40: OUTPUT«("SIGBREAK" => 2, "SIGHUP" => 3, "SIGINT" => 1, "SIGWINCH" => 4).hash␤»
timotimo m: say nqp::bool_I(1234) 20:37
camelia rakudo-moar a82c40: OUTPUT«1␤»
timotimo m: say nqp::bool_I(Int)
camelia rakudo-moar a82c40: OUTPUT«(signal )»
masak read "SIGBREAK" as "SIGBEAR"
carlin SIGBEAR is what you send when you want your program to run faster 20:40
japhb m: say &signal # The stringification of the :$scheduler param seems rather verbose
camelia rakudo-moar a82c40: OUTPUT«sub signal (Signal $signal, *@signals, Any :scheduler($scheduler) = { ... }) { #`(Sub|73661584) ... }␤»
japhb Any should be assumed, and :scheduler($scheduler) should just be :$scheduler 20:41
masak carlin: the program doesn't have to run faster than the bear, only faster than you. :P
japhb timotimo: Another for your LHF list ^^
carlin I was going to say it would only make it run faster than the program next to it 20:45
japhb masak: I really like the idea of a SIGBEAR. Next time I write an adventure game, there will totally be a SIGBEAR at some point.
masak haha
maybe work a SIGHUG in there somewhere, too? 20:46
japhb That's what you get for saving the poor damsel/beleaguered knight/annoyed camel/take your pick 20:46
japhb is reminded of The Paper Bag Princess 20:50
en.wikipedia.org/wiki/The_Paper_Bag_Princess
masak .oO( THANK YOU MARIO! BUT OUR ANNOYED CAMEL IS IN ANOTHER CASTLE! ) 20:58
japhb Exactly. 21:02
japhb It occurs to me it might be nice to have a game where you choose what you're going to save at the beginning and it backfills clues and story interludes to match. A witness that got spit on by the camel, camel footprints turning left at the mysterious intersection, ... 21:04
ingy PerlJam: andents don't add to the indentation stack 21:06
they just match one indentation great than the current level
japhb "Today I plan to save a __(noun)__ from the horrible __(noun)__ in the __(adj)__ __(noun)__.
ingy so no cascade
PerlJam: there's an error in the grammar though. see if you can find it :) 21:08
bbl
pmurias masak: I have thought a bit about the JavaScript vs others as the author language, and I think that if Perl 6 is intended to be a sensible JavaScript replacement (as the author language) we will need to have some advantage that would justify introducing the layer of indirection 21:11
masak aye.
a nice Angular-like framework could be it, perhaps. 21:12
dalek kudo/nom: 1a7f85b | TimToady++ | src/core/List.pm:
don't try to make a batch of size 0
masak I wouldn't mind writing my application in Angular, except the JavaScript is Perl 6.
pmurias likes Angular too
pmurias would it be possible to create a significantly better Angular? 21:16
japhb Somehow it makes me considerably more interested in learning this particular JS product knowing that people from the Perl 6 world like it. Might not drive me insane, as many frameworks have .... 21:20
masak japhb: in brief: AngularJS lures you in with the shiny (data binding, expression language, dependency injection), and then as you settle into it turns out to have a surprisingly solid "Angular Way" discipline to it that makes writing straight-up JavaScript almost bearable again. 21:22
masak having said that, I'd rather be writing straight-up Perl 6, I think. 21:23
as to whether it would be possible to create a significantly better Angular, I have no idea. 21:24
japhb "straight-up" meaning no e.g. JQuery, or meaning not e.g. coffeescript?
masak the latter.
japhb Ah, OK.
masak re jQuery though, Angular recognizes how common it is to need it.
timotimo is the segfault in S32-list/uniq.t known?
masak so it supplies its own minimal variant, and if you end up loading the actual jQuery, it steps back and lets it take its place.
japhb I friend of mine used to say he wrote his web code "in jQuery" instead of in JavaScript, since really most of the time he was living in the sugar. 21:25
masak japhb: I see that a lot.
japhb: I teach a bunch of JavaScript. people know jQuery a lot better than they know the underlying language. 21:26
PerlJam resembles that remark when he has to write JS
japhb is not surprised by that
masak I tend to leverege it by showing how jQuery exploits a variety of quirks in JavaScript to do what it does. 21:26
TimToady t/spec/S02-lexical-conventions/comments.rakudo.jvm seems to be hanging these days
japhb I can, if forced, write raw DOM and events code. But my immediate reaction to being asked to do so is to pushd back hard. Because, ewww. 21:27
masak japhb: it's just not cost-effective most of the time. 21:28
japhb Very much agreed. 21:29
masak japhb: though it *is* getting less and less ridiculous as browsers build more stuff into the DOM layer.
japhb: there is a small but growing "Vanilla JS" movement brewing.
japhb Especially when the cost is some of my sanity points.
masak but the consensus is still that for "end users" (web authors), jQuery should very much be the go-to default. 21:29
for library writers, it depends. 21:30
pmurias masak: there is angularjs for dart
masak pmurias: also known as AngularDart, yes.
japhb Things must have gotten a whole hell of a lot better in the browsers since the last time I had to real vanilla JS.
masak pmurias: I don't care much for Dart, though I know some people do.
pmurias so what's your prefered JS replacement?
masak pmurias: I'm still shopping around. but I do like TypeScript for various reasons. 21:31
japhb: yes. yes, they have.
japhb: vanilla-js.com/ is tongue-in-cheek, but makes a worthwhile point. 21:32
pmurias masak: why do you dislike Dart?
dalek kudo/nom: 18429d5 | TimToady++ | src/core/List.pm:
just do a straight eager rpa write, 10% faster

No point in involving gather/take at all when we know this is eager. Could probably speed this up further if we had low-level memory copying of rpa pointer data, so we could batch the memory initialization.
Actually, this runs 10% faster on Moar, but a little slower on JVM than previous. We'll optimize for the better optimizer at this point, which is Moar's. Presumably the JVM's optimizer will catch up sooner or later.
TimToady t/spec/S02-lexical-conventions/comments.rakudo.jvm only hangs when run in harness; works find standalone, so probably evalserver is blocking 21:35
PerlJam wonders what "rpa" is since the only thing it expands to in my head is parrot-specific.
masak pmurias: I think Dart is not ambitious enough as a JavaScript replacement. ES6 feels about as ambitious, and more likely to gain marketshare.
TimToady well, there's a lot of code that still say 'rpa' to mean whatever the VM's lowlevel array typ eis
[Coke] why $rpa? callback to resizablepmcarray? 21:36
oh.
[Coke] catches up. "when is this?"
jnthn There's a lot of code living in the $past too... :)
TimToady nowadays it's a Resizable nqP Array
PerlJam How about we just call it RA and open up the space for sun-god puns? :) 21:37
japhb masak: chuckling at Vanilla JS referring to the various frameworks as "Vanilla JS Plugins"
masak pmurias: minor points: (a) void main()? really? (b) they had the chance to introduce static types, and they made them into hints? (c) what would possibly posses Apple or Microsoft or Mozilla to start supporting Google's JavaScript-killer language natively in their browser? 21:38
japhb: :)
TimToady Three cheers for the sun god! He sure is a fun god! Ra! Ra! Ra!
pmurias masak: re (c) - there is dart2js which seems to produce code without a performance penalty 21:39
without a signifcant performance penalty
masak pmurias: that's great. so Dart is another author language that compiles to JS. as such, it's not terribly impressive.
(IMHO) 21:40
pmurias masak: and I think Google could easily bully Mozilla to add Dart to firefox
masak guess we'll have to wait and see.
that *would* make it more interesting, though.
maybe the web would somehow be helped by having two native languages.
PerlJam doubts it 21:41
I mean ... we could have had *BASIC* as one of the web languages ;)
japhb PerlJam: That depends on whether the second one is good enough to trigger the first back into rapid innovation mode. Like V8 did for ... well, everyone else's JS implementation. 21:42
masak yeah.
though EcmaScript is definitely in rapid innovation mode now.
pmurias Dart seems a better Perl6 compilation target
masak pmurias: hm. hadn't considered that. 21:43
pmurias: if you finish a Dart backend before the JS one, I will officially be interested in Dart. :>
PerlJam heh
Ven masak: re "people know jQuery a lot better than they know the underlying language." <- you tell me :-). I often get downvoted on Stackoverflow because I say something in angular "works like in js" without re-explaining the whole js stuff 21:49
or we get people asking coffee questions "I create two instances, push to the first, it's also in the second's" well, if you set the property on the constructor's prototype .. 21:50
I'm kinda scared by Perl6, but I'd really rather avoid writing JS :-).
masak Ven: understanding the underlying data model of a language is invaluable. otherwise, one is likely to have to live with weird aliasing problems and roundabout hacky solutions. 21:52
Ven but I'm not sure if we can leverage Angular in p6(-js). Every other altJS that's not "just a bit prettier" (coffee, dart, ts, etc) have icky interfaces
because angular relies pretty heavily on JS being JS.
masak Ven: much of what I teach in the JavaScript courses is how JavaScript actually does things. people are generally very grateful -- no-one ever explained these things to them. all they had was StackOverflow and (shudder) w3schools. 21:53
Ven .o( yer a jquery w3fools, harry )
I actually most often that not don't include jQuery. But I have this big advantage: I don't care about older browsers. 21:54
masak Ven: yes, AngularJS makes a good case of "preserving" the JS part while enhancing it with structure. I don't think we can pull that off with Perl 6.
pmurias Ven: which Perl 6 features do you think I'll have a hard time implementing in rakudo-js? 21:55
Ven as for dart in browsers ... Not going to happen. Not even dart in chrome is going to happen :-). the chrome lead dev is very much against it
hoelzro pmurias: anything dealing with concurrency =/
Ven pmurias: everything nonbasic, actually.
hoelzro </2c>
masak so maybe the slogan "an AngularJS for Perl 6" is not so useful. but here's what I want: I want (a) the whipuptitude of AngularJS, but (b) writing Perl 6 application logic. then fill in the blanks. :)
Ven backlogged enough so that he read masak++'s answer online instead of in his irc client :-) 21:56
pmurias: dispatching is going to be painful and costful. capturing functions with correct `this` and such. corner-cases of destructuring arrays/hahes/instances, named args, ... 21:57
the flattening operator. multi-indices indexing. HyperWhatever, `;` and `;;`.
Ven containers are going to be insanely hard to optimize. I've got no clue about these - at all. Implementing an efficient `~~`. Simulating `my` (would need js' `let`.). Dynamic variables. lazy arrays. infinite arrays. And blah, blah, blah. 21:59
masak Ven: re js' `let` -- turns out ES3's `catch` blocks have block scope! and you can use them to emulate `let`. 22:00
crazy, I know.
Ven masak: that's true ... except in JScript :-).
masak: don't expect to teach the monkey how to make faces :p 22:01
masak what, IE's engine?
is that, like, IE below some given version, even?
Ven 'think so. And the old embedded JS stuff. and wsh
masak ok, then I don't care much at all. 22:02
Ven github.com/jashkenas/coffeescript/pull/1476
masak: also, github.com/jashkenas/coffeescript/issues/2422 .
so, yes, I know how es3's catch works, but it's a terrible idea to use that to emulate `let`. 22:04
I'd much rather do something SSAF-y (somewhat) where you generate new names for inner 6scopes. 22:05
masak Ven: interesting. 22:11
Ven: I only recently learned about the subtle interaction between let declarations and function hoisting. now there's a corner case I didn't see coming. 22:12
Ven well, I only learned recently that you can re-declare variables that appear in the arglist (`fn (foo) { var foo; }`) and keep the value! how terrible :-) 22:14
pmurias masak: emulating my with 'catch' blocks - that's a horrible idea as try/catch disables optimalisation in v8
Ven: re my I'm already doing that 22:16
ingy PerlJam: the fixed bug is here: gist.github.com/anonymous/5ab0fe69...-swim-L136
Ven yay ;-)
pmurias Ven: just by (function() {})() for introducing a perl6 block 22:17
masak pmurias: depends how much you value the semantics, I guess. Traceur does exactly that, for example. and there's been talk about optimizing exactly that case in v8, because people are starting to compile to it.
pmurias named arguments I emulate by passing a named arguments hash 22:18
dynamic variable I emulate by having a ctx argument containing the dynamic lexicals 22:19
jnthn pmurias: fwiw, NQP is really pretty good by now at optimizing away lexical scopes that aren't needed, and Rakudo will converge towards that with time, so compiling a QAST::Block into a function to get the lexical scope semantics will be a good choice. 22:20
Heck, NQP is good at optimizing away *lexicals*.
pmurias jnthn: good ;)
jnthn: it turn them into local which I compile into lexicals anyway ;) 22:21
Ven the this-passing will become costly in the long run, I believe.
jnthn pmurias: heh, yes :)
pmurias: Moar cares a bit more :) 22:22
pmurias generally emulating features requires either a performance penalty or good static analysis
jnthn bbi10 22:23
pmurias bbi10? 22:24
Ven be back in 10, I'd say
geekosaur be back in 10 (minutes)?
Ven welp.
pmurias the good thing about v8 is that it has a lot of performance we can sacrifice 22:25
japhb I had a FOAF who retrofitted a turbine engine to a normal car chassis. He drove around town with the turbine basically idling and brake pressure determining speed. You appear to be recommending the same, except s:g/turbine/V8/. 22:28
Ven pmurias: well, we're deep into SufficientlySmartCompiler's field :-)
Ven .o( I got 99 problems but nqp's SufficientlySmartCompilerCompilerGenerator ain't one ) 22:29
pmurias nqp currently isn't a very smart compiler
Ven that was mostly a reference to futamura's projections -- I guess I should've said "pypy" instead of nqp there. 22:30
masak japhb: that reminds me about a Darwin award Liz told a bunch of us about. 22:41
FROGGS masak: I remember too :o) 22:46
masak www.darwinawards.com/darwin/darwin1995-04.html
I'm not terribly shocked to learn this particular one wasn't true. 22:49
[Coke] pmurias: are you at a point where folks can help? 23:02
(with rakudo-js)
timotimo m: say "foo" xx -1
camelia rakudo-moar 18429d: OUTPUT«MVMArray: Can't resize to negative elements␤ in sub infix:<xx> at src/gen/m-CORE.setting:8720␤ in block at /tmp/UF1Xx0gOHy:1␤␤»
timotimo ^- that way a bunch of spectests explode 23:03
and i've been thinking i broke something %)
timotimo looks for a good fix
TimToady ah, probalbly my fault 23:07
timotimo yup :) 23:09
i've got you covered, though
there are some more failures, it seems. maybe i need to put a abort-if-negative into a different multi candidate, too 23:10
# at t/spec/S32-array/exists-adverb.t line 31 23:12
# got: (Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True).list.item
# expected: $(Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True, Bool::True)
i don't think this is my fault :)
dalek kudo/nom: 2204422 | (Timo Paulssen)++ | src/core/List.pm:
return an empty list for foobar xx -1
23:13
labster rn: say ".pl".succ 23:16
camelia rakudo-{parrot,jvm,moar} 18429d: OUTPUT«.pl␤»
..niecza v24-109-g48a8de3: OUTPUT«WTF␤»
labster niecza is the most suprising, but I was expecting ".pm"
TimToady see S03:426 23:20
synopsebot Link: perlcabal.org/syn/S03.html#line_426
labster Just noticed it myself TimToady.
I also noticed that .succ and .pred need to be documented in S32::Str, which I should probably do. 23:21
masak 'night, #perl6 23:22
labster 'night masak
timotimo oh hey labster :) 23:27
timotimo TimToady: can you look into the exists-adverb thing? 23:32
TimToady sure 23:33
timotimo looks kind of similar to something you'd be involved in, or mouq? maybe lizmat?
labster hi timotimo! 23:44
timotimo i think i haven't seen you in here for a long time
labster busy with $dayjob mostly. 23:45
YAPC::NA gave me enough time to unbust my P6 modules, but I've been knee deep in a pile of old Perl 5. 23:46