»ö« 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.
00:01 leont left 00:03 Vlavv left
jnthn 'night, #perl6 00:05
ruoso night jnthn
00:11 ggoebel left 00:22 benabik left 00:27 benabik joined 00:41 dayangkun joined 00:44 BenGoldberg left 01:00 markov left 01:01 markov joined 01:04 kriptik joined
kriptik i'm looking forward to learn perl6, can anyone tell me what would be a perfect usecase to experiance the language power 01:05
ruoso text parsing using grammars would be my suggestion 01:07
timotimo indeed. the simplicity by which a grammar and an actions class construct useful data structures from your input data is quite an awesome thing to behold 01:09
of course if your input format is sufficiently insane, the simplicity gets kind of lost in the shuffle 01:10
kriptik thnx, any super awesome tutorial out there i should check out for that/ 01:11
?
timotimo i thought the perl6 book was okay, but it really depends on what your background is 01:12
there's a few things the perl6 book didn't explain. ("why is there suddenly a colon here?")
that's probably because i hadn't written a single line of perl5 yet 01:13
kriptik i did some perl5 using dancer then switched back to ruby/sinatra
timotimo one resource that i found super nice was the advent calendar posts on perl6advent.wordpress.com, but that's more like an appetizer than an introduction or tutorial text
we have a dancer-alike called Bailador, you can check that and other modules out on modules.perl6.org 01:18
otherwise asking questions here is always okay; right about now most people are asleep, though
kriptik thanks timotimo, i didnt know that bailador was perl6 01:20
is it plack compatible?
timotimo unfortunately i don't know anything about web app development. i only did some django a few years back
kriptik you use perl6 for? 01:21
timotimo uh ... experimenting, learning, hacking the compiler ;)
kriptik hacking the compiler, please explain :)
timotimo i contribute little things to rakudo itself
kriptik what is rakudo?
timotimo fixing low hanging fruit bugs for example 01:22
rakudo is our current "main" implementation of perl6
kriptik i like that experession low hanging fruit bugs :)
nice
timotimo hah, i didn't think of the two running together yet
kriptik so what do you like most about perl6 01:23
timotimo i was drawn to perl6 for its type system and object system
after running into too much trouble writing a kind of big framework in python, i needed something to complain at compile time when i'm doing obvious type errors 01:24
kriptik python is complied language?
timotimo more or less 01:25
it's bytecode compiled, but there is no compile-time type checking
but really all the other aspects are really interesting to me: the way functional programming flows so seamlessly into most other concepts, the short and expressive syntax that has gained so much readability compared to perl5 (the rules syntax for grammars is so super nice) and all the other stuff
and perl6 has what masak likes to call "strange consistencies"; concepts that pop up in many places; it's all connected, like a conspiracy theorist would claim 01:26
kriptik hmm, i never understood these stuff, i hope i will soon. thats what drawn me into perl 6 and ruby 2, i wanna know which one would be faster or even use a low level web api like rake or plack based on the language... i am kinda of an ultimate tool freak seeker, i know its pointless still i can't help it 01:27
timotimo oh, you want execution speed? :|
kriptik perl6 is fast right?
timotimo it can be
kriptik no wait, i thought it will be faster than perl5 01:28
timotimo niecza is very fast compared to rakudo, but niecza lacks a bunch of features
kriptik hmm, niecza is...?
timotimo another perl6 implementation, that one runs on .net and mono
kriptik i wouldnt use a .net framework or mono 01:29
is there such a thing as perl virtual machine
timotimo rakudo is currently being ported to the JVM, we are hoping for good speed improvements there. after that comes a new VM that is custom made for perl6 01:30
parrot used to be that, and rakudo runs on that
kriptik yeah i came accross parrot
timotimo but sadly it isn't very fast
kriptik compared to...?
timotimo niecza, if you want to compare it to other perl6 implementations 01:31
dalek rl6-roast-data: 0b38e01 | coke++ | / (5 files):
today (automated commit)
timotimo you can definitely get speed improvements when you use natively typed variables (int, str and num instead of Int, Str and Num), but it only gets you so far.
flussence Parrot's performance is comparable to the Javascript engine on a ~15 year old browser 01:32
timotimo in the next few days, we'll get compile-time inlining for some sub calls for the JVM; i'm hoping for a decent speed boost from that alone, but we won't be faster than perl5 for complicated tasks so soon. 01:33
sadly, i've been toying around with pypy before i came to perl6; the speed difference is crazy 01:34
anyway, rakudo is definitely still in the "make it work" phase, the real "make it fast" phase is yet to come 01:35
and with good compile-time analysis at our disposal, i think we'll get to very nice places indeed.
01:36 xinming left 01:38 xinming joined, raiph joined
ruoso r: sub foo { CONTROL { say "Inside CONTROL!" }; return "bar" }; say foo(); 01:45
camelia rakudo 8d851b: OUTPUT«bar␤»
ruoso wasn't "Inside CONTROL!" supposed to be printed above as well?
01:45 xinming left 01:47 colomon joined
timotimo r: sub test { sub foo { CONTROL { say "Inside CONTROL!" }; return "bar" }; say foo(); CONTROL { say "outside control!" } }; test; 01:47
camelia rakudo 8d851b: OUTPUT«bar␤»
timotimo doesn't know about CONTROL
r: sub test { sub foo { CONTROL { say "Inside CONTROL!" }; note "something"; return "bar" }; say foo(); CONTROL { say "outside control!" } }; test;
camelia rakudo 8d851b: OUTPUT«something␤bar␤»
01:47 xinming joined
timotimo r: sub test { sub foo { CONTROL { say "Inside CONTROL!" }; warn "something"; return "bar" }; say foo(); CONTROL { say "outside control!" } }; test; 01:48
camelia rakudo 8d851b: OUTPUT«Inside CONTROL!␤outside control!␤something in sub foo at /tmp/j9RkIWYtwk:1␤␤bar␤»
timotimo seems like return control exceptions don't fire yet?
ruoso I am slightly confused about how "next/last" is currently implemented. It was my understanding that they would be control exceptions, but there is no QAST nodes that create the CONTROL catching, so next/last are probably just hacked in right now 01:51
timotimo look at MapIter 01:52
it has an nqp::handle thing for LAST, REDO and NEXT
ruoso yeah, but that is not what is called from the Actions 01:54
timotimo can you elaborate? if you have a for loop you get a MapIter that gets sunk, don't you?
ruoso I am looking at Actions.nqp around line 988 01:55
I don't see MapIter being created at those points
timotimo did you look at tweak_loop? 01:56
at least it reacts to NEXT, FIRST and LAST phasers 01:57
ruoso yes, but phasers are a different thing altogether
timotimo OK
well, at least the for loop gets these control exception thingies from a call to "map" which creates a MapIter 01:58
ruoso for instance statement_control:sym<loop> doesn't even mention map, it goes straight for the while op
timotimo right, i was looking for that op, is that an nqp op? 01:59
yes, it seems to be
ruoso and I only see parrot-specific references to NEXT/LAST as control exceptions in MapIter.pm 02:00
(which may explain why it works in parrot and fails in the jvm)
r: say gather loop { take 1; last }
camelia rakudo 8d851b: OUTPUT«1␤»
timotimo mhm, could be
unfortunately i don't know more :( 02:01
and i'm late for bed yet again ;)
ruoso :)
timotimo good luck! and good luck to you too, kriptik
02:03 ggoebel joined 02:19 xinming left 02:20 xinming joined 02:25 arcterus joined 02:30 ggoebel left
kriptik thanks timotimo, appreciate your insights, saved me time 02:43
02:43 fred_ joined, fred_ is now known as Guest5573 02:44 Guest5573 left 02:47 raiph left 02:54 raiph joined 02:58 PacoAir left 03:07 arcterus left 03:21 xinming left 03:23 xinming joined
diakopter sorear: ping 03:39
03:44 preflex_ joined, ChanServ sets mode: +v preflex_, preflex left, preflex_ is now known as preflex 03:46 zacts left
sorear diakopter: pong 03:52
04:02 raiph left 04:05 ivan``_ left 04:07 ivan`` joined 04:08 raiph joined 04:14 ivan`` left
lizmat good *, #perl6! 04:18
04:19 colomon left 04:25 zacts joined 04:38 ivan`` joined 04:44 celesta left 04:49 birdwindupbird joined 04:52 zacts left 04:56 raiph left 04:58 crab2313 joined
moritz \o * 05:02
lizmat moritz /o!
05:05 arcterus joined 05:10 arcterus left 05:12 dayangkun left
lizmat colomon: I started integrating Set/Bag changes from Niecza, but am now blocking on naming special operators like ⊆,∈,∋,∪ to texan. Suggestions? 05:13
.tell colomon I started integrating Set/Bag changes from Niecza, but am now blocking on naming special operators like ⊆,∈,∋,∪ to texan. Suggestions?
yoleaux lizmat: I'll pass your message to colomon.
preflex yoleaux: you have 1 new message. '/msg preflex messages' to read it.
JimmyZ lizmat: you want use E, U temporarily ? 05:15
lizmat well, I could, but what about ∋ ⊆ ∅ 05:16
ø I guess for ∅
I mean, is there an official -> texan translation for these ?
.u -
yoleaux U+002D HYPHEN-MINUS [Pd] (-)
lizmat .u - 05:17
yoleaux U+002D HYPHEN-MINUS [Pd] (-)
JimmyZ 05:18
lizmat gee, that's a real minus
JimmyZ
lizmat JimmyZ: colomon warned against using any non-texan for these, as it will make parsing the setting 4x as slow
JimmyZ yes
lizmat I'm frustrated enough with building a core setting taking 5 minutes or so already
05:19 crab2313 left
JimmyZ I spent all my time to compile NQP this morning after every small code modification 05:20
:(
05:24 fridim_ left
lizmat ok, I was exaggerating: it is real3m51.304s 05:25
JimmyZ Stage post : 16101.782 05:26
this one it was when I compile it with 1GB memory 05:27
on Parrot
lizmat 4.5 hours ? 05:28
wow
JimmyZ yeah
sorear hey
benabik 1GB = many swapping
sorear .c ⊆
yoleaux sorear: Sorry, no results!
JimmyZ benabik: yeah
sorear .u ⊆
yoleaux U+2286 SUBSET OF OR EQUAL TO [Sm] (⊆)
lizmat JimmyZ: indeed… no way to get more memory ? 05:29
sorear does sub infix:["\c[SUBSET OF OR EQUAL TO]"] work ?
because 1. it should if I'm remembering the spec correctly 2. it will fix the slowness if I'm remembering the etiology correctly
JimmyZ lizmat: no... I was on linode server
lizmat $ perl6 -e 'sub infix:["\c[SUBSET OF OR EQUAL TO]"]' 05:30
===SORRY!===
No such method 'ast' for invocant of type 'NQPMu'
sorear JimmyZ: that's why I started niecza
lizmat but that could be because I don't have icu
sorear could also be the lack of a signature and a body
r: sub infix:["z"]($x,$y) { say $x }; 3 z 4 05:31
camelia rakudo 8d851b: OUTPUT«===SORRY!===␤No such method 'ast' for invocant of type 'NQPMu'␤»
JimmyZ sorear: :-)
sorear or, it could be a real bug
r: sub infix:<<z>>($x,$y) { say $x }; 3 z 4
camelia rakudo 8d851b: OUTPUT«3␤»
sorear r: sub infix:<<\x2286>>($x,$y) { say $x }; 3 ⊆ 4
camelia rakudo 8d851b: OUTPUT«3␤»
sorear try that
lizmat will do 05:32
$ perl6 -e 'sub infix:<<\x2286>>($x,$y) { say $x }; 3 ⊆ 4'
===SORRY!===
Two terms in a row
infix:<<\x2286>>($x,$y) { say $x }; 3 ⏏â 05:33
hmmmm….
sorear basically, parsing turns into molasses because the parser does a lot of indexing into strings
parrot without ICU supports only utf8 and latin1 as encodings
lizmat I consider it molassy enough as it is 05:34
sorear if you include literal non-latin1 characters in CORE.setting, the setting is a unicode string, and indexing goes quadratic
lizmat I guess this applies to *any* source code: it's just worse because the setting is so large, right|?
sorear JimmyZ: you could try the JVM port. it uses less memory to build.
lizmat: right 05:35
JimmyZ sorear: I'm waiting for MoarVM :P
05:36 raiph joined 05:44 bluescreen10 left, iSlug joined
dalek kudo/nom: 09953c2 | (Elizabeth Mattijsen)++ | / (4 files):
Give KeySey its own file
05:55
lizmat *KeySet *sigh* 05:56
06:00 iSlug left 06:02 dayangkun joined 06:18 iSlug joined 06:27 FROGGS joined
lizmat morning FROGGS! 06:27
FROGGS morning lizmat
06:35 iSlug left
sorear o/ 06:42
FROGGS hi sorear
06:51 kaleem joined 06:54 dmol joined 06:55 arcterus joined 07:07 iSlug joined 07:10 yannickberthoud joined, iSlug left 07:15 Timbus left 07:17 Timbus joined 07:21 iSlug joined, yannickberthoud left
lizmat I thought I'd test how molassy things would get: Stage parse normally around 127 seconds: still waiting after more than 30 minutes now for Stage parse to finish 07:24
I guess the lack of icu is making things even worse
so I would say we're looking at a factor of 15 in my case at least 07:25
07:25 iSlug left, yannickberthoud joined 07:28 woolfy joined 07:30 arcterus left, yannickberthoud left, iSlug joined
lizmat I'll just let it run to see where it ends while cycling& 07:30
jnthn morning, #perl6 07:31
07:34 sqirrel joined
jnthn .tell ruoso the next/last handlers for while loop are emitted as part of code generation, that is a QAST::Op while (and until, repeat_while and repeat_until) gets them "for free". MapIter handles them for for loops and contains a Parrot-specific version as well as a generic version of the looping code that JVM uses. 07:37
yoleaux jnthn: I'll pass your message to ruoso.
07:40 kriptik left
jnthn r: sub infix:["\x65"]($a, $b) { "$a & $b" }; say 1 A 2 07:41
camelia rakudo 09953c: OUTPUT«===SORRY!===␤No such method 'ast' for invocant of type 'NQPMu'␤»
jnthn Hmm
lizmat: If we can get syntax like infix:["\xAB"] working then we can declare those operators in the setting without them literally appearing, I guess... 07:42
07:42 iSlug left, yannickberthoud joined 07:45 iSlug joined, yannickberthoud left 07:52 dmol left, ssutch joined 07:56 leont joined 08:01 iSlug left
sorear morning jnthn 08:26
jnthn o/ sorear 08:27
Keeping busy?
diakopter jnthn: actually, the compilation unit also needs collectable too.. 08:28
er, ww
08:30 kaleem left
sorear jnthn: yeah 08:31
finally got a weekend off, too zonked to p6 though
jnthn *nod* 08:32
It's important to take some rest too :) 08:33
08:35 iSlug joined 08:37 daxim joined 08:43 rindolf joined, yannickberthoud joined, iSlug left 08:46 iSlug joined, yannickberthoud left 08:50 iSlug left, yannickberthoud joined 08:59 crab2313 joined 09:04 dakkar joined 09:06 yannickberthoud left 09:09 fhelmberger joined 09:17 dmol joined
mathw morning 09:25
rest? rest? What's that? *twitch*
jnthn mathw: That thing where you use http 09:26
mathw oh yeah, that 09:30
been reading about that lately, might be writing a restful service in the near future
I like the idea of actually using all these HTTP methods we usually ignore :) 09:31
09:37 Vlavv joined
moritz mathw: I recently read that if you want to insult a random programmer, you tell him "your API isn't really RESTful!" 09:47
mathw I'm not sure that works... what if htey weren't trying to write a RESTful API? 09:48
I'm pretty sure a lot of people out there don't actually care
I mean, if people really cared about that kind of thing they wouldn't be so keen to write things in JavaScript, surely? 09:49
(false association for a Monday morning, woohoo!) 09:50
moritz mathw: you keep saying that, but I don't believe you, since your API isn't RESTful!!!! :-) 09:51
mathw actually, Form.pm's API is entirely stateless and it's pure, too 09:52
so naaaaaaaah
jnthn People tend to use REST to mean a bunch of different things :) 09:53
moritz mathw: it doesn't use HTTP, so it can't be RESTful :-) 09:55
09:55 iSlug joined
jnthn
.oO( Any sufficiently adopted term will be misused sufficiently that it becomes useless for precisely describing anything )
09:55
moritz mathw: and it's not in CLOUD either !!!
09:57 arcterus joined 09:59 iSlug left, crab2313 left 10:00 iSlug joined 10:01 arcterus left 10:06 iSlug left, yannickberthoud joined
mathw All our problems can be solved by putting it in the cloud. 10:07
I'm even putting my internet connection in the cloud, so I can access it from everywhere
moritz sounds legit. 10:08
10:10 yannickberthoud left
mathw Absolutely 10:10
jnthn: I agree, especially if it's something to do with the internet
10:13 iSlug joined 10:15 yannickberthoud joined, iSlug left, raiph left 10:20 iSlug joined, yannickberthoud left 10:22 rindolf left 10:25 yannickberthoud joined, iSlug left 10:28 ssutch left 10:30 yannickberthoud left
mathw yay for unit tests! 10:38
mathw completes the first stage of a behaviour change: break the unit tests
or rather, adjust the unit tests to expect the new, correct, behaviour
10:44 flussence_ joined 10:45 japhb_ left, pecastro left, pecastro joined 10:46 japhb_ joined 10:48 kaleem joined
mathw I'm really liking test-driven stuff. It's great gradually turning all those red failure markers into success markers :) 10:59
FROGGS right, that is very satisfying 11:00
mathw The trick then becomes being sure you've got a comprehensive test suite, so when it's all green you know you're done 11:02
11:02 Rotwang joined, dayangkun left
FROGGS troo 11:03
timotimo there should be a test that tells you if the test suite is good enough
mathw why not solve the halting problem while you're at it?
FROGGS and you must keep in mind that you probably never have a comprehensive test suite :o)
moritz it's pretty much a question of experience 11:04
when you work with a codebase for a while, you learn how much to (not) rely on its test suite
timotimo tadzik: i was thinking the other day: if a user wants to put multiple spaces into table cells, all they need to do is make a table header that explicitly sets the cell widths. 11:07
11:07 crab2313 joined
tadzik timotimo: or maybe they should just use | 11:08
timotimo both things would probably end up using the same code (that i still need to write, mind you) 11:13
last night while i lay awake thinking about rakudo, i had the crazy idea that pruning away match objects in the perl6 grammar could speed up parsing because it would relieve pressure off the GC 11:14
11:16 PacoLinux joined
timotimo so maybe today i'll write up a quick and dirty .prune for NQPMatch or what it's called and see if it reduces the peak memory usage noticably and if it decreases parse time at all 11:21
moritz interesting idea 11:25
timotimo sometimes in my pre-sleep lunacies i get desparate for that rakudo performance :P
oh, i just noticed this hasn't been reviewed yet, should be straight-forward: github.com/rakudo/rakudo/pull/189/files 11:27
dalek kudo/nom: e8320df | (Timo Paulssen)++ | src/Perl6/Actions.nqp:
make sure that tabs in heredocs get properly dedented.
11:30
kudo/nom: 3340362 | moritz++ | src/Perl6/Actions.nqp:
Merge pull request #189 from timo/heredoc_tabs

