»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
TimToady p6: gist.github.com/2847343 00:00
p6eval pugs: OUTPUT«*** No such subroutine: "&temp"␤ at /tmp/5zc0Kon5ul line 5, column 9-25␤»
..rakudo b2068e: OUTPUT«[[], [], [2, 4]]␤[[2], [], [1, 4]]␤[[3, 4], [], [1, 2]]␤[[4], [], [1, 3]]␤»
..niecza v18-1-gc86e3f0: OUTPUT«[[1, 2], [], [3, 4]]␤[[1, 3], [], [2, 4]]␤[[1, 4], [], [2, 3]]␤[[2, 3], [], [1, 4]]␤[[2, 4], [], [1, 3]]␤[[3, 4], [], [1, 2]]␤»
TimToady rakudo doesn't seem to like --temp @mask[$k]
diakopter phenny ask moritz what if rn: or nr: invoked both rakudo and niecza 00:01
phenny ask sorear what if rn: or nr: invoked both rakudo and niecza
jnthn TimToady: It looks weird to my eyes :P 00:02
TimToady well, it doesn't like temp @mask[$k] -= 1 either
sorear diakopter: you need more colons
jnthn That surprises me a bit more.
diakopter phenny: ask moritz what if rn: or nr: invoked both rakudo and niecza
phenny diakopter: I'll pass that on when moritz is around.
jnthn What does "doesn't like" mean?
TimToady see output above 00:03
niecza produces the correct output
jnthn r: my $x = 2; { temp $x -= 1; say $x; }; say $x
p6eval rakudo b2068e: OUTPUT«1␤2␤»
sorear diakopter: I proposed r: n: syntax once. I think I got assent but noone could be bothered to actually do it, including me
jnthn r: my @x = 1,2,3; { temp @x[1] -= 1; say @x[1]; }; say @x[1] 00:04
p6eval rakudo b2068e: OUTPUT«1␤2␤»
TimToady jnthn: it might have more to do with the semantics of the @mask is copy parameter
sorear I keep wanting to read that as @masak 00:05
jnthn sorear: Same!
TimToady: Maybe
TimToady sorear: yer the one wrote @mask first!
jnthn TimToady: I'm too tired to golf it righ tnow...
sorear also, I am somewhat amused that the algorithm I came up with looks rather different from what everyone else is doing 00:06
jnthn -> sleep 00:08
00:09 lestrrat left, lestrrat joined 00:10 cognominal_ joined 00:13 cognominal left 00:21 skids left 00:26 cognominal joined 00:28 cognominal_ left 00:38 skids joined 00:46 aesundstrom joined 01:01 scott_ joined, scott_ is now known as Guest48656 01:05 vlixes joined, aesundstrom left, fgomez left 01:08 thou left 01:39 Guest65270 left 01:45 fgomez joined 01:46 tokuhiro_ joined 02:10 vlixes left 02:11 immortal joined, immortal left, immortal joined, erkan left 02:23 aesundstrom joined 02:24 fgomez left
diakopter tries to golf it 02:26
02:26 alvis joined
dalek p: 0631f83 | duff++ | src/PAST/NQP.pir:
Add nqp::stat
02:28
nqp: 0d86ce0 | duff++ | src/PAST/NQP.pir:
nqp: Add nqp::does
02:28 dalek left
diakopter poor dalek 02:29
02:29 dalek joined
dalek kudo/nom: 4aea135 | duff++ | src/ (2 files):
s/pir::stat\w+/nqp::stat/g
02:29
kudo/nom: f4357fd | duff++ | src/ (4 files):
Use nqp::does

Start on release announcement for June
02:29 dalek left
diakopter poor dalek 02:29
too triggery happ
er
trigger happy
02:29 dalek joined, ChanServ sets mode: +v dalek
diakopter dalek: wb 02:30
as I golf it, I'll just assume niecza's behavior is consistently correct, and as long as rakudo differs, I'm still golfing 02:31
02:31 fgomez joined 02:43 xinming left, xinming joined 03:00 tokuhiro_ left 03:04 broquaint joined 03:06 masonkramer left 03:12 cognominal left 03:22 aesundstrom left 03:25 lestrrat left 03:26 lestrrat joined
diakopter TimToady: I golfed it 03:28
rakudo's LEAVE blocks aren't called enough
erm, I take that back 03:31
still not sure
03:53 odoacre joined 03:55 am0c left
04:46 estebann joined
TimToady wishes again that there were a .take form of take 05:04
would make gist.github.com/2847343 a bit cleaner 05:06
PerlJam you do wield the power of the spec ;) 05:07
TimToady well, .take already occurs twice in the spec 05:08
diakopter TimToady:
r: gist.github.com/2848989
p6eval rakudo 696a71: OUTPUT«c is 3 at depth 3␤c is 3 at depth 2␤c is 3 at depth 1␤»
TimToady S02:4822 for instance
diakopter n: gist.github.com/2848989 05:09
p6eval niecza v18-1-gc86e3f0: OUTPUT«c is 3 at depth 3␤c is 2 at depth 2␤c is 1 at depth 1␤»
diakopter I golfed your golf
niecza is right here, I assume 05:10
TimToady yes
05:10 woosley left, woosley joined
diakopter took me two hours of golfing, I dare confess. 05:11
TimToady it's a good think you only dared to confess it, and didn't really confess it
diakopter while sipping a frappucino listening to tinny music 05:14
*frappuccino 05:15
05:15 slavik1 left
TimToady as long as you weren't listening to frappuccini 05:16
05:16 birdwindupbird joined, birdwind1pbird joined
diakopter phenny: ask jnthn I golfed yer thingamabob. compare r: with n: gist.github.com/2848989 05:18
phenny diakopter: I'll pass that on when jnthn is around.
05:18 fhelmberger joined
diakopter so you want .take to be a method on Mu? 05:22
or a special form like .WHICH
er
whatever that uppercase special form is
TimToady I don't see why it has to be that special
PerlJam is waiting on his compile with method take { take self } in Mu 05:23
TimToady Take me! Take me!
dalek kudo/qrpa: 6e7868e | pmichaud++ | / (2 files):
QRPA: Add init, destroy, mark, elements, unshift_pmc, and some native variants.
05:24
kudo/qrpa: c42e429 | pmichaud++ | / (2 files):
Add defined_*, exists_*, and unshift_* for native types.
kudo/qrpa: 07ced37 | pmichaud++ | / (2 files):
QRPA: Add clone, get_iter, splice.
kudo/qrpa: f57053a | pmichaud++ | src/pmc/qrpa.pmc:
Add some useful optimizations.
diakopter I'm surprised dalek didn't get booted for that outburst
PerlJam whoa, someone left the Pm on tonight
TimToady or the dalek is in wayback mode 05:25
pmichaud it's the Pm 05:27
PerlJam pmichaud: is that everything a RPA replacement needs? It looks fairly complete. 05:28
05:28 cognominal joined
pmichaud I don't know if it's everything. When I try to switch List to use it, though, I get some weird exceptions. I'll work on it more tomorrow 05:30
TimToady pmichaud++
pmichaud There's certainly not much left to do if it's not complete. It should be a *ton* more performant for queue-like operations, which is what Lists and iterators basically are 05:31
diakopter tomorrow++
TimToady mañana, mañana, I love you, mañana, you're always a day away...
pmichaud I don't know why it didn't hit me before today that having a O(n) shift_pmc operation on RPA would be detrimental to our list model 05:32
I mean, I knew it at some level... but didn't really think it through properly.
diakopter "tomorrow's just a future yesterday..." -Craig Ferguson song
TimToady well, tomorrow is certainly unevenly distributed 05:33
well, except at midnight on the date line
I kinda think of iterator lists as Lisp cons lists with fancy car nodes for batched items 05:35
s/batched/batched or delegated/
but yeah, if it's expensive to shift, that's gonna bite 05:36
pmichaud yes, I think of it conceptually that way also
(cons lists and car nodes)
anyway, the new shift code replaces the O(n) memmove function with a couple of integer ops 05:37
we also get some performance improvements in splice and unshift in the process
moritz \o
phenny moritz: 00:02Z <diakopter> ask moritz what if rn: or nr: invoked both rakudo and niecza
TimToady o/
moritz phenny: tell diakopter +1 to rn|nr 05:38
phenny moritz: I'll pass that on when diakopter is around.
diakopter o/
phenny diakopter: 05:38Z <moritz> tell diakopter +1 to rn|nr
TimToady maybe p5: should just do that, and reserve perl5: for "everyone"
pmichaud hmmm, I remember "rn". Once used that program quite a lot :)
TimToady I've heard of that one
code was pretty grotty, I hear.... 05:39
diakopter read news?
PerlJam mumbles something about being doomed to repeat rn
TimToady sacrificed readability to get the bytes up on the screen faster...
funny thing is that I dropped rn in order to work on Perl because I thought I might rewrite rn in Perl to be able to do bitwise ops on article ranges better... 05:41
took a while before Perl got there though 05:42
diakopter n: ++temp .say 05:44
p6eval niecza v18-1-gc86e3f0: OUTPUT«Any()␤Internal error in exception dispatch: Writing to readonly scalar␤ at <unknown> line 0 (KERNEL Scalar.TEMP @ 0) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤»
diakopter r: ++temp .say
p6eval rakudo 696a71: ( no output )
diakopter on ho I feel a bout of fuzzing coming on 05:45
dalek kudo/nom: 50b77f3 | duff++ | src/core/Mu.pm:
Give TimToady .take
TimToady now if only temp worked... :)
diakopter n's error is cute 05:46
writing to readonly scalar in exception dispatch?
phenny: ask sorear try n: ++temp .say 05:47
phenny diakopter: I'll pass that on when sorear is around.
diakopter n: ++.say 05:48
p6eval niecza v18-1-gc86e3f0: OUTPUT«Any()␤Unhandled exception: Writing to readonly scalar␤ at /tmp/wXR4TZRS2R line 1 (mainline @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3910 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3911 (module-CORE @ 558) ␤ at /home/p6eval/niec…
diakopter oh.
r: say "alive"; my $a = let $a; 05:50
p6eval rakudo 696a71: ( no output )
diakopter erm
std: temp temp temp temp $_ 05:52
p6eval std f179a1b: OUTPUT«ok 00:00 41m␤»
dalek ast: fcd46f4 | duff++ | S04-statements/gather.t:
Added a test that uses .take
05:57 wtw joined
diakopter well that's odd. 05:58
rakudo just exits with no eror on that input
errorlevel/exitcode 0
05:59 kaleem joined
pmichaud goodnight, all -- bbt 05:59
PerlJam g'night pm
PerlJam didn't realize that p5p has also been talking about a 'safe deref' 06:04
diakopter PerlJam: did you merge nqp's pull request 06:05
PerlJam no, I didn't. 06:06
Didn't know there was one.
diakopter from kboga 06:07
adding nqp defined and such
PerlJam aye, I see it now
(I don't normally look at repos through the lens of github)
06:07 estebann left
diakopter hm it seems it conflicts with your commit 06:07
since it can't automatically be merged 06:08
PerlJam yeah, he used some slightly different names than I did
06:23 am0c joined, woosley left 06:43 Entonian joined 06:44 Entonian left
dalek p: b1fb4b3 | kboga++ | / (16 files):
pir::defined to nqp::defined, pir::find_not_cclass__Iisii to nqp::findnotcclass, pir::find_method__PPs to nqp::findmethod
06:45
06:57 lestrrat left 06:58 lestrrat joined 07:03 brrt joined 07:11 bbkr1 joined 07:31 terrence joined 07:35 immortal left, erkan joined 07:39 viji joined
viji hi 07:40
moritz hello viji
brrt hello viji
viji Hello
Hi guys, this is the first time joining 07:41
moritz welcome to #perl6 07:42
brrt i'm not going to repeat moritz :-) what brings you here?
viji I really don't know where I can start up with 07:43
moritz perl6.org/ has lots of good links 07:44
viji I have around 4 years of working experience in perl
Enthusiastic to explore more.
brrt thats good :-) 07:45
but as a word of warning, perl6 is much unlike perl 5 07:46
if you expect to learn it as a 'new' language you should be fine.. if you expect an 'extended perl5' then you might not 07:47
07:47 xinming left
viji Ok, I think starting step would be to go through the perl6 documentation. 07:47
brrt .. probably 07:48
there is a book
moritz the starting step should be to install a Perl 6 compiler, rakudo or niecza
and then get the 'Using Perl 6' book (pdf download is free), and start to play with it
07:48 kresike joined
kresike morning all you happy perl6 people 07:49
brrt small snippets of perl6 can also be sent to p6eval
(the irc bot)
as in: 07:50
p6: say 4 ~~ 1 .. 10;
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«True␤»
..pugs: OUTPUT«␤»
moritz r: say <hello hi greetings>.roll, ', viji'
p6eval rakudo 50b77f: OUTPUT«hello, viji␤»
brrt i do like the roll method
07:51 woosley joined 07:52 fgomez left
viji When do you think full fledged perl6 version will be released. 07:54
brrt the question of the beast :-)
personally i have no idea 07:55
perl6 is positively huge
(the specification)
but most of it is 'usable' right now in the form of rakudo star releases
07:59 rafl joined
dalek albot: 683d255 | moritz++ | evalbot.pl:
install 'rn' and 'nr' aliases for rakudo+niecza

also refactor the aliasing mechanism to handle multiple implementations
08:00
moritz and niecza is often much faster at run time, though less of the ecosystem works with it
brrt oh, btw 08:01
i was under the impression that 'nom' was the new 'master'?
moritz well, the main development branch, yes 08:02
brrt so the documentation on rakudo.org is just old?
08:03 viji left
moritz it might be 08:03
what does it say?
ah, it still has the 'How to get Rakudo nom' links 08:04
moritz removes it 08:06
08:06 p6eval left, p6eval joined, ChanServ sets mode: +v p6eval
moritz rn: say "fast at {<run compile>.pick} time" 08:06
hm, first executiong after restart taking ages again 08:07
I'd really like to know what's going on there
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«fast at compile time␤»
brrt hey, its fixed
rn: say "i'm quick" 08:08
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«i'm quick␤»
brrt thats much faster
moritz curiously, I run two instances of p6eval, one for freenode, one for irc.perl.org
and only the freenode instance takes ages on the first execution
08:16 lestrrat left 08:18 lestrrat joined 08:38 Khisanth joined
jnthn morning o/ 08:42
phenny jnthn: 05:18Z <diakopter> ask jnthn I golfed yer thingamabob. compare r: with n: gist.github.com/2848989
jnthn I'm very happy folks are jumping on the pir -> nqp effort. This one can't live though: 08:44
github.com/perl6/nqp/commit/0d86ce...2a32fdfc9f
That pir::does is nothing to do with 6model and calls down to Parrot's object system. Which we need to further eliminate our usage of, not abstract away. 08:45
moritz fwiw I hadn't done 'pir::defined' => 'nqp::defined', because I thought that maybe the repr_defined thing might be a better match
08:48 masonkramer joined
jnthn moritz: Yeah, I was wondering what to do on that one. 08:55
08:57 mucker joined 09:00 sergot joined
sergot hi o/ ! :) 09:00
09:01 am0c left
moritz \o sergot 09:03
tadzik hello #perl6 09:18
jnthn o/ sergot, tadzik 09:19
09:23 kaleem left 09:34 masonkramer left 09:57 mucker left, mucker joined 10:02 mucker left 10:05 mucker joined 10:08 snearch joined 10:10 woosley left 10:18 birdwind1pbird left, birdwindupbird left 10:23 JimmyZ joined 10:26 birdwindupbird joined, birdwind1pbird joined 10:28 snearch left, Guest48656 left 10:31 birdwind1pbird left, birdwindupbird left 10:46 birdwindupbird joined, birdwind1pbird joined 10:59 daxim joined 11:01 ab5tract joined 11:02 brrt left 11:04 MichalWriter joined
MichalWriter hello 11:04
11:06 bbkr1 left
MichalWriter Culd someone tell me where I can find some reliable history about perl6 and perl5, I would like to write some articles concerning How it came to being:) 11:07
11:10 kaleem joined
JimmyZ hello MichalWriter, I think most people are not here now. 11:14
11:19 kboga left
gfldex MichalWriter: you can read up on the early history here: blob.perl.org/perlweb/dev/perl6/ta...-Perl6.pdf 11:20
daxim MichalWriter, strangelyconsistent.org/blog/happy-...ary-perl-6 11:21
and for perl 5: history.perl.org/PerlTimeline.html perldoc.perl.org/perlhist.html socialtext.net/perl5/history www.shlomifish.org/lecture/Perl/New...slides.pdf
11:24 MichalWriter left 11:25 birdwindupbird left, birdwind1pbird left 11:26 kaleem left, kaleem joined, terrence left 11:27 terrence joined, cognominal left, cognominal joined 11:28 birdwindupbird joined 11:33 birdwind1pbird joined 11:37 snearch joined
pmichaud good morning, #perl6 11:41
terrence it's already evening in china :) 11:42
JimmyZ is in China :) 11:43
moritz good am, pm
jnthn o/ pmichaud 11:47
11:47 JimmyZ left, JimmyZ joined
dalek kudo/qrpa: 02b5ec6 | pmichaud++ | src/Perl6/Actions.pm:
Add nqp::qlist() to obtain QRPA instead of RPA.
11:48
kudo/qrpa: f4373c6 | pmichaud++ | src/pmc/qrpa.pmc:
QRPA: Fix pointer typo in QRPA.clone.
moritz so, how far along is qrpa? 11:49
pmichaud the PMC itself I think is pretty much complete. When I start trying to use it in List, though I get "WarningWarning" and everything stops. I'm just starting to look into that now. 11:50
jnthn Oh
There's an islist op iirc 11:51
pmichaud it checks directly for RPA?
jnthn Yeah
perl6_is_list
pmichaud oh, if it's perl6_is_list I can probably do something with that
jnthn I added it because I was tired of whatever was there before slowing down list guts. 11:52
(Change based on profile data.)
pmichaud yes, I'm also a little concerned that there may be other C code that is looking specifically for RPA 11:53
11:54 birdwindupbird left
dalek ast: b1c5468 | moritz++ | S09-autovivification/autovivification.t:
unfudge a few autovivification tests
11:54
moritz .. for rakudo.
moritz hates it when he fails to add information to commit messages, and finds out one second after 'git push'
11:54 skids left 11:55 krunen left
jnthn pmichaud: the type mapping stuff does 11:55
pmichaud: We may also need to teach the serializer about this new PMC.
pmichaud: But that'll be very easy.
pmichaud oh!
I forgot to write freeze/thaw
jnthn ?
pmichaud in qrpa 11:56
jnthn Oh, bs doesn't use freeze/thaw
You may get away with it :)
11:56 birdwind1pbird left, birdwindupbird joined 11:57 birdwind1pbird joined
pmichaud github.com/parrot/parrot/pull/778 # huh? wish parrot folks could make up their minds :-) :-) 12:01
moritz *shrug* not much effort remove a .loadlib line... 12:02
felher r: while True { say (0 but True); }
p6eval rakudo 50b77f: OUTPUT«(signal ABRT)0␤0␤0␤0␤0␤0␤0␤0␤»
felher :/
But at least i golfed it down :D
pmichaud [Coke]++ already noted that parrot went through a fair bit of effort to move the OS pmc to a dynpmc, now someone is moving it back. Weird. 12:03
felher: maybe that's just Rakudo's way of refusing to do contrived code. :-) :-)
moritz r: say (0 but True);
p6eval rakudo 50b77f: OUTPUT«0␤»
moritz r: loop { say (0 but True); } 12:04
p6eval rakudo 50b77f: OUTPUT«(signal ABRT)0␤0␤0␤0␤0␤0␤0␤0␤0␤»
felher pmichaud: :D
moritz felher++ # golfing segfaults
jnthn That's the same thing as the bool.t segv
pmichaud r: say (0 but True); say (0 but True); say (0 but True); say (0 but True); say (0 but True); say (0 but True); say (0 but True); say (0 but True); say (0 but True);
p6eval rakudo 50b77f: OUTPUT«(signal ABRT)0␤0␤0␤0␤0␤0␤0␤»
pmichaud looks like it always occurs on the eighth one. 12:05
jnthn It explodes during the GC run, I think.
It's not clear why :/
moritz r: for ^10 { say $_ but True }
p6eval rakudo 50b77f: OUTPUT«(signal ABRT)0␤1␤2␤3␤4␤5␤6␤»
jnthn I need to golf it further; "but" does quite a bit 12:06
felher On my maschine i can say it ~~ 200 times :)
jnthn Yeah, it's probabalistic-y.
Such is heap corruption.
It looks like it may be double-freeing of libtommath things
(Almost certainly the fault of P6opaque or P6bigint though)
moritz is glad to have a reproducable case 12:11
it seems that I've occasionally run into segfaults that then went away when unrelated stuff changed
like the one in qbootstrap that went away when merged into nom
r: role A { }; say 0 but A for ^20 12:12
p6eval rakudo 50b77f: OUTPUT«0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤»
moritz r: enum A <b c>; say 0 but A for ^20
p6eval rakudo 50b77f: OUTPUT«(signal ABRT)0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤»
jnthn r: say 0 but 'foo' for ^20 12:14
p6eval rakudo 50b77f: OUTPUT«(signal ABRT)foo␤foo␤foo␤foo␤foo␤foo␤foo␤»
jnthn r: say 'x' but 1 for ^20
p6eval rakudo 50b77f: OUTPUT«x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤»
jnthn r: say 'x' but 1 for ^2000
p6eval rakudo 50b77f: OUTPUT«x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x␤x
jnthn The target of the mixin has to be an Int. 12:15
moritz and it needs to be not a role, but something else 12:16
jnthn r: role A { }; say 0 but A for ^200 12:17
p6eval rakudo 50b77f: OUTPUT«0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0␤0
jnthn Hmm.
12:18 ab5tract left 12:20 nwc10 joined 12:21 xinming joined 12:26 birdwind1pbird left, birdwindupbird left, birdwindupbird joined 12:27 birdwind1pbird joined 12:31 replore joined 12:32 fgomez joined 12:35 snearch left
[Coke] +# 05/31/2012 - rakudo++ (22355); niecza (91.47%); pugs (34.66%) 12:53
dalek kudo/qrpa: cf75879 | pmichaud++ | src/ops/perl6.ops:
QRPA: Update nqp::islist to be QRPA-aware.
12:54
13:02 birdwindupbird left 13:03 snearch joined 13:04 birdwind1pbird left 13:08 wtw left 13:10 Patterner left 13:12 Psyche^ joined, Psyche^ is now known as Patterner 13:13 replore left 13:14 kaleem left 13:17 replore_ joined 13:19 kaleem joined 13:22 kaleem left
dalek kudo/qrpa: 725acab | pmichaud++ | / (2 files):
QRPA: Add QRPA.get_number().
13:24
kudo/qrpa: 94483a2 | pmichaud++ | / (2 files):
QRPA: Add QRPA.get_bool, get_bool and get_number tests.
13:25 terrence left 13:28 thou joined 13:31 skids joined, terrence joined 13:34 kaleem joined
dalek p: bfea0f7 | duff++ | / (15 files):
Use new nqp ops