make sure that tabs in heredocs get properly dedented.
timotimo appreciate it :)
moritz too
timotimo i can use "self" in an nqp class, right? 11:35
oh, i may not even have to, though
11:35 mtk left
moritz method prune() { @!array := nqp::list(); %!hash := nqp::hash(); } 11:35
:-)
timotimo well, @!array and %!hash are defined to be in NQPCapture, not in NQPMatch and i was writing the method for the latter 11:36
11:36 nyuszika7h is now known as vimperator, vimperator is now known as nyuszika7h
moritz er, right 11:37
timotimo so i was using nqp::bindattr for that
11:37 mtk joined
timotimo also, i thought it would be important to $!cursor := Nil, too 11:37
FROGGS is Nil available there? 11:39
moritz NQPMu is
now the realy interesting question is: where to call $/.prune? 11:40
timotimo good
i'd sprinkle calls to $/.prune into action methods in Grammar.nqp in rakudo as i see fit and try not to make it explode :) 11:41
hoping it'll explode during setting compile if i make a mistake ;)
moritz I'd thought the .prune() calls go into Actions 11:44
11:45 hanekomu left
timotimo er, yes, of course 11:45
"action methods in grammar.nqp" doesn't make a whole lot of sense
moritz (because if we don't need the captures at all, we can use non-capturing calls in the first place) 11:46
11:46 PacoLinux left
timotimo exactly, the prune goes after the action has done enough with it to create an .ast 11:46
11:47 PacoLinux joined 11:55 colomon joined
lizmat timotimo: there should be a test that tells you if the test suite is good enough" There is for Perl 5: it's called Devel::Cover::Test, part of the Devel::Cover distribution, see: metacpan.org/release/Devel-Cover 12:03
12:05 crab2313 left
timotimo right. good luck with that for a test suite like roast, though :( 12:07
12:07 Rotwang left
timotimo .o( timotimo—— for moving the goalpost ) 12:07
12:10 skids left
lizmat actually, I think rakudo is much better suited to be able to do this than Perl 5, judging from jnthn's work on the debugger 12:12
timotimo oh; well for code coverage maybe; but concept coverage is not doable :P 12:13
12:14 fridim_ joined
lizmat troo 12:14
timotimo about to test prune vs. no-prune. 12:15
jnthn A coverage tool may not be too hard to hack together a first cut of.
12:19 fridim_ left 12:22 mucker joined
timotimo hrmpf. time spent parsing is about the same 12:22
maxresident went down by like 8% or so 12:24
from 1656512k to 1587572
ah. more like 4%
so the effort wasn't worth it at all. but a negative result is a result nonetheless. just means that the hashes and lists in our match objects don't take up crazy much space (or clearing them out along with the cursor doesn't lead to sufficient amounts of memory being freed, your pick) 12:25
i *could* still try it on jvm, though
mathw that might be interesting 12:26
you know you want to
12:26 domidumont joined
timotimo i'm already doing it 12:26
though since the gc is already concurrent, i don't think relieving GC pressure by removing the match objects will make a difference in time used 12:27
and the jvm memory usage pattern is also not as easy to inspect just with /bin/time 12:28
12:28 domidumont left, domidumont joined
timotimo hm, maybe bindattr'ing nqp::list() and nqp::hash() was a bad choice and i should have used NQPMu instead. i can still try that. 12:28
jnthn yes, it would allocate a new list and hash... 12:29
timotimo oh the things you do when you don't think it through ...
12:30 daxim left, hoelzro left
mathw We've all been there... 12:30
12:30 daxim joined, hoelzro joined
timotimo oh, wow! that ... changed absolutely nothing :| 12:36
FROGGS >.< 12:37
timotimo i guess that just means that nqp::list() and nqp::hash() are pretty fast?
and now: misspelling =time make as just =make 12:41
tadzik and now, the conclusion 12:42
[Coke] "previously.... on #perl6"
moritz timotimo: where did you add the $/.prune() calls? (which methods)? 12:43
timotimo hm, what's the easiest way to collate that? 12:44
in 33 places, if that helps?
12:45 crab2313 joined
timotimo well, the memory savings are pretty much nonexistent; at least nothing spectacular shows up in the maxresident piece of the readout of time. 12:45
and the compilation speed doesn't seem to change either
moritz one nastiness is that nqp::list and nqp::hash themselves allocate new objects 12:46
I wonder if we should bind NQPMu instead
timotimo well, i replaced that with NQPMu already, so that's not it
12:46 domidumont1 joined
moritz ok 12:46
did you add the .prune() to all the literals?
like quibbler and numish etc. 12:47
timotimo i just put $/.prune at the end of many methods. not to those, though
quibble could be a good idea indeed.
moritz and fwiw the GC isn't concurrent on parrot 12:49
timotimo yes, that part above was refering to trying it on the jvm
12:49 crab2313_ joined, crab2313_ left, domidumont left
moritz ah 12:50
timotimo when passing :node to a QAST::Op, will that make a copy? 12:51
FROGGS method node(*@value) { $!node := @value[0] if @value; $!node } 12:53
I think not because it does a bind, right?
timotimo is that what gets called? 12:54
FROGGS yes
timotimo in that case, it shouldn't copy
FROGGS nqp/src/QAST/Node.nqp:22: method node(*@value) { $!node := @value[0] if @value; $!node }
12:54 domidumont1 left 12:55 domidumont joined
timotimo it seems like i put too much pruning in there now. 12:58
EXPR_reduce in NQPHLL is complaining
12:59 arcterus joined
jnthn Note that if $!node holds a reference to a match object, which in turns holds a reference to a cursor, then they ain't gonna go away when pruning as they are still referenced. 12:59
moritz jnthn: that's why NQPMatch.prune assigns NQPMu to $!cursor 13:01
jnthn ah, ok 13:02
Note that a more conservative thing to do may be to clear $!cstack inside of CAPHASH iff $!bstack is null
(if $!bstack is null and since match objects are cached, $!cstack will be unrequired beyond that point) 13:03
Note that this may already be done :)
13:03 arcterus left
timotimo i'll have a quick look 13:03
13:05 PacoLinux left
timotimo that is currently not being done 13:06
13:06 imarcusthis- left
jnthn It's probably a reasonable thing to do. 13:08
FROGGS jnthn: tell us more :o)
timotimo i've added it, i can commit it later. should prune make it into nqp/master?
jnthn timotimo: Not sure about that one yet. 13:10
timotimo: But the $!cstack throwing away is probably worth a spectest :) 13:11
timotimo will do
13:13 konundra joined 13:14 xinming left 13:16 xinming joined 13:17 domidumont left 13:19 pmurias joined
pmurias jnthn: did you find the problem ruoso was having with --target=ast? 13:19
jnthn pmurias: I patched QAST::BVal to not explode, yes. 13:20
pmurias good 13:21
being able to look at the ast is really important for new developers
jnthn *nod*
Wonder if we should somehow try to test it somewhere...at least test it won't explode. 13:22
mathw 'not exploding' is a good first step for testing 13:27
the great thing about software is that we can catch explosions without expensive repair work required afterwards
frettled unless it's controller software for a sentrifuge ;)
pmurias jnthn: I have a start of a unit tests for QAST, github.com/pmurias/rakudo-js/blob/...ast-node.t 13:28
13:29 xinming left
pmurias jnthn: I thought about testing --target=ast but wasn't sure we want to hardcode the exact format into the tests 13:30
13:31 xinming joined
jnthn We shouldn't test the exact contents, no 13:31
But we can look for some obviousthings
like "if I call a function elephant, does the word elephant appear in the dump output"
I'd test $somenode.dump really, not --target=ast itself.
r: sub elephant() { }; elegant 13:32
camelia rakudo 334036: OUTPUT«===SORRY!===␤Undeclared routine:␤ elegant used at line 1. Did you mean '&elephant'?␤␤»
jnthn :D
tadzik that's irrelephant
FROGGS >.o
jnthn I want to think of a better pun than that, but I can't trumpet 13:33
pmurias nqp --help was broken untill recently so we should test that too ;)
FROGGS why not... testing the command line arguments for sanity isnt soo bad
[Coke] do the tests for nqp get run as part of a rakudo build? 13:36
(IFF nqp had to be built as part of the build for rakudo) 13:37
pmurias we could have some rought sanity checks for command line arguments and unit tests for the trickier dump methods
FROGGS [Coke]: no, dont think so 13:38
timotimo spectests are about to finish 13:45
13:45 rindolf joined
timotimo try.rakudo.parrot is b0rked, no tests run 13:46
13:46 btyler joined
timotimo documentation/why.t failed one, but i think that file is dirty locally 13:46
IO-Socket-INET fails 7 of 41, i suppose that's known?
[Coke] timotimo: github.com/coke/perl6-roast-data/b....out#L2477 13:47
they have been failing for some time.
:(
jnthn timotimo: How does the try one fail? 13:48
timotimo one prune too many :) 13:49
jnthn Too many prunes always lead to crap...
timotimo yeah. i'm thinking of leaving the prune stuff out completely now. doesn't seem to have any benefits. 13:52
but i'll stash it away in a branch and put it up on github because maybe one day someone finds out what's wrong with my approach and does the obvious one-line-fix and makes it all much better :) 13:53
clearing the cstack doesn't seem to affect parse time btw 14:01
jnthn I didn't expect it'd help time, but it should allow less memory usage. 14:02
timotimo i will need to check that
at least try now works :)
barely a difference in maxresident 14:06
14:14 PacoLinux joined 14:15 kaare_ joined 14:24 sqirrel left 14:33 kaleem left 14:40 cognominal left 14:41 Psyche^_ left, cognominal joined 14:42 Psyche^ joined 14:49 anuby_h joined 14:50 skids joined, xinming left 14:52 xinming joined 14:53 crab2313 left, BenGoldberg joined 14:54 rindolf left 14:56 domidumont joined 15:00 rindolf joined 15:05 PacoLinux left
daxim when is nqp/rakudo 2013.08 scheduled for release? 15:07
15:08 rindolf left, domidumont left
FROGGS daxim: 2013-08-22 Rakudo #67 moritz 15:08
github.com/rakudo/rakudo/blob/nom/..._guide.pod
daxim och
15:11 PacoLinux joined 15:19 atrodo left, birdwindupbird left 15:21 atrodo joined
jnthn grabs his Perl 6 tuits 15:25
mathw I didn't see the 'u' in that for a moment
jnthn o.O
What are you used to reading?! :P
mathw I think I spent too long in the pub on Saturday 15:26
with a bunch of martial artists
I do value our traditions of training, but I'm not sure we need to preserve the one about getting really really drunk afterwards 15:27
slava jnthn: that was an awesome talk on the perl6 debugger (I think it was you), also, epic beard :D
mathw: shush, that is the important part 15:28
jnthn slava: I'm probably to blame for debugger talks, yes. :)
moritz speaking of talks, I have a distinct lack of slides so far.
slava jnthn: your beard is how I know perl6 will be alright :)
diakopter marshal autists
jnthn moritz: Erm, me too, and I have 3 talks O.O 15:30
15:30 rindolf joined
jnthn slava: I guess I better keep it then... :P 15:30
jnthn is happy of it most of the time, except in these summer temperatures... :)
mathw shaved off most of his hair a couple of weeks ago 15:31
slava yes
www.wired.com/wiredenterprise/2012/...d-gallery/
mathw it seemed prudent, as I was contemplating four days of aikido in a place with no air conditioning and generally poor ventilation when it's reaching 30C outside 15:32
diakopter slava: yes, but jnthn's 1/3-1/2 their ages :)
mathw nothing wrong with starting early 15:33
slava diakopter: so perl6 will be even mroe awesome :)
mathw don't forget the important contribution of $larry's moustache 15:34
slava mathw: that goes without saying, IMO
I can't wait for a Perl6 book to come out so I can bug everyone at YAPC :P
15:36 rindolf left
timotimo bug them for signatures? 15:36
jnthn
.oO( camelia them for signatures? )
15:37
PerlJam slava: A Perl 6 book has already come out :)
mathw makes note: make camelia costume
slava err, when?! :(
I am so behind :(
mathw makes a better note: persuade friends more talented in textiles to make camelia costume for him 15:38
PerlJam slava: I'm teasing somewhat. But there's "Using Perl 6" and the much older "Perl 6 and Parrot Essentials"
timotimo wow
PerlJam: the state of the "perl6 book", at least the one that's on perl6/book, isn't really that amazing yet 15:39
moritz and it won't become amazing, because work on it has ceased
PerlJam indeed
:(
moritz I've tried to put the stuff into perl6/doc instead
and improve it there
but it's a lonely quest, and I'm not good at sustaining such efforts alone 15:40
std: 1 1
camelia std c2215f0: OUTPUT«===SORRY!===␤Two terms in a row at /tmp/unf45YRB4C line 1:␤------> 1 ⏏1␤ expecting any of:␤ feed_separator␤ infix or meta-infix␤ infixed function␤ statement modifier loop␤Parse failed␤FAILED 00:00 42m␤»
moritz tries to get the file name in there
15:42 dmol left, konundra left 15:43 FROGGS left
moritz I'm not too happy with the way STD does it 15:45
15:46 btyler left
lizmat timotimo: "IO-Socket-INET fails 7 of 41, i suppose that's known?" Yes, I put them there, because the test seems to work out ok, but at the expense of 7 x 20 second timeouts 15:47
not sure yet if it is the general socket code that's to blame, or the test setup, but something is seriously wrong there
each test is not also tested for the time it took: if it is more than 5 seconds, it will fail 15:48
timotimo righto
lizmat all of these failures are at 20 seconds
if these are fixed, doing a spectest will be at least 1 minute shorter in wallclock when doing a parallel test
and 2.5 minutes when doing a non-parallel test 15:49
timotimo ... oh no 15:50
i think i lost the only good copy of rakudo_optimiser_transformer.p6
how am i going to rapid-prototype my stuff now? ;_;
15:50 btyler joined
moritz because rakudo batches several error in one message, so with the current format the file name is repeated for every routine 15:50
how would you like it if we changed it ===SORRY!==== Error while compiling $file\n 15:53
and then the rest of the message as is, without the file names?
dammit, I wanted to make slides, now I'm hacking rakudo again 15:57
timotimo :D 15:58
jnthn moritz: CDD :P 15:59
timotimo so when i have a QAST::Var, i can search through the lexpads; is there a central place where i should look to find out what kinds of things are stored in there for variables? like type constraints and such? 16:01
16:02 daxim left
moritz nr: say Bool.pick 16:02
camelia rakudo 334036: OUTPUT«False␤»
..niecza v24-88-g1f87209: OUTPUT«True␤»
lizmat r: say Int.pick 16:04
camelia rakudo 334036: OUTPUT«Nil␤»
lizmat hmmm...
timotimo kind of hard to pick from the range of all BigInts :P 16:05
ah, that's how; lexpad.symbol("name")<type> will be ... a thing 16:07
benabik r: Bool ~~ Enum 16:08
camelia rakudo 334036: ( no output )
benabik r: say Bool ~~ Enum
camelia rakudo 334036: OUTPUT«False␤»
timotimo r: say Bool.^mro
camelia rakudo 334036: OUTPUT«(Bool) (Cool) (Any) (Mu)␤»
benabik I keep wanting camelia to output the result if there's no other output.
jnthn benabik: I think we had it that way once and it was just differently confusing :) 16:09
benabik jnthn: Ah, but it would less confusing for *me*, you see. ;-)
16:09 anuby_h left, PacoLinux left
benabik Ah. .pick and .roll are simply implemented special for Bool. 16:09
16:09 FROGGS joined
benabik Ah, sorry I expected it to be an EnumMap not an Enum. But EnumMap doesn't seem to have .pick either? Eh. 16:11
16:12 PacoLinux joined 16:13 pmurias left
moritz r: say %*ENV.pick.perl 16:19
camelia rakudo 334036: OUTPUT«"PERLBREW_HOME" => "/home/p6eval/.perlbrew"␤»
jnthn wonders why on earth some seemingly innocent changes break the Rakudo on Parrot build 16:23
16:25 fhelmberger left
timotimo r: my $foo where * > 10 = 20; 16:25
camelia rakudo 334036: ( no output )
timotimo can't seem to find the code in actions that handles the "where" clause in token type_constraint :|
or is that rule post_constraint?
jnthn It's post_ there ain't it? 16:26
timotimo that seems to be for parameters, though. or is that the same?
jnthn sees a method post_constraint
timotimo oh
jnthn oh...
hmm
timotimo it does at least handle a where block
jnthn I didn't even know you could write that :P
timotimo r: my $foo where * > 10 = 5;
camelia rakudo 334036: ( no output )
timotimo oh ... well :) 16:27
r: my ($foo where * > 10) = 5;
camelia rakudo 334036: ( no output )
timotimo r: my ($foo where * > 10); $foo = 5;
camelia rakudo 334036: ( no output )
timotimo doesn't seem very effective so far.
jnthn Right :) 16:28
Maybe it's NYI :)
timotimo r: sub Foo returns Int where * > 10 { 5 }; Foo;
camelia rakudo 334036: OUTPUT«===SORRY!===␤Missing block␤at /tmp/9aUIcATTe8:1␤------> sub Foo returns Int ⏏where * > 10 { 5 }; Foo;␤ expecting any of:␤ statement list␤ prefix or term␤ prefix or meta-prefix␤ new name to be defin…
timotimo r: sub Foo returns (Int where * > 10) { 5 }; Foo;
camelia rakudo 334036: OUTPUT«===SORRY!===␤Missing block␤at /tmp/ErDJ8cIxxE:1␤------> sub Foo returns ⏏(Int where * > 10) { 5 }; Foo;␤ expecting any of:␤ statement list␤ prefix or term␤ prefix or meta-prefix␤ new name to be def…
16:28 rindolf joined
timotimo r: sub Foo(--> Int where * > 10) { 5 }; Foo; 16:28
camelia rakudo 334036: OUTPUT«===SORRY!===␤Missing block␤at /tmp/2SnkNntE9f:1␤------> sub Foo(--> Int ⏏where * > 10) { 5 }; Foo;␤ expecting any of:␤ statement list␤ prefix or term␤ prefix or meta-prefix␤ new name to be defined␤…
timotimo mhm. 16:29
anyway, i'll go have a bit of balconytime :3
16:34 dmol joined 16:37 PacoLinux left 16:38 PacoLinux joined 16:52 vk_ joined, benabik left
masak oh hai, #perl6 16:56
lizmat masak!
jnthn evening, masak o/ 16:57
lizmat fwiw, I retried compiling the setting with a single line of "# ⊆" added to the prologue
stage parse went from 127 seconds to 3400 seconds
jnthn o.O
lizmat: Did you see my workaround suggestion?
lizmat that's about 26 times slower 16:58
jnthn: not yet, after cycling I had to catch up on some sleep and email :-)
jnthn k :)
lizmat going to run a spectest with the resulting setting, see if there are any differences there
won't be able to do much more until much later this evening 16:59
16:59 zwut00 joined
pmichaud yeah, we really need to fix the string handling and utf8 stuff in the regex engine :-/ 17:00
jnthn I don't think the problem exists on JVM
pmichaud I'm sad I haven't had time to do that yet. Lots of lost time and opportunity in there.
I hope it doesn't exist on JVM :)
jnthn Of course, we have OTHER problems with strings on the JVM :D
lizmat pmichaud!
pmichaud if it was a problem on the jvm I'd be even more sad.
jnthn And Moar is NFG (or an approximation thereof so far...) so it's all fixed width. 17:01
lizmat result of make: real63m10.308s, user63m6.534s, sys0m3.673s
pmichaud \o/
lizmat I would say, about 12 times slower in total 17:02
diakopter wow 17:05
lizmat and that by adding a single line of comment with a non-ascii character :-) 17:08
diakopter what if you add it at the end 17:09
lizmat I'll try that later, just for reference 17:10
spectest comes out ok, without a timing difference
timotimo is there a good short way to print out everything in an nqp::hash? 17:11
17:11 spider-mario joined
jnthn timotimo: in nqp? 17:11
timotimo yes
lizmat make is running, I'll check back in 30 mins or so, afk&
jnthn for %h { say($_.key ~ ' = ' $_.value) } 17:12
? :)
timotimo oh that's surprisingly easy
17:12 preflex left
FROGGS jnthn / timotimo: can't we make a gist/DUMP method for hashes in nqp? 17:12
17:12 preflex_ joined, ChanServ sets mode: +v preflex_ 17:13 preflex_ is now known as preflex, domidumont joined
[Coke] r: say 3400/127 17:13
camelia rakudo 334036: OUTPUT«26.771654␤»
pmichaud I'm afk 17:14
timotimo i fear i'll run into a few unstringifyables 17:15
17:15 konundra joined 17:16 dakkar left
moritz is that, like, unspeakables? 17:16
FROGGS meh
FROGGS wanted to make a "lost for words" joke
timotimo yeah, in this case i got a null pmc access :)
there's nqp::isstr, right? 17:17
FROGGS nqp: say(nqp::isstr("hello"))
camelia nqp: OUTPUT«1␤»
FROGGS seems like
timotimo right, i could have totally checked that here :S
17:18 Ben_Goldberg joined
FROGGS :P 17:18
17:18 flussence_ is now known as flussence
timotimo currently trying to replace a couple of p6store ops with p6storeunchecked (which i had to freshly map) 17:18
17:19 btyler left
moritz tries to give compile-time errors with ===SORRY!=== the file name 17:19
17:19 mucker left 17:20 BenGoldberg left 17:21 domidumont left
timotimo so, in a my Int $foo, the lexpad entry will have a .<descriptor> and that's a ContainerDescriptor and its .of will be the Int type object? 17:22
kind of seems like
17:22 domidumont joined
FROGGS r: sub test(*@s is rw) { for @s -> $s is rw { $s = 1} }; my %h = a => 1; for %h.keys { test($_) }; say %h 17:25
camelia rakudo 334036: OUTPUT«Cannot modify an immutable value␤ in sub test at /tmp/8U83bCPD34:1␤ in block at /tmp/8U83bCPD34:1␤␤»
jnthn timotimo: Somethin glike that, yes
FROGGS jnthn: your commit 787295d0d2ea732e1a716795c5f3a150885f8346 changed the behaviour of the code above ^^
was that intended?
(it wasn't dying before) 17:26
jnthn huh...the change mostly made code like that *not* die.
We untodo'd a bunch of related tests.
FROGGS star: sub test(*@s is rw) { for @s -> $s is rw { $s = 1} }; my %h = a => 1; for %h.keys { test($_) }; say %h 17:27
camelia star 2013.02: OUTPUT«("a" => 1).hash␤»
FROGGS see -------------------------^ ó.ò
jnthn Um
oh, .keys
wtf
FROGGS yeah
jnthn That doesn't even make any sense.
I'm glad it dies now :P
How on earth did it work before, anyways? :) 17:28
FROGGS yeah, just wanted to make sure that my v5 code needs changing :o)
timotimo magic & unicode farts
FROGGS farts mostly
FROGGS giggles
timotimo did i write unicode? i meant unicorn.
FROGGS hehe
timotimo i don't think there's a unicode fart emoticon
jnthn I'm sure Unicode probably does have a char for fart :P
FROGGS that makes it even more funny :P
timotimo although that would be so cool
jnthn It has pile of poo :P
FROGGS .u fart 17:29
yoleaux No characters found
timotimo if i could use it in identifiers ... :D
FROGGS meh
timotimo if i have a container descriptor that has an rw of 1 and an of of Mu, can i turn any p6store into a p6storeunchecked automatically? 17:30
although how often does that happen. what about Mu?
diakopter .u 5c41
yoleaux No characters found
timotimo (i'm only looking at p6store Var, Var right now, though
jnthn timotimo: Yes, you probably can
diakopter aww, it doesn't have 5c41
jnthn If you're doing it in the optimizer
timotimo i'll hopefully be able to put Var + typechecked return value into the same optimisation thing right after that 17:31
yes, this is all in the optimizer
jnthn dinner, bbiab
timotimo hm, is the correct check nqp::istype($desc.of, $!Mu) or is it $desc.of =:= $!Mu? 17:33
diakopter .u 1f4a8 17:35
yoleaux U+1F4A8 DASH SYMBOL [So] (💨)
diakopter .ask dpk which unicode version does yoleaux have for .u ? 17:36
yoleaux diakopter: I'll pass your message to dpk.
17:40 PacoLinux left, btyler joined
timotimo nqp: say(NQPMu =:= NQPMu); 17:42
camelia nqp: OUTPUT«1␤»
17:42 araujo left
timotimo oh yikes, i get so much "turning it unchecked" output from compiling the setting 17:44
i'm sure it's super broken now :D
17:45 ssutch joined
timotimo haha, yes, i think nqp::istype(something, $!Mu) is pretty dumb :) 17:46
[Coke] masak: alloveralbany.com/images/northshire...toga13.jpg (this place is opening soon relatively near me) 17:52
timotimo '"nothing is written in stone" is written in stone' it should say
i can't tell how to check if the types match; =:= doesn't trigger on Int, Int apparently, and eqv isn't in nqp 17:54
perhaps i can istype that?
17:54 lue left
masak [Coke]: :D 17:56
[Coke]: notice also that the book in the window almost says... "FROGGS" o.O
[Coke] masak: I pretty much have to go patronize their shop now! 17:57
timotimo my code turned 3 p6store into p6storeunchecked based on matching descriptor .of types
PerlJam masak: I think you're imagining things ... the book says "FROGS", not "FROGGS" :) 17:58
masak PerlJam: hence "almost" :)
timotimo cool, that seems like it kinda works
FROGGS :o)
timotimo i hope the spectest harness isn't confused by the mass amount of debug output 17:59
masak [Coke]: there's a strain of self-defeating autopuns like that, which are simply a consequence of people not thinking things through. I don't like them at all. but this one is kinda funny because it's so deliberate. 18:00
PerlJam timotimo: It should be ``"nothing" is written in stone'' :-) Classic use/mention dichotomy :)
masak PerlJam: that would be funny, too. but not an autopun.
PerlJam yep
masak .oO( "this" is not a pipe )
masak .oO( you think that's "air" you're breathing? ) 18:01
18:01 arcterus joined
timotimo i do get a bunch of spectest fails 18:01
PerlJam Coke: that setting looks fairly permanent. Perhaps suggest to them that they could swap out the saying every once in a while :) 18:02
FROGGS .oO( employees must "wash hands" )
18:03 wtw joined 18:05 arcterus left
timotimo i had kind of hoped i could just make it work no-prob, but no ... :( 18:05
18:06 lue joined 18:08 zby_home joined
FROGGS r: { try die "huhu"; CATCH { $! = "42" } }; say $! # how can I unset $! ? 18:08
camelia rakudo 334036: OUTPUT«huhu␤ in block at /tmp/406uIpZynY:1␤ in block at /tmp/406uIpZynY:1␤␤»
timotimo $! = Nil? ;) 18:09
FROGGS timotimo: where? in the CATCH block? 18:10
r: try { die "huhu"; CATCH { say "catched"; $! = Nil } }; say $! 18:11
camelia rakudo 334036: OUTPUT«catched␤huhu␤ in block at /tmp/lI7iIMwd3g:1␤␤»
FROGGS hmmm 18:12
timotimo hm
FROGGS r: try { die "huhu"; CATCH { say "catched"; OUTER::<$!> = Nil } }; say $! 18:13
camelia rakudo 334036: OUTPUT«catched␤Cannot modify an immutable value␤ in block at /tmp/XYuPd26nLB:1␤ in block at /tmp/XYuPd26nLB:1␤␤»
FROGGS r: try { die "huhu"; CATCH { say "catched"; OUTER::DYNAMIC<$!> = Nil } }; say $! 18:14
camelia rakudo 334036: OUTPUT«catched␤Cannot modify an immutable value␤ in sub infix:<=> at src/gen/CORE.setting:14966␤ in block at src/gen/CORE.setting:2137␤ in block at /tmp/uqBrUoxQHd:1␤ in block at /tmp/uqBrUoxQHd:1␤␤»
FROGGS r: try { die "huhu"; CATCH { say "catched"; OUTER::DYNAMIC::<$!> = Nil } }; say $!
camelia rakudo 334036: OUTPUT«catched␤huhu␤ in block at /tmp/Bw4pNKBaQ9:1␤␤»
timotimo oh my. it seems like i have to make sure i don't p6store a !rw thing into a container or something
masak r: try { die "huhu"; CATCH { default { say "unset!" } } }; say "alive" 18:17
camelia rakudo 334036: OUTPUT«unset!␤alive␤»
masak FROGGS: this?
18:17 raiph joined, rafl left
FROGGS r: try { die "huhu"; CATCH { default { say "unset!" } } }; say "alive $!" 18:17
camelia rakudo 334036: OUTPUT«unset!␤alive huhu␤»
masak ah.
FROGGS masak: no, $! should be unset
masak hrm. 18:18
r: try { die "huhu"; CATCH { default { $! = "nah" } } }; say $!
camelia rakudo 334036: OUTPUT«huhu␤ in block at /tmp/VFtawR5inf:1␤␤»
masak weird. 18:19
FROGGS yeah
masak r: try { die "huhu"; CATCH { default { $_ = "nah" } } }; say $!
camelia rakudo 334036: OUTPUT«Cannot modify an immutable value␤ in block at /tmp/Ks5PWeJxmi:1␤ in block at /tmp/Ks5PWeJxmi:1␤␤»
FROGGS I need it to mimik Perl 5's chop/chomp
timotimo oh. well, crap. 18:20
my $a; my $b = sub($arg) { $a := $arg }; my $val = 42; $b($val); dies_ok { $a = 23 }, "bound ro sub param remains readonly"; 18:21
how am i supposed to rely on the descriptor if it can be changed just like that :|
can i check for readwriteness at optimize time *at all*, *ever*?
FROGGS timotimo: I can't help you there :/ 18:22
timotimo the only way to make this safer is to look everywhere that reaches the var i'm currently looking at and see if any binding goes on either directly or indirectly. great :|
well, afk for a bit first. maybe jnthn has an idea when he returns from nomming
18:25 rafl joined
FROGGS r: $! = 42; try { temp $!; die "huhu"; CATCH { default { 1; } } }; say $! # *narf* 18:25
camelia rakudo 334036: OUTPUT«42␤»
FROGGS n: $! = 42; try { temp $!; die "huhu"; CATCH { default { 1; } } }; say $! # *narf* 18:26
camelia niecza v24-88-g1f87209: OUTPUT«Unhandled exception: Writing to readonly scalar␤ at /tmp/GJRlu4FVFW line 1 (mainline @ 2) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4579 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4580 (module-CORE @ 576) ␤ at /home/p6eval/niecza/li…
FROGGS n: try { temp $!; die "huhu"; CATCH { default { 1; } } }; say $! # *narf*
camelia niecza v24-88-g1f87209: OUTPUT«Internal error in exception dispatch: Writing to readonly scalar␤ at <unknown> line 0 (KERNEL Scalar.TEMP @ 0) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤»
FROGGS n: try { die "huhu"; CATCH { default { 1; } } }; say $! # *narf*
camelia niecza v24-88-g1f87209: OUTPUT«huhu␤» 18:27
FROGGS w/e
18:30 domidumont left
FROGGS jnthn / lizmat: did I got it right that we might want to avoid unicode chars in the nqp/rakudo codebase? 18:31
dalek rl6-roast-data: 5280008 | coke++ | / (5 files):
today (automated commit)
18:32
[Coke] FROGGS: yes, please.
FROGGS [Coke]: that cover « and » too 18:33
covers*
[Coke] ... dunno if latin1 is safe.
^^^^ jvm percentage is dropping slightly.
18:33 domidumont joined
FROGGS dunno about safe, but it is a matter of speed as I understand it 18:33
18:34 crab2313 joined 18:36 benabik joined
jnthn FROGGS: Yeah, though I think latin-1 is fine. 18:41
*chars in latin-1
FROGGS k
timotimo i suppose if i only fire my optimisation if the lhs of the p6store has :decl, it could be safe from the binding problem 18:43
but then it won't give much optimization any more 18:44
[Coke] FROGGS: yes, speed impact is what I meant by safe. 18:45
18:45 Ben_Goldberg left
timotimo jnthn: can i ask you for guidance later for implementing p6storeunchecked on the jvm? i'm guessing it'll not be more than copypasting one to five lines from p6store, but i don't know what most of the checks entail and which are safe to remove 18:46
18:47 ssutch left 18:52 rindolf left
timotimo really, timotimo? "!nqp::isnull($op[0].decl) is wrong, i need to check if the decl is 'var'. This should do nicely: 'nqp::isnull($op[0].decl) eq "var"'" >_> 18:54
jnthn timotimo: Well, storeUnchecked is implemented in RakudoContainerSpec.java already, which is the thing that's doing the actual skipping 18:55
timotimo oh, neat!
jnthn The op wants to look the same, just call spec.storeUnchecked, not store, afaict 18:56
18:56 crab2313 left 18:57 domidumont left, domidumont joined
timotimo btw, all these CallSiteDescriptors are invokedynamic-related, yes? 18:57
jnthn No 18:59
Invocation related though
They describe the arguments
timotimo ok
now my optimisation doesn't fire at all any more :( 19:00
huh. shouldn't my Int $a = 5; result in a QAST::Var that has :decl set in addition to :scope<lexical>? 19:01
huh. the vars that have the lexical declarations are all at the very top of the block
19:02 arcterus joined
timotimo that's no good for my optimisation; it seems like i'll have to check for "bind" ops to the same lexical inside its scope and additionally do some barebones "escape analysis" 19:02
why did i ever think this would be easy?
19:03 domidumont left
jnthn :decl is just 'var', no? 19:04
You're looking for p6store ops, then probably want to go look at the thing being assigned to if it's a QAST::Var, and find the container
timotimo in this case :decl is contvar, but the var with the decl is in the wrong place. 19:05
19:05 sqirrel joined
jnthn decls always go into the first QAST::Stmts node. 19:05
That's normal.
But that's not where the assignment is
timotimo now i just have p6store for Var lexical $a, Var lexical $orig 19:06
jnthn Right, that's all you need.
You take the name $a, look in the symtable, and the hash you get back will probably contain a descriptor key
timotimo except when someone goes ahead and binds a read-only container to my var behind my back
jnthn That is the container descriptor.
ah, rebinds...
timotimo that's how i do it now, but i get spectest fallout, i'll copypaste the explodin gcase now
jnthn Right. 19:07
timotimo my $a; my $b = sub($arg) { $a := $arg }; my $val = 42; $b($val); dies_ok { $a = 23 }, "bound ro sub param remains readonly";
jnthn Well, I've for a while expected the optimizer to start collecting "facts" about variables and parameters as it goes
timotimo yes, that would be at the very least necessary
did you stop expecting that? or is "for a while" a start point + duration, rather than start point + duration + end point? 19:08
jnthn So really it's a case of pushing the optimizations we can probably do onto a list somewhere, and then at the end of analyzing the block, check that the optimization wasn't "poisoned"
No, I still expected it. :)
*expect
I just didn't get around to it :)
timotimo :D
jnthn Seeing a bind to a variable counts as poisoning this particular opt, for example
timotimo in this case it would even be possible to do it and hold a reference to the op we changed and the var it depends on and then reverting that as soon as we hit a bind
jnthn I suspect there's a neat way to factor it.
That feels icky
timotimo right, i'll avoid that then 19:09
jnthn I'd prefer to record what we can do and do it when we know it's safe, ratehr than speculatively do stuff, in this case.
The trick to keeping optimizers sane is always knowing when you're doing analysis and when you're doing transformation, and not muddling the two.
timotimo one question that remains is how to keep these facts around throughout compilation; if i put my $a into a MysteryFunctionFromOuterSetting, how do i remember wether that's safe or not?
oh, hold on, i don't think that applies here, does it? 19:10
i mean i can't pass a variable to a function that doesn't have lexical access and change its container through binding or some other witchcraft? 19:11
jnthn Not unless it's a contextual 19:13
timotimo not quite sure what that means...? 19:15
jnthn $*foo 19:16
timotimo ah, yeah sure
i should be able to tell by the :scope, right?
jnthn Yeah, I guess...should be contextual
Though "is context" may be interesting 19:17
Put it in as a level 3 opt while we assess it
timotimo i have it at 3, but the default is 3 at the moment anyway
interestingly, $*orig is just as :decl(contvar) as $a and both are defined as lexical
but the lookup is used with &DYNAMIC rather than a QAST::Var, so my optimisation would appear to be safe from that 19:18
maybe while writing the analysis part of the poisoning process, it'll turn out that turning lexicals into locals will be a very low hanging fruit
19:20 vk_ left
timotimo is that a "nice little optimization" or "a worthwhile optimization"? 19:21
jnthn timotimo: The default is 3 for setting comp, the default for outside of that is 2 19:23
timotimo: Note setting comp passes --optimize
uh
--optimize=3
Lexicals to locals needs more care
It's do-able but things like pseudo-package use can spoil it 19:24
timotimo oh, ok
19:25 PacoAir joined
jnthn So that needs to also "poison" 19:25
timotimo pseudo-packages like OUTER etc?
no, more likely CALLER
jnthn OUTER, yeah
'cus that relies on the lexical stuff
timotimo that's easier to have poisoning for than other lexical stuff
(eval will be interesting, too. probably just a blanket poison for everything if eval is encountered)
jnthn Right. 19:26
masak timotimo: the formal definition of "strangely consistent" is something like this: given that infix:<~> joins strings, infix:<+> adds numbers, and prefix:<+> numifies, what's the operator that stringifies? it's prefix:<~>. why? because when that's the answer, it's strangely consistent. 19:28
there are consistencies that are even stranger than that, though. that particular consistency is fairly normal, as consistencies go.
timotimo bbl for now. 19:29
masak .oO( bbn for later )
dalek p: 34ce310 | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
Op inline info for JVM backend.