nqp::defined, nqp::typeof, nqp::rindex, nqp::find_not_cclass, nqp::open, nqp::new, nqp::isa, nqp::find_method, nqp::does, nqp::stat
13:36
pmichaud Hmmm.... I'm not sure there should be a nqp::new 13:37
actually, I'm not comfortable with several of those.
moritz nqp::defined is a bit suspicious because it's the parrot defined that's tested, not the repr thingy 13:38
pmichaud right
these are all too parrot-specific to be in the nqp:: space.
moritz and find_not_cclass depends on parrot-specific constants
pmichaud I'm going to request that one be reverted.
moritz find find_method violates the 'no underscore' principle
that we held up so far
pmichaud This is bringing the nqp:: namespace waaaaaaay too close to parrot.
moritz PerlJam: please revert :-) 13:39
pmichaud I also want those nqp:: opcodes to go away. If we're doing something Parrot specific, then pir:: is the proper place.
the nqp:: space should be reserved only for those things that are going to be vm-independent.
moritz +1 13:40
13:41 isBEKaml joined
pmichaud for example, the correct way to verify type in NQP is by using nqp::istype, not nqp::typeof 13:41
jnthn arrrghh...please everybody stop doing the nqp ops!!! 13:42
pmichaud yes, these are very wrong.
jnthn I'm going to have to revert half of this.
pmichaud well, someone needs to revert it, yes.
jnthn I want Parrot specific things taht I want to kill left looking Parrot specific.
pmichaud right -- see above 13:43
13:39 <pmichaud> I also want those nqp:: opcodes to go away. If we're doing something Parrot specific, then pir:: is the proper place.
jnthn Right.
pmichaud jnthn: out of curiosity, why did you add nqp::can, though?
jnthn pmichaud: Because nqp::can makes sense at a 6model level. 13:44
pmichaud as in, 6model properly implements vtable can?
jnthn pmichaud: Think so, but even looking to VMs beyond Parrot, I would want an nqp::can
moritz r: nqp::say pir::defined(Int)
p6eval rakudo 50b77f: OUTPUT«0␤»
moritz r: nqp::say pir::defined(1) 13:45
p6eval rakudo 50b77f: OUTPUT«1␤»
jnthn pmichaud: The alternative is to just expose an nqp::findmethod and then use nqp::isnull on the result or something
moritz it also seems that it implements the defined vtable :-)
jnthn pmichaud: But it's just too common.
moritz: It does...but I'm not too happy on that.
pmichaud I'm fine if there's an nqp::can, as long as it's consistent with 6model objects
moritz jnthn: I know
pmichaud for example, we also have nqp::clone which is the same way
jnthn pmichaud: clone I'm not happy with at the moment 13:46
pmichaud: 6model does not handle the clone vtable
pmichaud: There's a representation level clone operation.
pmichaud okay, so that one we might need some work on.
jnthn The problem we have at the moment is that half the things are 6model-y and half are not.
pmichaud Anyway, new/defined/typeof/etc all have to go.
jnthn In NQP land, that is.
Indeed.
13:47 mucker left
jnthn I appreciate the effort and intent behind these patches, but nqp:: needs careful design, not to be the same mess pir:: is. 13:47
13:48 felher left
pmichaud right... the purpose is not to simply make the word "pir" go away but keep all of its warts. 13:48
13:48 crazedpsyc left
jnthn *nod* 13:48
13:48 crazedpsyc joined
moritz so, we're all in violent agreement 13:48
jnthn :) 13:49
moritz and just have to tell PerlJam++ and kboga++
jnthn Aye.
pmichaud well, except the commits haven't been reverted yet. :-)
13:49 crazedpsyc is now known as Guest29889
jnthn Note that a bunch of the commits were OK 13:49
This latest one not, but kboga++ did many pir -> existing nqp ops that were sensible.
pmichaud as opposed to a full-scale revert, I propose simply removing the nqp:: opcodes we disagree with and then patch things to work again :-)
jnthn +1 13:50
13:50 felher joined
nwc10 I don't see any comment in src/PAST/NQP.pir explaining this policy 13:50
(the policy makes total sense to me. But that's not saying much, as I'm likely very out of context)
jnthn pmichaud: Hah! Guess how many gigabytes of RAM this allocates? 13:51
my $string = 'x' x 30000;
my @matches = $string.match(/./, :global);
:)
13:51 terrence left
jnthn thinks he knows why too :) 13:51
pmichaud no guess
jnthn 4GB!
pmichaud only 4?
jnthn Exhaust all the 32-bit address space :) 13:52
pmichaud: It's transcoding to ucs4 for every single match
pmichaud: And then keeping target around in the Cursor
moritz ouch
jnthn So we end up with 30000 * 4 * 30000 :)
r: say 30000 * 4 * 30000
p6eval rakudo 50b77f: OUTPUT«-694967296␤»
jnthn uh :) 13:53
moritz r: say 30000 * 4 * (30000)
jnthn Also, the optimizer needs to be smacked...
p6eval rakudo 50b77f: OUTPUT«3600000000␤»
pmichaud I can certainly release $!target at the end, if that's not being done already.
jnthn pmichaud: Or !cursor_init gets a :target to set it explicitly? (more)
pmichaud but really things improve greatly when our native string type can handle fixed-width unicode natively
jnthn I'm also bothered that LANG suffers the same thing. 13:54
nwc10 when smacking the optimiser, I'm not sure if there is a mathematically reliable way to determine whether integer multiply has overflowed
jnthn That is, every time we hit a regex in CORE.setting compilation, for example, we do a LANG switch, and re-transcode the entire of CORE.setting.
That's probably part of why S05-mass/rx.t apparently takes an age to compile too :) 13:55
13:55 Guest29889 is now known as crazedpsyc
flussence jnthn: is that a new bug or something that's always been there? 13:55
moritz nwc10: oh, there is
nwc10: just do the computation in bigint land 13:56
nwc10: and look if the result can safely be unboxed
jnthn flussence: It's been there a while...it's over-eager "make it native"
isBEKaml and suffer the penalty of boxing types. :)
s/of/for/
flussence one of my biggest gripes right now is how slow string munging is in rakudo. maybe I won't have anything to complain about soon :) 13:57
moritz nwc10: alternatively, on the CPU level the result of a multiplication is always twice as wide, so you can just look at the upper half to detect overflow
pmichaud jnthn: I agree that LANG is an issue; I'm not sure that :target is the right answer.
I'll think about it a bit today, though. That one needs solving soon-ish. 13:58
jnthn pmichaud: Ah, your suggestion may not help for the /./ case above (more)
nwc10 moritz: I'm not convinced about that.
jnthn pmichaud: We can easily release $!target if we know we won't backtrack into the thing again, but for normal regexes I guess backtracking is enabled.
nwc10 moritz: oh, you can in the upper half, if you have a multiply that's twice as wide, available for you to use 13:59
pmichaud well, that's as much a problem with the implementation of :global as anything else then
moritz nwc10: is there any modern instruction set where that's not the case? 14:00
nwc10 I don't know. I tend to think "what can C give you?"
colomon keeps on thinking this would be a fun Niecza project: www.makershed.com/Getting_Started_w...lick=37845
nwc10 also, if you are already using 64 bit integers on a 64 bit machine, no good idea
moritz nwc10: C can't. The CPU can.
jnthn
.oO( Some assembly required )
14:01
moritz anyway, we have a bigint library available
jnthn For constant folding that works out fine 14:02
I think TimToady expects our native multiply to throw if it overflows, though...
moritz aye :(
and I think then it's not 'native' anymore :/
jnthn I did try to argue that :)
nwc10 but overflow as wrap isn't useful to anyone 14:03
pmichaud can the native multiply simply do nextsame on overflow?
moritz uhm
jnthn nwc10: Yes, but C performance is useful to many people ;) 14:04
moritz you can only do really efficient calculations with natives if you can determine at compile time that the return type is a native one
jnthn What moritz said
moritz and a nextsame means that you always potentially get a boxed Int back
so you need one GCable per operation :( 14:05
jnthn Right. Then the optimizer can't inline the next operation.
nwc10 jnthn: yes. Although for some, advice from Klortho #11912 seems to be the key part. :-(
14:05 SHODAN left
pmichaud well, clearly 30000 * 4 * 30000 as optimized is less good than if the optimization wasn't there. 14:06
moritz I'm fine with never overlflowing operations from literals
pmichaud that *has* to be fixed somehow.
jnthn Agreed
moritz but if the programmer explicitly requests native types, he should get them, with all the problems they have
jnthn But we should actually be constant folding that in the first place, I suspect
moritz pmichaud: I don't think anybody contests that
pmichaud same if we have my int $a = 30000; my int $b = 4; $a * $b * $a
r: my int $a = 30000; my int $b = 4; say $a * $b * $a 14:07
p6eval rakudo 50b77f: OUTPUT«-694967296␤»
jnthn pmichaud: There you've declared you're working in native types.
moritz and native types overflow.
jnthn pmichaud: If you didn't declare it then yeah, big integer semantics.
14:07 SHODAN joined
pmichaud r: my int $a = 30000; say $a * foo() * $a 14:07
p6eval rakudo 50b77f: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&foo' called (line 1)␤»
pmichaud oops 14:08
but you get the point -- how do I know how foo() was declared?
moritz by looking it up in a lexical scope
jnthn r: my int $a = 30000; sub foo() { 4 }; say $a * foo() * $a 14:09
p6eval rakudo 50b77f: OUTPUT«3600000000␤»
moritz one approach that could work is to default literals to the non-native type
jnthn r: my int $a = 30000; sub foo() returns int { 4 }; say $a * foo() * $a
p6eval rakudo 50b77f: OUTPUT«Type check failed for return value; expected 'int' but got 'Int'␤ in sub foo at /tmp/fWPl9Tddb4:1␤ in block <anon> at /tmp/fWPl9Tddb4:1␤␤»
jnthn Ah...that that bit is NYI...
moritz and allow unboxing when assigning them to natively-type variables
jnthn moritz: That could work, yes
moritz r: my int $a = 30000; sub foo() returns int { nqp::unbox_i(4) }; say $a * foo() * $a 14:10
p6eval rakudo 50b77f: OUTPUT«Type check failed for return value; expected 'int' but got 'Int'␤ in sub foo at /tmp/cLOezGpqiw:1␤ in block <anon> at /tmp/cLOezGpqiw:1␤␤»
pmichaud what happens with $a + 1, then?
is the 1 boxed or unboxed?
moritz that would be boxed in my proposal
pmichaud so do we not get the infix:<+>(int,int) version?
jnthn pmichaud: Right now, it emits that as an (already unboxed) 1
pmichaud: And then we hit the int,int version
pmichaud jnthn: right, I'm asking about what happens in moritz' proposal 14:11
jnthn pmichaud: It'd have to unbox the 1 every time, iiuc.
pmichaud: Which doesn't seem desirable, but isn't an allocation at least...
nwc10 Oh, confident that you can be sure they won't overflow if both values are less than the square root of the largest permissble value. (ie fit in 16 bits, if you have a 32 bit multiply, etc) 14:12
moritz at some point we'll realize that you can't have speed, safety *and* magic (all boxing/unbox implicit)
pmichaud afk for a bit 14:18
somewhere QRPA is causing a segfault :-|
14:21 fhelmberger left, PacoAir joined
pmichaud back again, I think I know where the error(s) may be 14:22
yup
dalek kudo/qrpa: eadaa34 | pmichaud++ | src/pmc/qrpa.pmc:
QRPA: Restore the custom_mark_destroy flags that were in init(). Oops.
14:25
jnthn :) 14:27
14:28 tokuhiro_ joined
dalek kudo/qrpa: c5b2ca2 | jnthn++ | src/binder/types.c:
Ensure the type mapper knows how to map a QRPA to Parcel.
14:33
jnthn pmichaud: Did ^^ for you :)
tadzik argh. Is it just me, or every train reservation website around is absolutely terrible?
moritz I can certainly attest that the German one is 14:34
isBEKaml that's supposedly a *feature* :P Train journey's *supposed* to be terrible
tadzik well, a roundtrip air ticket from WAW to SXB almost exceeds my monthly salary... ;) 14:35
14:35 domidumont joined
tadzik or maybe I fail at searching again 14:35
moritz generally likes travelling by train, as compared to its alternatives
tadzik trains, when done right, are pretty cool 14:36
colomon wishes traveling by train was even occasionally a sane move in North America
moritz tadzik: which days do you want to travel?
tadzik leg room, electricity, no wireless communication limitations, almost seamless movement (compared to buses for example)
moritz: I was thinking about 28 June - 2 July
or something of this sort 14:37
there is supposed to be a train from WAW to Karlsruhe, EuroNight
moritz tadzik: 334 EUR wound trip 14:38
tadzik ugh
thanks. Where did you find that?
moritz www.swoodoo.com/de/flugsuche/Warsch...a8a755891e
tadzik oh, that's even flugzug 14:39
isBEKaml phenny: flugzug? 14:40
tadzik phenny: "flugzug"?
phenny tadzik: "Flugzug" (de to en, translate.google.com)
tadzik phenny: "flugzeug"? 14:41
phenny tadzik: "plane" (de to en, translate.google.com)
pmichaud wow, after that last fix only four spectest files fail with qrpa 14:42
moritz isBEKaml: train to the airport
tadzik I guess I'll go with a bus again :) 14:43
jnthn pmichaud: Oh, we're using qrpa?
pmichaud: I didn't see the thing to enable use of it in the branch.
14:43 adu joined
pmichaud I haven't committed/pushed those 14:43
isBEKaml moritz: ah, okay.
jnthn Oh :)
pmichaud and I'm only using it in one place at the moment
jnthn 4 spectests feels rather triagable.
tadzik but then I'll have to skip one of my exams :/ 14:44
pmichaud well, considering it was a lot more an hour ago, I'm happy.
jnthn moritz: Are you ging to FPW?
pmichaud I'll go ahead and push the other qrpa changes now. I'm not really planning to do a branch merge with this branch, tho -- it's just to explore how well it works. When things work out, qrpa will move to nqp and I'll cherry-pick items back into the nom branch 14:45
moritz jnthn: no
jnthn pmichaud: ah, ok
Makes sense. 14:46
14:50 fgomez left 14:51 kaleem left 14:57 cognominal_ joined 15:00 cognominal left, fgomez joined, GlitchMr joined
diakopter nr: my $a=1; { temp $a=2; temp $a=3 }; say $a # golfed further 15:00
p6eval rakudo 50b77f: OUTPUT«2␤»
..niecza v18-1-gc86e3f0: OUTPUT«1␤»
GlitchMr perl6: my @s = 1, 2, 3; print (@s.pick(*)while![<=]@s).perl 15:01
p6eval rakudo 50b77f: OUTPUT«===SORRY!===␤Unable to parse postcircumfix:sym<( )>, couldn't find final ')'␤»
..pugs: OUTPUT«*** ␤ Unexpected "while"␤ expecting term postfix, operator or ")"␤ at /tmp/JuMtco5ee7 line 1, column 35␤»
..niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Two terms in a row (listop with args requires whitespace or parens) at /tmp/8sKRgHCYeV line 1:␤------> s = 1, 2, 3; print (@s.pick(*)while![<=]⏏@s).perl␤␤Parse failed␤␤»
15:01 fhelmberger joined
GlitchMr perl6: my @s = 1, 2, 3; @s.pick(*)while![<=]@s; print @s 15:01
p6eval niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Two terms in a row (listop with args requires whitespace or parens) at /tmp/lAbnJe5yOR line 1:␤------> my @s = 1, 2, 3; @s.pick(*)while![<=]⏏@s; print @s␤␤Parse failed␤␤»
..pugs: OUTPUT«*** ␤ Unexpected "@s"␤ expecting dot, ":", "(", term postfix or operator␤ at /tmp/C3cCawZ54u line 1, column 38␤»
..rakudo 50b77f: OUTPUT«===SORRY!===␤Confused␤at /tmp/RjUH_wCcGe:1␤»
GlitchMr ok...
moritz GlitchMr: but whitespaces between terms and infix operators
s/but/put/
GlitchMr: and also between terms and keywords
GlitchMr I know
diakopter nr: my @s = 1, 2, 3; @s.pick(*)while![<=] @s; print @s 15:02
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«123»
jnthn hah, calling temp twice in the same block :)
GlitchMr I was just checking how it worked for that guy: codegolf.stackexchange.com/a/398/3103
But I think it's because it was working long time ago
15:02 cognominal___ joined
jnthn s/block/scope/ 15:02
diakopter jnthn: I think it's the same problem as the the recursed temp 15:03
I mean, it makes sense that the fix for one would fix the other one
moritz r: my @s = 3, 1, 2; @s=.pick(*) while ![<=]@s
p6eval rakudo 50b77f: OUTPUT«===SORRY!===␤Confused␤at /tmp/m1WV6gUHYl:1␤»
moritz r: my @s = 3, 1, 2; @s=.pick(*) while ![<=] @s
p6eval rakudo 50b77f: ( no output )
moritz r: my @s = 3, 1, 2; @s=.pick(*) while ![<=] @s; say @s
p6eval rakudo 50b77f: OUTPUT«use of uninitialized value of type Any in string context in block <anon> at /tmp/_6_WKViX2L:1␤␤␤»
pmichaud I'm getting a test failure in nqp/qregex
moritz pmichaud: I think I also got one last I ran those tests 15:04
pmichaud: something about an error message being off
jnthn thought he'd fixed everything at one point...
diakopter it's been there a week or more
moritz r: my @s = 3, 1, 2; @s=.pick(*) until [<=] @s; say @s
p6eval rakudo 50b77f: OUTPUT«use of uninitialized value of type Any in string context in block <anon> at /tmp/p4M4zQFOuI:1␤␤␤»
colomon there's a method form of take?
moritz r: my @s = 3, 1, 2; @s.=pick(*) until [<=] @s; say @s
p6eval rakudo 50b77f: OUTPUT«1 2 3␤»
moritz r: my @s = 3, 1, 2; @s.=pick:* until [<=] @s; say @s 15:05
p6eval rakudo 50b77f: OUTPUT«===SORRY!===␤Confused␤at /tmp/dLHiRUPaE0:1␤»
diakopter colomon: PerlJam added it to Mu last night
moritz r: my @s = 3, 1, 2; @s.=pick: * until [<=] @s; say @s
TimToady \o/ bogosort
p6eval rakudo 50b77f: OUTPUT«1 2 3␤»
GlitchMr I've already optimized it into @s.=pick(*)until[<=] @s
moritz GlitchMr++
15:05 cognominal_ left
colomon diakopter: why? 15:05
GlitchMr I've noticed that even while he called it "code golf", it wasn't really optimized 15:06
jnthn colomon: I think there was some discussion of it in the backlog
diakopter colomon: because TimToady said it was already mentioned a couple times in the syn
15:06 tokuhiro_ left
dalek p: 69d548e | jnthn++ | / (17 files):
Toss various nqp:: ops that are too Parrot-specific.
15:07
GlitchMr Bogosort is really easy to implement in Perl 6.
But I really like this:
[min] @array
15:08 fhelmberger left
pmichaud or even @array.min :-) 15:09
GlitchMr Oh right
colomon jnthn, diakopter, TimToady: I see "(Using the term "label" loosely, to include other solutions besides the label syntax, such as .gather and .take methods on some identity object.)" which seems to be the opposite of what has been implemented.
GlitchMr There is more than one way to do it
Or:
min @array
Why "min" is operator anyways? 15:10
TimToady so you can compose it more ways
$x min= 42 15:11
moritz r: say <42 -3 4>.min
p6eval rakudo 50b77f: OUTPUT«-3␤»
TimToady @a Zmin @b
colomon or @x >>min<< @y
pmichaud @a >>min<< @b
TimToady Xmin has to be good for something...
pmichaud I think that Xmin is some sort of league of mutant heroes or something like that. :-P 15:12
tadzik ;)
benabik A very small league.
GlitchMr What about Xmax?
diakopter a minimal size league
tadzik small step for humanity
or from humanity...
isBEKaml oh, they are not humans at all.... 15:13
GlitchMr And what about Xminmax?
TimToady Perl 6 will be done by Xmax
GlitchMr So it's no longer Xmas, but Xmax?
diakopter 'twas a joke's eve 15:14
GlitchMr Also, I'm not sure, but what is the difference between ..., !!! and ???
pmichaud jnthn: I was going to reject nqp::findmethod altogether 15:15
TimToady fail, die, warn
pmichaud jnthn: if you're comfortable with keeping it, though, I'm okay with that.
jnthn pmichaud: What do you plan to replace it with?
timotimo how far are the perl6es to get debuggers?
jnthn pmichaud: I'm not thrilled with the name.
pmichaud jnthn: what's the p6 equivalent?
jnthn pmichaud: But I don't ahve a better one.
GlitchMr rakudo: ???; print 3
p6eval rakudo 50b77f: OUTPUT«Stub code executed in block <anon> at /tmp/3H9AgrnreJ:1␤␤3»
GlitchMr rakudo: !!!; print 3
p6eval rakudo 50b77f: OUTPUT«Stub code executed␤ in block <anon> at /tmp/I8sb6gaoa2:1␤␤»
GlitchMr niecza: ???; print 3 15:16
p6eval niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: >>>Stub code executed␤ at /tmp/sLonKb0Ywp line 1 (mainline @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3910 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3911 (module-CORE @ 558) ␤ at /home/p6eval/niecza/lib/CORE…
jnthn pmichaud: There kinda ain't one...you'd really do $obj.^find_method('blah')
pmichaud: But that skips the method cache
GlitchMr Makes sense
pmichaud I'm fine with findmethod for now, then
jnthn pmichaud: In Perl 6 a bunch of the cases we use it for are covered by things like $obj.Foo::bar(), $obj."$foo"(), etc. too
pmichaud the nice thing about an ugly name is that we don't have many qualms with changing it later :)
jnthn OK
TimToady looks like niecza isn't trapping the ??? warning right
pmichaud jnthn: oh, and ARGGGGGH your patch conflicts with mine :-) 15:17
jnthn: you *just* beat me to the push
jnthn oy noes!
pmichaud I'll adopt yours and fold my changes in
GlitchMr At least Git is somewhat clever about changes happening while you modify your code. 15:18
jnthn :)
pmichaud: I've got a Rakudo patch to do similar cleanup almost done
pmichaud usually, yes. In this case jnthn++ and I were both making almost identical changes
jnthn: I'm only changing src/PAST/NQP.pir; I'll let others (you) take care of the rest :)
kresike bye all 15:19
15:19 kresike left
GlitchMr You can make branches and merges usually work. 15:19
jnthn pmichaud: Oh, I did :)
pmichaud jnthn: I'm going to list the explicitly rejected opcodes in PAST/NQP.pir (and we can comment them out or make them throw exceptions at some point)
that way someone else will hopefully not be tempted to do the same thing again, and also to note that there are some opcodes that we don't want 15:20
jnthn pmichaud: +1
pmichaud and if we set them to throw exceptions we can use those to point to the correct opcode 15:21
dalek p: 365eda1 | jnthn++ | src/HLL/Compiler.pm:
Toss a method that assumes Parrot namespaces, and is unused.
pmichaud Heh. That method was actually an early version of PDD31.
jnthn Oh :)
GlitchMr I guess that it will be possible to make bad code in Perl 6?
pmichaud GlitchMr: and not only that, but there will be more than one way to do so. 15:22
GlitchMr But good code will be possible too?
jnthn You don't even have to be talented to make bad code in Perl 6! :)
In fact, if you can make bad code in any other language, you're perfectly qualified! 15:23
pmichaud Of course. There's a ton of good code in Perl 6. :-)
jnthn ;)
TimToady what we hope is that it will be harder to make bad code by accident when you're trying to make good code
GlitchMr I guess that because of this, Perl 5 will be more useful for golf except for certain cases (bogosort). 15:24
TimToady Perl 6 is not optimized for golf, 'tis true. 15:25
dalek kudo/nom: abd4abf | jnthn++ | / (15 files):
Eliminate some uses of nqp:: opcodes that we've outlawed.
15:26
GlitchMr But who would use Bogosort if in worst case it's O(∞).
jnthn Optimists :)
TimToady nonetheless, the typical Perl 6 solution might still be smaller than the typical Perl 5 solutions
jnthn pmichaud: Cleared up nqp:: bits in Rakudo now too :) 15:27
GlitchMr Default "use strict" makes things more difficult for code golf.
And many edge cases simply don't exist in Perl 6.
perl6: print so (True but False) 15:28
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«False»
..pugs: OUTPUT«*** Cannot cast from VBool False to VCode (VCode)␤ at Prelude.pm line 541, column 5-16␤»
GlitchMr perl6: print True but False
p6eval rakudo 50b77f: OUTPUT«False»
..niecza v18-1-gc86e3f0: OUTPUT«True»
..pugs: OUTPUT«*** Cannot cast from VBool False to VCode (VCode)␤ at Prelude.pm line 541, column 5-16␤»
GlitchMr What should be result of this?
TimToady mass confusion, obviously :) 15:29
I'd like to hear arguments from both camps as to why their answer is correct. :) 15:30
GlitchMr What True but False should be on stringify? 15:31
TimToady but this is too near the boolean circularity saw for me to rush in
GlitchMr perl6: print False but True
p6eval pugs: OUTPUT«*** Cannot cast from VBool True to VCode (VCode)␤ at Prelude.pm line 541, column 5-16␤»
..niecza v18-1-gc86e3f0: OUTPUT«False»
..rakudo 50b77f: OUTPUT«True»
GlitchMr perl6: print so (False but True)
p6eval pugs: OUTPUT«*** Cannot cast from VBool True to VCode (VCode)␤ at Prelude.pm line 541, column 5-16␤»
..rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«True»
GlitchMr Makes sense
TimToady now nr is available to leave pugs out 15:32
nr: say False but True
p6eval niecza v18-1-gc86e3f0: OUTPUT«False␤»
..rakudo 50b77f: OUTPUT«True␤»
GlitchMr I'm not sure, but I think that "False but True" should retrun "False" on stringify
jnthn TimToady: The Rakudo store on this is almost certainly tied to how unboxing works in 6model 15:33
colomon nr++
jnthn *story
TimToady: It might be a moderate pain to change.
GlitchMr nr: print False but role { method Bool() { return True } } 15:34
p6eval niecza v18-1-gc86e3f0: OUTPUT«False»
..rakudo 50b77f: OUTPUT«True»
jnthn Right, that's what "False but True" desugars to.
colomon TimToady: I dunno, I kind of thing Pugs is right here....
GlitchMr nr: print +(42 but ("string", False)) 15:35
p6eval niecza v18-1-gc86e3f0: OUTPUT«string»
..rakudo 50b77f: OUTPUT«No such method 'specialize' for invocant of type 'Perl6::Metamodel::ClassHOW'␤ in <anon> at src/gen/Metamodel.pm:2125␤ in <anon> at src/gen/Metamodel.pm:2121␤ in any compose at src/gen/Metamodel.pm:2119␤ in any mixin at src/gen/Metamodel.pm:959␤ in sub infix:<…
colomon nr: print +(42 but 42.1) 15:36
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«42»
GlitchMr ... haven't I asked to use it in numeric context?
colomon nr: print (42 but 42.1).Rat
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«42.1»
jnthn I don't even know what you just tried to do :)
15:36 SatoAmbush joined
colomon nr: print (42 but 42.1).Real 15:36
15:36 SatoAmbush left
p6eval niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Unable to resolve method Real in type Int+{Rat}␤ at /tmp/sqAdiKZZ0f line 1 (mainline @ 4) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3910 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3911 (module-CORE @ 558) ␤ at /h… 15:36
..rakudo 50b77f: OUTPUT«42»
colomon nr: print 42.Real 15:37
p6eval rakudo 50b77f: OUTPUT«42»
..niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Unable to resolve method Real in type Int␤ at /tmp/Usz_FtpvF9 line 1 (mainline @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3910 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3911 (module-CORE @ 558) ␤ at /home/p6…
colomon whoops
cognominal___ jthn, will we eventually have a way to dump parse trees of Perl 6 programs? It is currently broken. 15:38
it has been for a while.
15:38 cognominal___ is now known as cognominal
GlitchMr nr: so (42 but (True, False)) 15:38
p6eval niecza v18-1-gc86e3f0: ( no output )
..rakudo 50b77f: OUTPUT«No such method 'specialize' for invocant of type 'Perl6::Metamodel::ClassHOW'␤ in <anon> at src/gen/Metamodel.pm:2125␤ in <anon> at src/gen/Metamodel.pm:2121␤ in any compose at src/gen/Metamodel.pm:2119␤ in any mixin at src/gen/Metamodel.pm:959␤ in sub infix:<…
GlitchMr niecza: print so (42 but (True, False))
p6eval niecza v18-1-gc86e3f0: OUTPUT«False»
GlitchMr False?
colomon n: say (42 but (True, False).WHAT 15:39
p6eval niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Unable to parse parenthesized expression at /tmp/c2wgkjEZZF line 1:␤------> say (⏏42 but (True, False).WHAT␤Couldn't find final ')'; gave up at /tmp/c2wgkjEZZF line 1 (EOF):␤------> say (42 but (True, …
colomon n: say (42 but (True, False)).WHAT
p6eval niecza v18-1-gc86e3f0: OUTPUT«Int+{Bool},{Bool}()␤»
dalek ecza: ea3d97a | (Solomon Foster)++ | lib/CORE.setting:
Add Mu.take. (Not 100% convinced it is a good idea, but it is in spec and roast and was dead easy to do.)
15:40
15:40 adu left
ast: d1bba41 | (Solomon Foster)++ | S04-statements/gather.t:
Fix test not to use .munch and unfudge it for Niecza.
pmichaud I'm a little uncomfortable that the method form calls the sub form there, fwiw. (Not uncomfortable enough to say it ought to be changed... but it feels a little backward.) 15:42
GlitchMr nr: print ('cake' does Int(42)).perl
p6eval niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Cannot use 'does' operator with an immutable object␤ at /home/p6eval/niecza/lib/CORE.setting line 1401 (die @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 1340 (infix:<does> @ 8) ␤ at /tmp/owdWM82qWp line 1 (mainline @ 3) ␤ at …
..rakudo 50b77f: OUTPUT«Cannot mix in non-composable type Int into object of type Str␤ in sub infix:<does> at src/gen/CORE.setting:11057␤ in block <anon> at /tmp/4TOkNoHvHW:1␤␤»
PerlJam Ah ... good $localtime all. 15:43
Sorry about the trouble. (I read the scrollback already)
pmichaud np, we're fixing it :)
I'm adding references to nqp-opcode.txt in the NQP.pir file, too.
PerlJam promises not to be so bull-in-china-shop in the future :) 15:44
GlitchMr perl6: print 'e' == 'f' # I know that I should use eq or ===
p6eval pugs: OUTPUT«1» 15:45
..rakudo 50b77f: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏e' (indicated by ⏏)␤ in method Numeric at src/gen/CORE.setting:9309␤ in sub infix:<==> at src/gen/CORE.setting:2451␤ in sub infix:<==> at src/gen/CORE.setting:2451␤ in bloc…
..niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Cannot parse number: e␤ at /home/p6eval/niecza/lib/CORE.setting line 1401 (die @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3473 (ANON @ 11) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3475 (NumSyntax.str2num @ 5) ␤ at /ho…
dalek p: d63dec6 | pmichaud++ | / (2 files):
Update notes about rejected nqp:: operations -- no functional changes.
GlitchMr Error messages are good enough :)
perl6: package Cake 15:46
p6eval pugs: ( no output )
..niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Unable to parse package definition at /tmp/GQNd69W3sI line 1 (EOF):␤------> package Cake⏏<EOL>␤␤Parse failed␤␤»
..rakudo 50b77f: OUTPUT«===SORRY!===␤Unable to parse $*PKGDECL definition at line 2, near ""␤»
GlitchMr perl6: package Cake;
p6eval pugs: ( no output )
..niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Semicolon form of package definition indicates a Perl 5 module; unfortunately,␤ STD doesn't know how to parse Perl 5 code yet at /tmp/OLoHUC7sPW line 1:␤------> package Cake⏏;␤␤Parse failed␤␤»…
..rakudo 50b77f: OUTPUT«===SORRY!===␤This appears to be Perl 5 code. If you intended it to be Perl 6 code, please use a Perl 6 style package block like "package Foo { ... }", or "module Foo; ...". at line 2, near ""␤»
GlitchMr Parsing Perl 5 code doesn't look hard if you want to also run it... but there may be problems like "wantarray". 15:47
colomon About gather / take -- it seems like there are a lot of cases which are better documented in the spec than method .take, but don't appear in roast at all. Like take-rw. Or the value returned by take.
dalek kudo/nom: 0f9975c | jnthn++ | src/Perl6/World.pm:
Fix typo spotted by diakopter++.
GlitchMr return wantarray ? @a : "@a" 15:48
Perl 6 doesn't have wantarray, am I right?
tadzik right
jnthn Right.
It does context the opposite way around to Perl 5.
GlitchMr The way which makes more sense?
TimToady makes more sense for Perl 6 :P 15:49
GlitchMr But this could be problem when dealing with Perl 5 code, but I'm sure that some way will be found.
jnthn Well, the Perl 6 way makes more sense when your language also has multiple dispatch :)
15:50 cognominal left, cognominal joined
dalek kudo/nom: 1886ee9 | pmichaud++ | src/core/Parcel.pm:
Use nqp::shift($rpa) instead of $rpa.shift.
15:51
GlitchMr paste.uk.to/52dd9a4d 15:52
This could be a problem...
If Perl 5 code would work in Perl 6, wantarray would have to be implemented.
diakopter s/wantarray/lots/ 15:53
moritz there could be syntax for explicitly calling a p5 routine in a certain context
Juerd p5list(...) 15:55
pmichaud I suspect wantarray in that context would end up returning 'false' or throwing an exception :-)
or, if we know that we're calling a p5-sub, then perhaps context becomes available again. 15:56
(since there's no multisub involved)
just speculatin 15:57
GlitchMr perl6: print (* * *)(3, 4) 15:58
p6eval pugs: OUTPUT«*** Cannot cast from VNum Infinity to VCode (VCode)␤ at /tmp/p6MsxpKrYy line 1, column 7 - line 2, column 1␤»
..rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«12»
moritz rn: print (* * *)(3, 4) 15:59
p6eval rakudo 50b77f, niecza v18-1-gc86e3f0: OUTPUT«12»
Juerd wantwantarray
pmichaud jnthn: (binder/types.c) I've been thinking that we might use QRPA_is_list() (or some other global function) throughout rather than constantly looking up qrpa_id and doing a test for == qrpa_id and == enum_class_ResizablePMCArray
GlitchMr Why * is used for that anyways 16:00
pmichaud I'm fine if we call it nqp_islist(), too.
jnthn pmichaud: +1
GlitchMr But well, ok, $ would be too confusing
$ * $ would confuse everybody
16:00 nwc10 left
pmichaud GlitchMr: "*" is often used in a "wildcard" sense 16:01
e.g., in filename globs and the like
so it somewhat makes sense as the marker for "Whatever"
GlitchMr Single * is whatever
But when connected to some operator, it's closure
pmichaud it's actually a WhateverClosure :) 16:02
rn: say (* * *).WHAT
p6eval rakudo 50b77f: OUTPUT«WhateverCode()␤»
..niecza v18-2-gea3d97a: OUTPUT«{ ... }␤»
pmichaud er, WhateverCode. Whatever. :)
GlitchMr It reminds me Python's lambda keyword... except more simple to use. 16:03
And less flexible, but if you want flexibility there is sub {} and -> {}
And of course, $^a
TimToady nr: gist.github.com/2847343 16:05
p6eval rakudo 50b77f: OUTPUT«Cannot call 'push'; none of these signatures match:␤:(Any:U \$self, *@values, Mu *%_)␤␤ in method push at src/gen/CORE.setting:1169␤ in block <anon> at /tmp/0067Ejdx1Q:6␤ in method reify at src/gen/CORE.setting:5045␤ in method reify at src/gen/CORE.setting:4940…
..niecza v18-2-gea3d97a: OUTPUT«[[1, 2], [], [3, 4]]␤[[1, 3], [], [2, 4]]␤[[1, 4], [], [2, 3]]␤[[2, 3], [], [1, 4]]␤[[2, 4], [], [1, 3]]␤[[3, 4], [], [1, 2]]␤»
GlitchMr niecza: paste.uk.to/52dd9a4d
p6eval niecza v18-2-gea3d97a: OUTPUT«===SORRY!===␤␤Confused at /tmp/vRp9bOTtNq line 1:␤------> http⏏://paste.uk.to/52dd9a4d␤␤Undeclared routine:␤ 'http' used at line 1␤␤Parse failed␤␤»
GlitchMr ok, expected :P
It's not possible to implement every single pastebin ever invented 16:06
dalek kudo/nom: 6365270 | jnthn++ | src/core/operators.pm:
Make let/temp cope sanely with temp'ing/let'ing the same variable twice.
16:07
pmichaud afk, errands 16:08
16:08 fgomez left
dalek ast: 38cc5b7 | diakopter++ | S04-blocks-and-statements/temp.t:
test recursive nested and multiple temps; rakudo will need these fudged unless jnthn++ fixes them soon
16:08
ast: c3b1c0e | diakopter++ | / (3 files):
Merge branch 'master' of git://github.com/perl6/roast
ast: 4f873a6 | diakopter++ | S04-blocks-and-statements/temp.t:
increment plan twice
16:09
diakopter rn: gist.github.com/2853248 16:11
p6eval niecza v18-2-gea3d97a: OUTPUT«ok 1 - recursive nested temps are restored properly␤ok 2 - multiple temps in the same scope are restored properly␤»
..rakudo 50b77f: OUTPUT«not ok 1 - recursive nested temps are restored properly␤# got: '3'␤# expected: '1'␤not ok 2 - multiple temps in the same scope are restored properly␤# got: '2'␤# expected: '1'␤»
16:12 jaldhar left 16:15 fgomez joined 16:17 GlitchMr left, replore_ left 16:20 aesundstrom joined
diakopter moritz++ nr|rn 16:22
16:25 spider-mario joined 16:26 Vlavv_ joined 16:30 aesundstrom left
TimToady diakopter: jnthn's patch appears to fix test 2 but not test 1 16:38
diakopter oh 16:40
16:40 daxim left
jnthn They're separate issues. 16:41
I suspect the recursion one is actually about LEAVE phasers more generally too.
16:53 not_gerd joined
not_gerd jnthn: my cleanup branch got finally merged, so no mor --intval="long long" on Windows 16:54
jnthn \o/ 16:57
not_gerd++
17:02 spaceships joined
JimmyZ not_gerd++ indeed 17:03
not_gerd JimmyZ++ for making the merge happen 17:04
JimmyZ github++, click merge button is very easy :P 17:05
17:07 JimmyZ left 17:16 Chillance joined
sorear good * #perl6 17:30
phenny sorear: 05:47Z <diakopter> ask sorear try n: ++temp .say
17:30 majrmovies joined 17:31 brrt joined
pmichaud back from errands, lunch 17:32
dalek kudo/qrpa: e2a9ed3 | pmichaud++ | src/core/List.pm:
Switch List.gimme to initialize $!items with QRPA.
17:33
kudo/qrpa: 4fc8fa0 | pmichaud++ | src/core/Parcel.pm:
Use nqp::shift($rpa) instead of $rpa.shift().
17:34
17:43 colomon joined
sorear o/ colomon, majrmovies 17:44
colomon \o
sorear: what do you think of the idea of a Mu.take method? 17:49
dalek p/altnfa: 32d6a49 | jnthn++ | src/QRegex/P6Regex/Actions.nqp:
Start saving per-alternation NFAs.
17:50
p/altnfa: 1aa896e | jnthn++ | src/QRegex/NFA.nqp:
Split merging part of mergesubrules out into mergesubstates.
p/altnfa: 72fc431 | jnthn++ | src/QRegex/Cursor.nqp:
Sketch out alternation NFA running.
sorear colomon: it's a little strange to have Mu.take but not Mu.return 17:52
17:52 birdwindupbird joined
sorear colomon: but I see nothing technically wrong with it 17:52
colomon sorear: logical, but I fear it just means even more Mu methods! ;)
sorear Mu methods are cheap 17:53
colomon easy to implement, for sure, but they do pollute the entire P6 class namespace once they are there. 17:54
17:55 kaare_ joined
sorear so do Cool and Any methods, and we have a million of those. 17:56
colomon Cool methods only pollute cool classes; by default user-defined classes don't get them.
sorear: btw, what's your take on Mu.take-rw? (It's not implemented or spec'd anywhere so far as I know.) 17:57
actually, gotta go for a few minutes, but will backlog
17:58 colomon left
sorear Also not technically problematic. 17:58
18:05 majrmovies left
pmichaud down to two failing spectest files, both likely due to changes in nom not folded into the qrpa branch. 18:08
18:08 colomon joined, majrmovies joined
dalek kudo/qrpa: 80d406d | pmichaud++ | src/ (3 files):
QRPA: Update binder to know about QRPA as well as RPA.