Go with an opt-out approach, rather than the opt-in one on the Parrot backend, since that is overwhelmingly the right default.
kudo/nom: e815354 | jnthn++ | src/vm/parrot/ops/perl6.ops:
Improve an error, less op variants.
19:30
kudo/nom: fe419d2 | jnthn++ | src/ (5 files):
Get optimizer inlining working on JVM backend.

This also fixes an oops-looking-at-invalid-memory bug that could take place on the Parrot backend post-inline.
19:31 PacoAir left
jnthn OK, that's that done... :) 19:34
19:34 araujo joined, araujo left, araujo joined
lue thinks the bitwise ops are a possible extension to that definition of strangely consistent 19:36
masak oh! another good strange consistency: given that infix:<< <=> >> does numeric comparison, what operator does string comparison. why, infix:<leg>, of course.
lue: yes, I'd say so.
timotimo jnthn, please suggest a good datastructure for the poisoning, especially since itneeds to mirror the block stack/lexpad 19:38
maybe the infovcould actually be saved there? does that make sense? is the @BLOCKS listbgoing to be serialist orvsomething likevthat? 19:39
wow this keyboard is difficult 19:40
i am not sure i see the strangeness in leg and <=> 19:41
or in pre/infix + and ~ 19:42
19:42 arcterus left
timotimo my interpretation of strange seems to include "surprising in a bad way" or something 19:42
jnthn timotimo: Do we already have a notion of "curent block information"? 19:44
timotimo i did not see anything obvious in that vein, no
19:45 arcterus joined
jnthn OK, I suggest something a bit like that, where each points to its outer 19:45
timotimo ah because we may need to follow BVal often 19:46
how do we properly go from a bval to ts dataset? cuid?
jnthn You don't need to follow BVal, I don't think
That doesn't imply anything about lexical nesting
timotimo well if i call a block i need to know if it users eval or CALLER 19:47
or is that done by looking for op:call with a name into the lexpad instead? 19:48
in that case do i get the block object that has the poison information another way? 19:49
oh another stumbling block in that case will be multis and methods... 19:50
19:52 sqirrel left
jnthn timotimo: You can't determine anything statically about CALLER 19:52
timotimo: The point is you don't need to though.
timotimo i am ni longer convinced i can get this to work properly without tremendous amounts of assistance 19:53
jnthn The caller could be in another compilation unit. Or late bound.
timotimo bbl
19:53 dmol left 19:54 vk_ joined, dmol joined 19:58 zby_home left
dalek p: 1c9a894 | (Tobias Leich)++ | src/QAST/Node.nqp:
strip non-latin1 chars
20:00
kudo/nom: 89216fa | (Tobias Leich)++ | src/Perl6/Pod.nqp:
strip non-latin1 chars
20:01
20:02 kaare_ left
timotimo i thought using CALLER should poison 20:05
jnthn Hm 20:06
I don't know it needs to poison lexical demotion though.
Because anything that is not $*foo or declared with the "is dynamic" trait should not be accessible via CALLER today anyway.
colomon tadzik: MuEvent started failing overnight?
yoleaux 05:13Z <lizmat> colomon: I started integrating Set/Bag changes from Niecza, but am now blocking on naming special operators like ⊆,∈,∋,∪ to texan. Suggestions?
timotimo ah, ok 20:07
dalek kudo/nom: 156de3b | moritz++ | src/ (2 files):
Inlcude file name after the SORRY line

that way bulk messages (like for missing subroutines) get the file name exactly once (not 0 times as before, and not repeated for every occurrence either)
20:09
colomon lizmat: those all have existing texan identities … usually the next thing in the file in the Niecza version. I think rakudo already supports all of these? something like (<=), (elem), (cont), and (|) for those particular examples./ 20:10
20:12 konundra left
tadzik colomon: not my fault :) 20:12
20:12 konundra joined
colomon tadzik: I certainly never said it was! Just wanted to make sure you knew. :) 20:13
jnthn timotimo: feel free to kick off a bench run, btw 20:15
timotimo ah, yes, indeed
inlining \o/
20:17 arcterus left 20:23 colomon left
FROGGS jnthn: btw « is stored as C2 AB instead of AB... is it still okay then? 20:25
jnthn FROGGS: The important thing is that it can be transcoded to something fixed width, which latin-1 is
FROGGS k
20:26 cognominal left
lizmat skimming backlog: FROGGS, yes, please no non-ascii: stage parse at 3384 seconds (rather than 3400) with non-ascii char at end of setting 20:26
this is probably noise, so it doesn't matter 20:27
jnthn lizmat: Note that anything in latin-1 is OK
lizmat colomon: I figured as much, will look at this later tonight / tomorrow
afk again&
20:27 cognominal joined
woolfy lizmat: you're still here :-) 20:29
FROGGS *g* 20:30
masak woolfy! \o/ 20:31
FROGGS .u ø
yoleaux U+00F8 LATIN SMALL LETTER O WITH STROKE [Ll] (ø)
lizmat
.oO( woolfy is demoing IRC to a friend of ours )
20:33 BenGoldberg joined
FROGGS I think there are no other non-latin chars left 20:35
20:36 colomon joined
timotimo irc is truly a marvel of modern engineerspersonship 20:37
20:37 Mouq joined
Mouq Hey #perl6 20:39
What does $(1,2,(9,10)) mean?
So, for example, if I create a Parcel ((1,2,(9,10))=>"hiding",5), I access it with .[0].{$(1,2,(9,10))} 20:40
I don't know why anyone would find this useful, of course 20:41
Well, actually... 20:42
jnthn $(...) is the same as (...).item 20:43
Mouq Oh! Okay, cool. Thank you 20:44
jnthn Note that @(...) is the same as (...).list, and same for % and .hash 20:45
Mouq So it's forcing a context
jnthn Yes 20:46
Mouq Cool
timotimo this is taking me a bit longer than it should ... 20:48
jnthn timotimo: The optimizer thing?
timotimo no, getting the benchmark up 20:49
jnthn oh :)
Was gonna say, you shouldn't feel bad about optimizer hacking taking a while :)
timotimo now i'm starting it 20:50
20:54 ssutch joined
timotimo well, i'm starting the newest build at least 20:54
lizmat hmmm… quite a few spectests are failing for parakudo atm 20:56
$ perl6 t/spec/S02-literals/string-interpolation.t
use of uninitialized value of type Any in string context in any at src/Perl6/Grammar.nqp:933
===SORRY!=== Error while compiling t/spec/S02-literals/string-interpolation.t
Leading 0 does not indicate octal in Perl 6; please use 0o1 if you mean that
20:57 konundra left
lizmat all test failures seem to be like that: although the subtests seem to pass 20:57
hmm.. could it be that warnings all of a sudden became fatal ? 20:58
timotimo need to leave my workspace for a bit 20:59
lizmat r: sub f ($x is copy) { my $x } 21:00
camelia rakudo 89216f: OUTPUT«Potential difficulties:␤ Redeclaration of symbol $x␤ at /tmp/a2Efi2HMHw:1␤ ------> sub f ($x is copy) { my $x ⏏}␤»
lizmat in HEAD this has become:
===SORRY!=== Error while compiling -e
Redeclaration of symbol $x
jnthn lizmat: Maybe a consequence of the recent moritz++ patch?
lizmat feels like it 21:01
although looking at the diff, it doesn't seem to be 21:02
jnthn lizmat: fwiw, fe419d2 I spsectested on Parrot and it didn't seem problematic. So it's probably between that and HEAD. 21:05
lizmat making / spectesting without moritz's patch
yup, it's moritz's patch 21:10
21:11 benabik left
timotimo 10/43: Testing while_push 21:12
21:13 vk_ left, skids left 21:17 konundra joined
timotimo these benchmarks take soooo looooong 21:22
21:24 btyler_ joined, dmol left 21:27 atrodo left, btyler left 21:29 kingbeast joined 21:30 atrodo joined 21:34 xinming left 21:36 xinming joined
timotimo 19/43: Testing for_assign ... 21:36
masak heh. I still find wanradt's question kinda backwards in gist.github.com/masak/5768668 21:38
"have you considered using Perl 5 instead?" -- no, I guess I didn't consider that.
tadzik I don't suppose $remaining_time.Int works in Perl 5 21:42
timotimo you could have used - in identifiers
that's not in perl5, right?
masak :P 21:43
dalek kudo/use-from-java: 1d8f4d7 | jnthn++ | src/Perl6/Grammar.nqp:
Start processing use more smartly.