now to spread it more widely throughout List and ListIter and see if anything breaks.
18:10
awwaiid pmichaud++ # failing (less) spectests ftw
18:16 am0c joined 18:17 mtk left, thou left
dalek kudo/qrpa: 2ef6948 | pmichaud++ | src/core/List (2 files):
Migrate more nqp::list -> nqp::qlist for testing.
18:20
ecs: 8f29a46 | diakopter++ | S02-bits.pod:
5
18:22
18:23 thou joined 18:27 mtk joined 18:28 thou left 18:31 adu joined 18:33 thou joined 18:34 cognominal left 18:35 cognominal joined
dalek p/altnfa: 51c3726 | jnthn++ | src/ops/nqp.ops:
Add an op for pushing a label onto a label stack.
18:38
p/altnfa: fbb1811 | jnthn++ | src/QRegex/Cursor.nqp:
Use NFA run results to push marks for possible branches onto the bstack.
p/altnfa: c774ec8 | jnthn++ | src/QAST/Compiler.nqp:
Update QAST::Compiler's alt handling to use LTM. The NQP it builds will actually parse enough to try an 'aa' ~~ /a|\w+/ style example and get it right! However, it chokes right after a semicolon...thus failing all the tests.
18:38 cognominal left 18:40 cognominal joined
brrt or, how do i call a VTABLE something on a PMC? 18:40
because i can call methods
18:41 thou left
sorear channel? 18:41
brrt very much so
sorry :-)
pmichaud huh. Just switching to use qrpa makes things a bit slower (0.05sec on $N == 100000) than before 18:44
that's.... a little surprising. maybe something pathological going on somewhere
pmichaud tries with $N == 1000000 18:45
jnthn That's a little surprising.
pmichaud yes, for $N == 1000000 I get 13.278 (nom) versus 13.964 (qrpa) 18:46
18:46 thou joined
pmichaud yeah, the more things I convert to QRPA, the slower the 1..1000000 test gets. Something must be slowing things down somewhere. 18:56
I wonder if it's the GET_ATTR_* stuff being slower
18:58 snearch left
pmichaud or maybe new $P0, "QRPA" takes significantly longer than new $P0, "ResizablePMCArray" 18:58
18:59 alester joined
pmichaud new $P0, "QRPA" seems faster than new $P0, "ResizablePMCArray" 19:02
(about 3%)
so....
get_pmc_keyed(_int) is slower 19:03
that would explain it. 19:04
19:06 not_gerd left 19:22 thou left 19:23 kaare_ left 19:28 thou joined
pmichaud gist.github.com/2854610 # get_pmc_keyed_int speed, qrpa versus rpa 19:32
now to figure out why
jnthn back 19:36
r: say 0.3 / 0.42 19:37
p6eval rakudo 636527: OUTPUT«0.714286␤»
pmichaud gist.github.com/2854662 # qrpa code 19:39
gist.github.com/2854676 # rpa code
I'm thinking it _has_ to be the GET_ATTR_* that slows things down :-/ 19:41
jnthn I...right.
But that's easy to circumvent.
pmichaud well, in this case, yes. :)
jnthn At the start just do
pmichaud are we using GET_ATTR_* in some of our other classes?
s/classes/PMCs?
jnthn Parrot_QRPA_attributes *stuff = PARROT_QRPA(SELF);
And then look at stuff
Probably
Though they probably ain't so hot-path as this. 19:42
pmichaud we might want to adjust those too, if there's a 33% performance difference to be had
jnthn True.
Hm. LexPad/LexInfo. :)
pmichaud exactly what I was thinking.
anyway, let me adjust this and see if I get the performance back, first :)
diakopter sorry for the dumb/naive question - why are they ATTR? does that just make them end up being a part of a struct? 19:43
pmichaud well, not "just"
jnthn diakopter: It checks if we're really look at an object subclass of a PMC and then delegates to getattribute or something if so...
In the common case it's just overhead of flag checking. 19:44
pmichaud ...but that overhead seems overbroad here
jnthn Plus we're doing more pointer chasing than we need to, probably.
pmichaud: You're paying for it 3 times, in an otherwise rather cheap routine.
pmichaud jnthn: yeah, I guess so. 19:45
afk for a bit
diakopter surely there's a way to get at the attribute without going through those checks 19:46
pmichaud diakopter: yes, what jnthn++ posted above. But that doesn't work for inherited PMC types
jnthn diakopter: Yes, that's what I just suggested :)
pmichaud however, I don't expect anything to inherit from QRPA, so I'll remove the checks.
jnthn pmichaud: We're never gonna inherit from this using Parrot's inheritance. :)
pmichaud: And if we were, how would storing a pointer to a C array ever work out? 19:47
diakopter I wasn't suggesting the idea; I knew that jnthn already suggested it. I was wondering whether there was already a facility in parrot for doing so.
pmichaud diakopter: well, the PARROT_QRPA(self) is provided by Parrot.
so then I can just do stuff->elems, stuff->start, etc. 19:48
and PARROT_QRPA(self) is also quite cheap.
diakopter oh
pmichaud anyway, afk and I'll adjust things when I get back. 19:49
diakopter jnthn: the semicolon thing is weird 19:52
jnthn Ain't it just...
Well, comparing --rxtrace of the new and old is interesting :) 19:56
19:57 brrt left
jnthn Firstly because we eliminate a few more choices earlier on 19:57
But for debugging this mostly because master in eat_terminator doesn't end up calling terminator, and altnfa does.
oh. 19:58
terminator doesn't parse a ;, it just checks we are before one. 19:59
diakopter but eat_terminator eats one
jnthn Did when we considered the branches in order. 20:00
diakopter oh yeah.
jnthn We're meant to tie-break on that though...
oh, I get I'm not... 20:01
*bet
jnthn tries something
20:03 Teratogen left
diakopter the ? in eat_terminator and those in terminator: are redundant 20:03
jnthn I think they're deliberate 20:04
Oh, I see what you mean...
We only need one of them.
diakopter (not that that would cause the problem)
jnthn Right
diakopter std has <?before ')' | ']' | '}' >
it doesn't have a ?; 20:05
it must be getting MARKED 20:08
eh
in !alt_nfa 20:13
why is the increment $fate line before the next line
jnthn diakopter: Following what happens in !protoregex_nfa 20:15
20:15 fibo joined 20:16 thou left
jnthn ah, what the heck... 20:18
Calling value
Pushing fate 14140840 - 1
...the same branch twice? o.O
20:21 thou joined
geekosaur so wants to read that as "tempting fate..." 20:22
pmichaud okay, so now I have 20:24
gist.github.com/2854928 # new get_pmc_keyed_int for QRPA
and with that code I get 20:25
gist.github.com/2854930
:-(
diakopter jnthn: try this: gist.github.com/2854944 20:26
jnthn r: say 0.32 / 0.41 20:27
p6eval rakudo 636527: OUTPUT«0.780488␤»
jnthn Hm. No real improvement...
20:28 thou left
pmichaud which tells me that the speed loss must be from something like dispatch to a dynpmc, or.... I dunno. 20:28
jnthn That seems strange.
I mean, I can't imagine why the dispatch to a v-table would be any slower.
jnthn guesses it can't be any difference in optimization level when compiling... 20:29
pmichaud I can't either. I can't imagine any reason that there'd be a 33% difference between the two.
oh, wait
maybe
jnthn I was gonna ask what GC marking looks like, but just saw it...looks fine.
pmichaud my minimum allocation might be too small 20:30
just a sec
diakopter jnthn: note the example I gave
pmichaud (also doesn't seem likely, but perhaps it's a alignment issue, or ... I dunno.)
also, both of these arrays have exactly one element 20:31
pmichaud@kiwi:~/p6/rakudo-qrpa$ make dynext/perl6_group.so && install/bin/parrot z.pir 20:32
jnthn diakopter: yeah but the NQP I get out ain't good enough to compile it...so I'd have to run the stage 1 on it...trying to fathom what on earth is going on with the NFA for value at the moment though...
pmichaud make: `dynext/perl6_group.so' is up to date.
qrpa[$I0] = 0.459558010101318 rpa[$I0] = 0.304605960845947
diakopter jnthn: mine compiles it
20:33 thou joined
jnthn pmichaud: Is it really re-building each time there? 20:35
jnthn notes the "is up to date"
Doesn't that normally mean "I did nothing"?
pmichaud I just re-ran it a second time.
yes, it was compiled correctly.
jnthn OK.
pmichaud gist.github.com/2854999 # the full compile and results 20:36
diakopter jnthn: your nqp won't run my gist?
20:37 skids left
jnthn diakopter: No, due to local patches 20:37
diakopter ohh; it reproduces the problem just fine in mine from that branch
jnthn: commenting out the ; line in terminator: makes nqp pass the whole test suite except 1 file 20:39
jnthn diakopter: Which line exactly 20:40
?
The
| ';'
one?
diakopter no
the ; in terminator:
token terminator:sym<;> { <?[;]> }
to make it more like std
and it parses most of the one file it fails on 20:41
20:41 PacoAir left
diakopter I think that indicates it's a problem with <? 20:42
jnthn No, I think the problem is tie-breaking fail 20:44
The <?terminator> and ';' have equal length prefixes. 20:45
diakopter <?terminator>'s prefix should be the empty string
jnthn But ';' should win by two different tie-breaking rules.
I don't think it works like that. A zero-width assertion counts, but terminates LTM beyond it. 20:46
The ; literal, however, should win by virtue of (a) being first, but also (b) by being a longer *literal* prefix. 20:47
diakopter it doesn't make sense to me that a zero-width assertion like <? would count what it sees 20:48
pmichaud consider / <?[abc]> . /
you definitely want the [abc] to be part of the ltm
if it doesn't count at all, then you get no benefit 20:49
20:49 BlueT_ joined 20:50 thou left
diakopter jnthn: this is interesting. the outcome differs depending on whether I add --rxtrace 20:56
20:56 thou joined
pmichaud if there's an unbroken tie, different results can occur just depending on hash entry ordering (i.e., somewhat random) 20:57
jnthn oh, I think it is getting ordering right already for tie-breaking...
diakopter pmichaud: someday you'll want to look at the mess I made of quant in NFA.nqp and do it right.. 21:00
21:01 thou left
diakopter although I fiddled with it for many hours trying to make it more eficient and/or written more elegantly. any change I made would break some rakudo test somewhere, surprisingly. 21:01
pmichaud diakopter: okay, I'll take a look sometime 21:02
jnthn: think the qpra slowness might be related to Parrot hll segregation somehow? (e.g., hll_map and friends?) 21:04
21:05 bruges joined
jnthn pmichaud: hll_map would only have an effect when you create a new instance, iirc. 21:05
pmichaud yeah, I'm grasping at straws here a bit
21:06 birdwindupbird left
jnthn My profiler ain't crazily informative. 21:08
21:08 thou joined
jnthn oh, I don't have your other changes here, mind. 21:09
ah, they ain't pushed
Oddly though, it puts a bunch of the cost on pmichaud@kiwi:~/p6/rakudo-qrpa$ cat z.pir
.loadlib 'perl6_group'
.sub 'main' :main
.local int N 21:10
.local num t0, t1
.local pmc p, q
p = new "ResizablePMCArray"
q = new "QRPA"
$P0 = box 'abc'
$I0 = 0
p[$I0] = $P0
q[$I0] = $P0
N = 10000000
arrrgh"!
It puts a bunch of the cost on:
return slots[start + pos];
Like, 10% of runtime on the one line
diakopter what about on the same line in RPMCA 21:11
pmichaud I can test it without the + 21:12
jnthn The inclusive samples found in the profiler shows the same kinda difference as we're measuring in wallclock time. 21:13
diakopter pmichaud: if you double N in your test, do the times double? 21:14
jnthn oh, this profile doesn't really pikc out the line with + one either
It does pick out GETATTR_QRPA_elems(interp, _self, elems); though 21:15
pmichaud pmichaud@kiwi:~/p6/rakudo-qrpa$ make dynext/perl6_group.so && install/bin/parrot z.pir
make: `dynext/perl6_group.so' is up to date.
qrpa[$I0] = 0.826143980026245 rpa[$I0] = 0.635416030883789
yes, the times double.
oh, and this one is *without* the cost of the addition 21:16
i.e.
return qrpa->slots[pos];
(assuming that qrpa->start is zero, which it should be in this test)
I'll fix the PMC code and push 21:17
dalek kudo/qrpa: 138fcb2 | pmichaud++ | src/pmc/qrpa.pmc:
QRPA: Try to make get_pmc_keyed_int as fast as RPA's, fail so far.
21:18
jnthn pmichaud: OK, I'm confused... 21:19
I just did a patch locally and managed to get my profiler to show 'em equal
21:19 bacek left
jnthn Well, within 5% or so of each other anyway 21:19
gist.github.com/2855195 21:20
Hm, your patch looks...just the same.
pmichaud: Crazy. My patch and your seemingly identical one make different amounts of difference. 21:21
I'd have thought yours was better... 21:22
pmichaud rpa[$I0] = 0.61777400970459
qrpa[$I0] = 0.821776866912842
(after reversing them)
jnthn: can I see your patch, ooc?
jnthn gisted it several lines ago :) 21:23
< jnthn> gist.github.com/2855195
pmichaud yeah, our patches look the same to me
jnthn Semantically
Mine reads all of the things from the struct together at the top
I wonder if that hits better with the cache, or there's some multi-word copy that can happen, or something... 21:24
Or just pre-fetching.
But you'd tend to think they'd all be on one cache line...
diakopter is the order of ->elems ->start ->slots relevant? 21:25
21:25 Telgalizer joined
jnthn is curious if pmichaud gets closer results with his patch 21:26
diakopter: ordering stuff in a struct can matter...but normally to get related stuff on a single cache line 21:27
pmichaud I can try it with the cache, yes. Although RPA doesn't do any such ordering/caching.
i.e, RPA does the fetches in the middle of the function, not all-at-beginning
jnthn pmichaud: Yeah...it's a bit of a mystery. 21:29
pmichaud gist.github.com/2855237 # with this version, I get 21:30
gist.github.com/2855240 21:31
jnthn r: say 0.64 / 0.78
p6eval rakudo 636527: OUTPUT«0.820513␤»
jnthn :S
pmichaud re-running it again gives
rpa[$I0] = 0.714040040969849
qrpa[$I0] = 0.879395961761475
jnthn Closer but still dunno if it's noise...
r: say 0.71 / 0.88
diakopter you can put the 2nd comparison of pos with 0 inside the block of the first comparison 21:32
p6eval rakudo 636527: OUTPUT«0.806818␤»
pmichaud it doesn't seem like noise. qrpa is consistently slower than rpa
jnthn pmichaud: No, I mean the difference between my patch and your one.
pmichaud oh, yeah.
that's probably noise-ish.
jnthn pmichaud: On a slightly different topic: after we match an alternation, do I need to clear the backtracking stack of the things I pushed? 21:33
diakopter the second comparison can only be true if the first comparison was true
jnthn pmichaud: 'cus I'm not and I'm wondering if that's having...consequences...
pmichaud diakopter: yes, that's a good point but I was also following the structure of the RPA code there
jnthn: you clear the backtracking if ratcheting is on
jnthn pmichaud: OK, and if I am failing to do so...I may get oddnes? :)
pmichaud i.e., you need a mark_commit
jnthn After the end label of the alternation, yes? 21:34
pmichaud yes
(mark_commit clears backtracking up to a known mark point)
diakopter pmichaud: maybe qrpa is 20-30% slower for accesses but loads faster for shift/unshift/pop/push
jnthn ah, so I push a mark before any alternation work, then mark_commit after... 21:35
pmichaud so, you keep track of the first mark you push, and mark_commit to that mark when you exit the alternation
or yes, you can push a mark rather than keep track of the first one
mark_commit discards backtracking up to a mark, but keeps any captures that may have occurred
jnthn Well, we don't always know the first one, 'cus that's what the LTM is dynamically deciding :) 21:36
diakopter pmichaud: also, the third comparison (pos >= elems) can be put in an else block of the first comparison
but you have tested negative accesses. :)
pmichaud diakopter: also a good point, I'm still wondering why the difference though. 21:37
I'll try those changes and see if they affect the timing.
with those changes 21:39
rpa[$I0] = 0.643483877182007
qrpa[$I0] = 0.770877122879028
:-(
diakopter: I suspect that qrpa is loads faster for shift/unshift/pop/push. But since get_pmc_keyed_int is *the* most common operation on any of our arrays (by far more common than the others).... well, it seems like fixing the 25% problem is pretty high priority first before going that path 21:40
diakopter is get_pmc_keyed_int dispatched any differently for non-built-in pmcs? 21:41
jnthn Shouldn't be...it's just a call thorugh a function pointer, afaik 21:42
pmichaud yes, this is all very disappointing somehow :-| 21:44
21:45 fibo left
jnthn is running out of guesses 21:45
21:47 b1rkh0ff left
PerlJam stubbornly clings to his extra deref idea. 21:47
jnthn Unless it really is just calling across the compilation unit boundary. 21:48
pmichaud PerlJam: I think the number of derefs is effectively the same between the two.
21:48 am0c left
jnthn www.gentoo.org/proj/en/hardened/pic-guide.xml 21:48
PerlJam jnthn: is there a way to test that? Just make QRPA built-in?
21:48 anon___ joined
pmichaud oh, I suppose I could try it in pure parrot, yes. 21:49
that would be interesting.
and not hard.
brb, need dp
diakopter mmm in Texas you can get cane sugar Dr. Pepper
so much better. 21:50
I haven't had that in 10 years
pmichaud indeed we can and do. And I live about 3 miles from Dr Pepper HQ 21:51
goo.gl/maps/Aw8d :-) 21:52
21:56 jtpalmer joined 21:59 anon___ left, b1rkh0ff joined 22:02 Gothmog_ joined
pmichaud oh! perhaps the headerizer makes a difference here somewhere? 22:12
rpa has been headerized, qrpa hasn't (afaik)
jnthn hmmm 22:14
It adds a bunch of annotations.
pmichaud I'm wondering if those annotations tell gcc about optimization possibilities (or prevent certain checks)
anyway, that's another difference between the two 22:15
jnthn .u 119 104 105
phenny jnthn: Sorry, no results for '119 104 105'.
jnthn oops
22:28 thou left
diakopter pmichaud: did you try building parrot with qrpa as part of its built-ins? 22:33
22:34 thou joined 22:36 whiteknight joined, fridim_ joined, majrmovies left, whiteknight is now known as Guest67605 22:37 mdmkolbe joined
dalek p/altnfa: ddf6d6b | jnthn++ | src/NQP/Grammar.pm:
eat_terminator needs sequential alternation (STD has it that way too; vaguely reassuring that we also need it now we have LTM for alternations).
22:45
p/altnfa: bb0350f | jnthn++ | src/QAST/Compiler.nqp:
Don't leave leftovers on the bstack after an alternation.
p/altnfa: dc8561c | jnthn++ | src/QRegex/ (2 files):
We sometimes accidentally lost alternation branches if we could not build an NFA for them. Make sure we don't do this.
sergot good night! o/ 22:46
22:46 sergot left 22:48 adu left 22:51 skids joined, alester left
pmichaud diakopter: I'm going to add qrpa to parrot and see what happens; haven't done that yet and may be leaving shortly for the evening 22:55
but yes, I'll do that next.
jnthn pmichaud: NQP passes all t/nqp now with altnfa 22:56
pmichaud: A copule of tests in t/qregex fail but I think they may be wrong
pmichaud jnthn: that's entirely possible
spider-mario what is that branch supposed to improve?
I don’t know much about nqp :/ 22:57
pmichaud spider-mario: it gets alternations to use "real" ltm semantics
spider-mario ok :)
pmichaud previously the regex engine would not recognize that a | aaa should prefer 'aaa' over 'a'
spider-mario oh
thanks 22:58
pmichaud jnthn++ # altnfa branch working 22:59
diakopter jnthn++
spider-mario jnthn++
jnthn in NQP now, for example: 23:03
> say('aa' ~~ /a|\w+/)
aa
> say('aa' ~~ /\w+|a/) 23:04
aa
...not cheating ;)
diakopter nr: my $b = 4; repeat while $b-- { $^a.defined } 23:12
p6eval niecza v18-2-gea3d97a: OUTPUT«Unhandled exception: No value in ANON available for parameter $a␤ at /tmp/h66JwHxDX8 line 1 (mainline @ 6) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3911 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3912 (module-CORE @ 558) ␤ at /home/…
..rakudo 636527: ( no output )
diakopter jnthn: which do you deem correct, so I can fudge the proper one
commute to coffeeshop& 23:14
spider-mario good night \o 23:15
23:15 spider-mario left
pmichaud I'll keep the discussion mainly on #parrot for now, but when qrpa is compiled into parrot as a builtin, I get 23:16
rpa[$I0] = 0.658792972564697
qrpa[$I0] = 0.609246969223022
jnthn whoa 23:17
pmichaud so, it looks like something related to dynpmc may be the culprit.
I'll create a dynpmc version of qrpa in my parrot repo and then we can test the three side-by-side
but that will have to be later or tomorrow --w e're going out for the evening here. bbl
jnthn pmichaud++
Have a nice evening o/
dalek kudo/altnfa: f335c7f | jnthn++ | src/Perl6/Grammar.pm:
Update a couple of places in the grammar that need || insted of |.
23:18
kudo/altnfa: fb45990 | jnthn++ | src/Perl6/Grammar.pm:
Add ident so we can LTM on it.
jnthn I've had enough for now, but that branch needs some work. 23:19
Current failure is line 80 of CORE.setting compilation. It chooses the wrong branch in variable, it seems. 23:20
(token variable, that is)
23:22 spaceships left, spaceships joined 23:25 fridim_ left
diakopter goes to work on altnfa 23:39
jnthn goes to bed 23:43
'ngiht o/
diakopter o/
23:45 stephenlb joined
diakopter hrm. compiling CORE.setting is taking forever. probably looping. 23:48
PerlJam CORE.setting always takes forever 23:51
diakopter not this long
starting it over ,timing it this time 23:52
it's worrisome b/c jnthn said it fails on line 80 of CORE.setting, but surely it gets past line 80 in 5 minutes 23:57