This handles it through the usual longname parser, meaning we now can pick out the name itself from any colonpairs.
kudo/use-from-java: 1dbc3d8 | jnthn++ | src/Perl6/ (4 files):
Pass use/need colonpairs to module loader.

This also catches any use of :from<...> and complains for now; this is the hook where :from<jvm> support will go.
perigrin tadzik: using MooseX::Types it works but it doesn't do what you'd expect or want :) 21:45
jnthn lizmat: Above will help when ver/auth stuff is reached also :) 21:46
timotimo \o/
lizmat I was looking at it and pleasantly surprised :-)
dalek kudo/nom: df814a2 | (Elizabeth Mattijsen)++ | src/core/Exception.pm:
Fixes spectests that were broken by 156de3be59136b3b75f4eb51c7ee1697667a5cfe
FROGGS hmmm, my version was just a bit more verbose compared to jnthn++'s :o) 21:47
lizmat moritz: seems you fatalized a lot of warnings
fixed this by: 21:48
-my class X::Comp::Group does X::Comp {
+my class X::Comp::Group is Exception {
which was the original state before your patch
not sure whether it is the right thing to do, but it fixes the spectests 21:49
jnthn lizmat: Yeah, doing it 'cus I want some basic use foo:from<java>; support for my JVM talk at YAPC::Eu 21:50
lizmat :) 21:51
.tell moritz please check df814a2, it was needed to fix many spectests, but fear it is not the solution you had in mind 21:56
yoleaux lizmat: I'll pass your message to moritz.
lizmat on that thought, I call it a night: more early tomorrow 21:57
sleep&
jnthn 'night, lizmat++ 21:58
22:00 zwut00 left
slava where is YAPC:Eu? 22:03
I'll look it up, nvm
jnthn Kyiv
slava ooh, maybe I should go
stop by in my home town, too 22:04
jnthn There's a Perl 6 hackathon on Sun, then talks Mon-Wed. :)
timotimo is it already on the upcoming weekend? 22:08
tadzik yep
timotimo oh my
after learning about the nonexistence of the exam directly adjacent to that event, maybe i should have reconsidered and tried to get there 22:10
a bit late now
22:12 FROGGS left
timotimo 39/43: Testing visit_2d_indices_cross ... 22:20
not long now
22:22 spider-mario left
timotimo 39/43: Testing visit_2d_indices_cross ... 22:23
java.lang.StackOverflowError
should that be the error mode? o_O
jnthn gather/take can sometimes fail in that way
timotimo all right 22:27
yay benchmark run done. let me whip up some graphs
t.h8.lv/p6bench/after-jvm-inline.html - here we go 22:30
wow, not bad in some of them!
jnthn looks 22:31
timotimo 156de3b is the new one fwiw
tadzik wow 22:32
an order of magnitude here and there
22:35 btyler_ left
diakopter what does while empty look like 22:35
can you paste the source of the tests?
jnthn diakopter: They're all in the perl6-bench repo, fwiw
tadzik timotimo: maybe it's not too late 22:36
timotimo er, some are a bit changed up
tadzik I bought the conf ticket yesterday, booked the hotel yesterday...
timotimo i'm definitely not spontaneous enough
;)
tadzik not with that attitude! :) 22:37
timotimo yup
diakopter which perl6-bench repo
timotimo hold on, i'll push up my local dirty changes 22:38
diakopter you so dirty
timotimo github.com/timo/perl6-bench/tree/latest-stuff in the microbenchmarks.pl file 22:39
feel very free to contribute changes and/or new micro or macrobenchmarks 22:41
diakopter japhb said he was being very careful not to microoptimize individual tests for each language 22:42
but to keep the look as close as possible instead
timotimo ah
well, in some cases there was pathologicality introduced ... or something
i think most of the 1s are no longer necessary
diakopter I thought () allocated 22:43
wouldn't a 1 be faster?
slava jnthn: I just told someone that you are working on rakudo-jvm :)
the thought of using perl6 instead of javascript (rhino) appealed to them greatly 22:44
timotimo the point was hat nested for loops used to create ridiculous amounts of list elements
japhb_ Anyone happen to remember the name of the project to use the ipython notebook protocol to talk to Rakudo? (Or even better, knows the status?) 22:45
diakopter
.oO( someone must be using python... )
22:46
japhb: timotimo
github.com/timo/iperl6kernel
22:48 kingbeast left
timotimo i did, yes. it's very far from usable, though 22:48
got blocked somewhat by zeromq and lack of threading
dalek kudo/use-from-java: e40c9bc | jnthn++ | src/Perl6/ModuleLoader.nqp:
Add a mechanism to register :from loaders.
22:51
kudo/use-from-java: 42c2152 | jnthn++ | src/Perl6/ (2 files):
Refactor to make alternative loaders easier.

This relaxes what is returned to just be something hash-ish, not a full-blown context.
kudo/use-from-java: d3b14a7 | jnthn++ | / (2 files):
Very basic :from<java> support.

The objects are decidedly lacking in sugar so far, not to mention the marshalling of Perl 6 types will need a lot of work. But you can do:
   use java::lang::System:from<java>;
   say System.currentTimeMillis();
And it works.
22:52
lee_ wow, cool 22:56
22:57 btyler joined
colomon \o/ 22:58
diakopter jnthn: so it follows the "import" semantics of Java? 23:01
jnthn diakopter: apparently :)
diakopter heh. 23:02
if someone has a couple hours, feel free to volunteer to help me set up rakudo-jvm on a new evalbot host
23:03 takesako_______ joined, Bucciarati joined, segomos joined, nwc10 joined 23:04 dagurval joined, Hor|zon joined, szbalint joined, avuserow joined
masak 'night, #perl6 23:05
diakopter 0/ 23:06
23:06 FOAD left, FOAD joined 23:27 leont left
timotimo i'm kind of saddened that our rc-forest-fire isn't running anywhere near fast enough for the benchmark framework to even consider a second run ... 23:29
23:30 skids joined
japhb_ timotimo, agreed, definitely. :-( 23:42
diakopter, Well, I have to use Python anyway, I figured I might as well enjoy tab completion in my Perl 6 REPL ... 23:43
timotimo ipython is darn excellent. 23:44
japhb_ timotimo: Wiill zeromq and threading still be a problem when use-from-java is merged, assuming I can otherwise use rakudo-jvm?
23:46 Rotwang joined
timotimo dunno. i'd personally hope for something more like zavolaj-on-jvm or something to get zmq 23:46
japhb_ I had to modify the parameters for rc-forest-fire several times to even get any useful data out (at first it would generate and display the first frame and already be over enough_time)
timotimo ipython has a requirement for a server to listen and respond to pings regularly, otherwise the frontend will shut down
23:47 btyler left
japhb_ nodnod 23:47
timotimo if you don't have that in a thread, you're dooooooomed
japhb_ nodnod 23:48
timotimo did you see my last results?
japhb_ Not yet, no. Link? 23:52
timotimo t.h8.lv/p6bench/after-jvm-inline.html 23:54
jnthn gave our jvm port support for compile-time inlining of subs and such