Parrot 1.3.0 "Andean Swift" released | parrot.org
Set by moderator on 23 June 2009.
00:04 davidfetter joined 00:08 AndyA joined
cotto eew. Good luck with that one. 00:10
chromatic It's doable, but first I have to mock something. 00:12
bacek_at_work hi again. 00:22
purl oh, you're back!
pmichaud wonders what/who chromatic will mock this time :-)
chromatic The DarkPAN. 00:25
purl rumour has it the darkpan is the 90% of modules that you can't see, because they're not on CPAN. The dark matter of the Perl world
00:32 skids joined
pmichaud chromatic: so far the patch in TT #800 is working great for rakudo (without ICU) 00:42
also, all parrot tests pass (without ICU)
so I think it's good, provided we don't need a deprecation cycle for it :-) 00:43
chromatic I can't imagine why we would.
pmichaud <p5p> Well, there could be some applications out there that expect the command line arguments to come in as fixed_8, so we can't change it </p5p>
chromatic Oh, don't tempt me.
pmichaud :-P 00:44
anyway, I'm happy with the patch; +1 from me.
chromatic "My code has to run on several different major versions of Perl; I can't take advantage of these new features."
"You have a change management problem. Not me."
00:46 kid51 joined
dalek rrot: r39863 | chromatic++ | trunk/src/embed.c:
[src] Changed Parrot's command-line argument processing to treat command-line

See TT #800. (This needs a test case.)
00:47
01:03 nopaste joined
dalek rrot: r39864 | Infinoid++ | trunk/t/op (2 files):
[t] Un-TODO some tests on openbsd per report in TT #758. reezer++
01:04
chromatic Okay, making the JIT work there is trickier. 01:17
For primitive out parameters, we have to save the pointers we may have converted to the primitives, then after the call perform the assignments back to let argument conversion handle them again. Lovely. 01:18
japhb is hoping that by some magic chromatic's work will make OpenGL and NCI JIT get along again ... 01:21
chromatic I doubt it.
01:21 smash joined
smash hello everyone 01:22
kid51 Howdy, smash, you fine fellow!
.... as purl used to say :-)
smash hehe 01:23
davidfetter wonders whether rsrsrs is also a portuguese thing 01:57
chromatic INCOMING 01:59
purl i guess INCOMING is pause.perl.org/incoming/
dalek rrot: r39865 | chromatic++ | trunk (2 files):
[NCI] Revised tools/build/nativecall.pl so that src/nci.c only builds the NCI

build call frames. This reduces the size of src/nci.o by 86.65% and the size of libparrot by 5.58%.
02:01
02:04 silug joined
jdv79 chromatic: what tools do you use when you profile and/or trace parrot? 02:22
chromatic callgrind and kcachegrind 02:24
02:39 zak_ joined 02:42 mikehh joined
cotto Heh. Slashdot is broken. 02:51
I may have to find something productive to do.
and it's back 02:52
smash & 03:13
03:16 Theory joined 03:17 Zak joined
dalek ose: r37 | Austin++ | trunk/src/ (4 files):
Added 'clone' builtin
03:24
03:31 japhb joined
dalek ose: r38 | Austin++ | trunk/ (9 files):
Moved PCT::Node stuff, started on test cases
03:34
ose: r39 | Austin++ | trunk/t/library/PCT:
Dropped PCT
03:44
ose: r40 | Austin++ | trunk/t/library/pct (4 files):
Re-added PCT one level down
03:49
04:05 Andy joined 04:07 cognominal joined 04:53 Andy joined
dalek TT #778 closed by allison++: Make FileHandle Subclassable 04:58
05:50 Austin joined
Austin Howdy. 05:50
pmichaud: ping? 05:51
05:51 uniejo joined
Austin bug bug bug 05:55
06:14 clunker3 joined
cotto where? where? where? 06:18
too late
06:27 barney joined 06:30 flh joined
Tene Aw, he's gone 06:55
dalek tracwiki: v6 | cotto++ | RewritingPMCsInNQP 07:00
tracwiki: change existing example to minimize changes to nqp, add pmc_new
purl dalek: that doesn't look right
dalek tracwiki: trac.parrot.org/parrot/wiki/Rewrit...ction=diff
cotto < purl-- > 07:02
purl, dalek is a bot 07:03
purl ...but dalek is #parrot's spammy little rss bot or (see: dalek plugins)...
cotto purl, sudo dalek is a bot
purl OK, cotto.
cotto <3 parallel testing 07:04
is META.yml of any further use? 07:08
dalek rrot: r39866 | cotto++ | trunk (10 files):
[ops2c] remove OpTrans::Compiled, which was only used by a tool removed back in r28978
07:09
cotto That "Compiled" runcore is an interesting idea. It doesn't sound entirely unlike what we're aiming to do with L1 jitting. 07:10
07:18 iblechbot joined
bacek_at_work cotto: how is you ops2c groking going? 07:37
cotto bacek_at_work, I have a basic idea of how it works and am starting to think about what the architecture for the replacement should look like. 07:40
I still don't have a good name. 07:41
"cops" has potential for puns, but doesn't have much flair.
bacek_at_work grok - Gready Ops Kompiler
cotto I'd prefer not to incorporate misspellings into the name 07:42
and an infinite recursion would be nice
but that's secondary and I'm not at the point where I have to start writing code anyway. 07:43
bacek_at_work ok. Remember, you promised to put something before next #ps :) 07:44
cotto I said I hoped to do that. 07:45
but yeah, that's part of my goal 07:46
bacek_at_work ok-ok. Wanna grammar for current ops? As starting point.
cotto Heh. The grammar is probably the easiest part.
I'm actually looking forward to writing it. 07:47
bacek_at_work That's why I offer it ;)
cotto NO. IS MINE. YUO NOT CAN HAS.
bacek_at_work nopaste? 07:48
clunker3 pasta.test-smoke.org/ or paste.husk.org/ or nopaste.snit.ch:8001/ or rafb.net/paste or poundperl.pastebin.com/ or paste.scsys.co.uk/
purl somebody said nopaste was at nopaste.snit.ch/ (ask TonyC for new channels) or poundperl.pastebin.com/ or paste.scsys.co.uk/ or App::Nopaste or tools/dev/nopaste.pl or at www.extpaste.com/ or paste.scsys.co.uk (for #catalyst, #dbix-class, #moose and others) or gist.github.com/
nopaste "bacek" at 211.29.157.151 pasted "ops grammar for cotto" (43 lines) at nopaste.snit.ch/17088 07:49
cotto That's a lot less than 43 lines.
bacek_at_work :) 07:50
There is 41 empty lines for you to fill
cotto um... thanks?
bacek_at_work YOU WELCOME 07:51
cotto btw, how's your nick pronounced? 07:54
bacek_at_work pronounced own nick loudly, hoping cotto can hear it 07:55
cotto listens carefully but doesn't hear anything 07:56
bacek_at_work Can you give me idea how to explain it? :) 07:57
cotto Just use sounds from other English words. 07:58
bacek_at_work b as in buck 07:59
a close to "u" in buck 08:00
c as in "cent"
e as in "cent"
k is just k
cotto that works. Thanks. 08:01
bacek_at_work paid 15K to Tax Officce recently...
cotto ouch
szbalint australian dollars?
purl australian dollars are nearly at par with Canadian dollars.
szbalint it's still a nice pile...
bacek_at_work szbalint: is there any other dollars?
cotto lots 08:02
bacek_at_work and they somehow useful???
szbalint I wouldn't mind paying 15k in taxes if it's in zimbabwean dollars
bacek_at_work "k" in zimbabwe stays for "kilograms"
cotto bacek_at_work, en.wikipedia.org/wiki/Dollar#Nation...2dollar.22 08:03
I think catpenny is my favorite measurement of currency
www.bash.org/?743428 08:04
08:04 mikehh joined
cotto catpenny? 08:05
purl i think catpenny is your favorite measurement of currency
cotto catpenny is also www.bash.org/?743428
purl okay, cotto.
cotto catpenny? 08:07
purl well, catpenny is your favorite measurement of currency or www.bash.org/?743428
bacek_at_work ok, time to go home and make some dinner 08:08
cotto yay food 08:09
bacek_at_work yay, I missed my lunch today...
cotto Wow. ops code gets mangled into some impressive ugliness.
bacek_at_work erm... I expected it should' be just some wrapping around without touching c-body... 08:11
cotto saying that the c-body gets touched is an understatement 08:12
bacek_at_work I've got naming idea. 08:13
cotto but I think that the code can be much simplified by making the parser aware of the ops-specific constructs
do tell 08:14
bacek_at_work "COCK" is Ops Crushed and Killer
afk &
cotto so...many...puns... 08:15
yet so inappropriate
chromatic Yeah, that one's on my "Keep Looking" list. 08:16
cotto If he snuck in Russian profanity we might not know until it was too late. 08:18
chromatic That's why we have Jonathan. 08:19
szbalint I know one thing, never try to find a dermatologist in russia 08:20
:)
cotto ? 08:21
szbalint for the same reason democrats are sometimes spelled dermocrats 08:23
mikehh make fulltest PASS at r39866 - also pre/post config, smolder - Ubuntu 9.04 Amd64 08:37
08:42 bacek joined 08:43 janus joined
bacek hi again 08:44
purl oh, you're back!
janus howdy 08:46
bacek Howdy, janus, you fine fellow! 08:52
purl: see! Why I have to your job, stupid girl?
purl i haven't a clue, bacek
cotto Does anyone know offhand what the purpose of src/ops/ops.num is? 08:53
bacek cotto: make your life harder? 08:54
cotto It seems intuitively that ops could be sorted and numbered without the need for an extra file (especially since it needs to be updated manually), but I haven't dug deeply enough to figure it out either way. 08:56
08:57 zak_ joined
bacek ops.num is mapping between op name and pbc/switch statement in generated code. 08:59
basically - useless from my pov
cotto That's what I'm thinking too, but I definitely don't have the brainpower to remove it.
bacek, feel free to do it if you want to, otherwise I'll tackle it tomorrow. 09:00
It's nice to simplify existing code.
night 09:01
bacek night
jonathan ops.num is to do with PBC compat - it lets us keep opcodes having the same number, and means new ops can be given numbers greater than those of existing ones. 09:02
bacek jonathan: # - deleting/changing/inserting existing ops in ops.num 09:11
It's from PBC_COMPAT.
So adding/removing ops will give incompatible PBC with older version anyway
jonathan OK, but the assumption isn't that Parrot will only ever be able to handle bytecode files of one version, or at least that we'll have tools. 09:15
And they'll be vastly easier to write if new opcodes just go on the end of the existing set.
bacek Agreed. But looks like L1 approach will make it deprecated. 09:17
09:25 masak joined 09:35 MoC joined 11:32 bacek joined 12:17 Whiteknight joined
afk_coke msg cotto if you're not sure how it works, you can still make sure it compiles. (same trick as we use in pod examples.) 12:33
purl Message for cotto stored.
Coke L1 is also magical unicorns and flying puppies. 12:52
purl okay, Coke.
13:01 skids joined 13:05 Andy joined
Coke sees a "let's blame Larry Wall" thread in the cfeclipse-users mailing list. 13:18
Coke ponders enabling a kibo-by.
13:21 mikehh joined 13:23 ruoso joined 13:31 ruoso joined 13:33 szabgab joined 13:38 ruoso joined 13:40 ruoso joined 14:17 ruoso joined 14:25 eiro joined 14:27 eiro joined 14:32 mikehh joined
Whiteknight allison++ # kicking ticket ass 14:33
14:36 amuck_ joined 14:48 Theory joined 14:59 davidfetter joined 15:02 maettu joined
dalek TT #802 created by mberends++: freeze opcode segfaults on working bytecode from Rakudo 15:21
kudo: ec68db8 | jnthn++ | src/pmc/perl6multisub.pmc:
When we're analysing a candidate, record at that point whether we can make a purely nominal type decision or if we'll have to do a bindability check. (Later we can probably use this as a cache criteria.)
15:27
kudo: dcf4c6d | jnthn++ | src/ (3 files):
Part one of an extensive refactor of multiple dispatch. This fixes various issues with binding more compex signatures. On Win32 at least, a few more tests trip up on the Parrot GC heisenbug. Also regress one C<is default> test that I suspect may be dubious anyway.
15:33
16:05 Austin joined
Coke rakudo: 3??1::0 16:07
polyglotbot OUTPUT[ResizablePMCArray: Can't pop from an empty array!␤in Main (src/gen_setting.pm:3279)␤]
Coke pmichaud: (for you.)
Austin pmichaud: ping?
Coke pmichaud: (yes, I know that's invalid syntax)
pmichaud: moving to #p6, nevermind. =-) 16:08
16:26 darbelo joined
Tene Austin: ping? 16:27
pmichaud Austin: pong
afk, lunch 16:32
16:35 chromatic joined 16:38 Psyche^ joined 16:45 davidfetter joined
Austin Tene: pong 16:50
16:50 Andy joined
Austin msg pmichaud Sorry, I was slaving away on a new ticket. 16:50
purl Message for pmichaud stored.
dalek TT #803 created by Austin_Hastings++: PCT emits bogus code for getattribute on named register variable
16:53 Austin_Hastings joined
Austin_Hastings Tene: pong? 16:56
Austin moo. 16:57
dalek ose: r41 | Austin++ | trunk/build/Makefile.in:
Added script for running tests
16:58
cotto Do we still need META.yml? 17:01
messages erase
darbelo cotto: delete it and see what breaks. 17:03
dalek cnum-dynpmcs: r98 | darbelo++ | trunk/t/ (4 files):
Switch some tests to use IEEE 754 comparisons.
17:07
rrot: r39867 | cotto++ | trunk (2 files):
[examples] move PGE demo to examples where it'll be tested for compilability automatically
17:12
Coke hurls rt.perl.org/rt3/Ticket/Display.html?id=63592 for a pure PIR segfault. 17:24
enjoy.
chromatic META.yml is for the CPAN/PAUSE.
cotto istr that we're not doing CPAN releases anymore. 17:26
Coke we are. 17:27
just on stable. 17:28
s/stable/supported/
cotto Coke, I don't see anything about that in the release manager guide. 17:30
Coke cotto: based on conversations with allison.
NotFound Coke: RT #63592 is not a bug, is a feature ;) 17:32
jonathan Coke: At a quick glance under the debugger, looks like stack overflow.
cotto Coke, could you update the guide?
NotFound Is just the way we handle exceptions from C, together with the fact that the majority of exceptions are thrown from C 17:34
BTW, Parrot_str_substr perldoc says nothing about what does on error conditions. 17:37
17:37 Austin left
Coke cotto: no, but I can open a ticket to make someone else do it. 17:39
NotFound Neither pdd28
Coke I do find it interesting that the original while loop isn't checking that it's just generating an infinite amount of FAIL. 17:40
NotFound What perl6 substr is supposed to do?
Coke rakudo: 0.substr(-10)
polyglotbot RESULT[undef]
pmichaud darn, Austin left again.
Coke but that undef is really a Failure, which creates a new Exception. 17:41
so that perl6 sample code is just a way to show off memory leaks. =-)
NotFound Is not a memory leak.
Ah, you mean, if it worked. 17:42
Coke ?
it's a do nothing loop. just generates undef each time through.
you're right, it's not blowing the memory, my bad. 17:43
jonathan: if it's stack overflow, doesn't parrot already trap for that? 17:44
NotFound Let me rephrase it another way: What rakudo substr expects parrot substr will be doing?
Coke and, given that code... what stack?
NotFound: that doesn't impact the bug in the pir.
I presume they're expecting it to fail.
(given those params.) 17:45
jonathan Coke: C stack
NotFound Coke: no, but given that parrot documentation says nothing, doing what a rakudo expects can be a good guide.
Coke NotFound: we're already doing that.
NotFound Coke: then there is no bug X-)
Coke *sighs*
jonathan If continually throwing and catching a C exception eventually leads to us filling up the C stack, there *is* a bug. 17:46
NotFound jonathan: continually throwing a exception *from C* and cathcing it *in pir* 17:47
jonathan OK, but still.
pmichaud looks like a code needs a way to unwind from the exception handler. 17:48
NotFound Well, a solution is to not throwing the exception from C. To do that, I need to know what we want it to do.
pmichaud s/a/the/ 17:49
NotFound pmichaud: there is no way, or we don't have the inferior runloop problem.
jonathan That's not a general solution.
If in the long run throwing lots of C exceptions hurts us, then we're gonna have issues with long-running apps. 17:50
pmichaud it's "throwing lots of C exceptions and never exiting the routine that throws them", though.
jonathan Ah.
Tene How does this change with the pcc rewiring? 17:51
pmichaud in the case of
while 1 { 0.substr(-10) }
I would expect the exits from the .substr() method to clean things up a bit
NotFound The general solution is to redesign the way we catch exceptions.
pmichaud and if not there, then the exits from the inner block
NotFound: actually, I think it's more that we need explicit "leave" semantics. 17:52
NotFound The problem is, I think: the exception handler is run in an inner runloop, and the handler can't know or handle that fact. 17:54
pmichaud that sounds a bit like a problem as well, yes. 17:55
NotFound And the fact is caused by the fact that throw_from_c and throw_from_op do very different things.
So the non general solution for the substr thing is to find a way to throw from op. 17:57
dalek kudo: b9e87d4 | pmichaud++ | docs/spectest-progress.csv:
spectest-progress.csv update: 412 files, 11629 passing, 6 failing

   S02-whitespace_and_comments/unicode-whitespace.t aborted 1 test(s)
   S12-enums/basic.rakudo 27 - short name of the enum without parenthesis is an enum
   S32-num/rand.rakudo aborted 4 test(s)
18:05
NotFound The problem is in src/eceptions.c:387 - Parrot_runops_fromc_args(interp, handler, "vP", exception); - This never returns 18:08
There is a possible solution that I don't think people want: ban push_eh label 18:11
Or clearly document that you are never supposed to loop on it. 18:12
chromatic allison and I discussed a change to exception syntax in PIR to make this possible. 18:13
18:13 abesapien joined
chromatic It's impossible to detect when an exception handler has ended and resumed control flow elsewhere, at least without syntax to mark it. 18:14
We came up with some ideas to denote the scope of execution of exception handlers in PIR.
She agreed to write them up, but that was a while back.
I still have three short notes on my whiteboard right *rap rap* here.
NotFound And semantic on what to do in that case? 18:18
chromatic The only change to semantics is that they explicitly mark where the exception handler's control flow ends so that Parrot can exit the inferior runloop. 18:19
NotFound So the longjmp already present at the end of Parrot_ex_throw_from_c is supposedly doing the right thing? 18:22
chromatic Yes. 18:23
The intent is correct anyway. I won't speak to the implementation.
18:23 zak_ joined
NotFound Will not be easier then to directly do that, after setting the exception args, instead of invoking a runloop? 18:24
18:24 mberends joined
chromatic This gets complicated if you expect also to have exception handlers written in C, I believe. 18:25
NotFound Exceptions handlers in C already follow a different path.
chromatic The only way I've ever understood all of the corner cases is to draw a matrix of all invocation/handling/leaving paths. 18:26
NotFound search his blue and red pills
The actual case is a exception thrown from C and catched in pir 18:27
18:42 zak_ joined
chromatic Catch enough of those, and you run out of C stack, because you never longjmp back to the spot of the thrown exception? 18:44
NotFound Yes, that is RT #63592 shows 18:46
chromatic I can't think of a good way to handle that. 18:47
That is, without calling setjmp on every trip through a runloop or rewriting the system never to throw exceptions from C or rewriting the system not to use C.
NotFound I'm taking a look at a possible solution: doing the same as throw_from_op does, just needs a way to pass the continuation address to a setjmp to the runloop 18:48
A new field in parrot_runloop_t, maybe. 18:53
19:08 jdv79 joined
dalek kudo: fb21797 | jnthn++ | src/ (2 files):
Get us handling named arguments more correctly in multiple dispatch. A type-match fail on a named or a missing required named parameter can now cause a candidate to not be considered.
19:12
kudo: 7041eb1 | jnthn++ | :
Merge branch 'master' of git@github.com:rakudo/rakudo
nopaste "NotFound" at 213.96.228.50 pasted "A possible soution to exceptions throw from C - RT #63592 - Uncleaned code" (89 lines) at nopaste.snit.ch/17093 19:15
NotFound chromatic: Can you take a look at this?
chromatic Looking. 19:16
+ address = VTABLE_invoke(interp, handler, NULL);
Will that ever invoke an NCI PMC? 19:17
NotFound Good question. I don't think we have a test of using a NCI as exception handler. 19:18
chromatic Nothing jumps out at me about that being wrong; it seems worth testing.
NotFound I'll clean up it and open a trac ticket, mentioning the RT ticket on it. 19:19
particle it just occurred to me that dalek should be renamed to knit 19:28
then our two favorite bots would be knit and purl
19:31 iblechbot joined
NotFound Will you kill me with a chainsaw if I add a goto? 19:33
dalek rrot: r39868 | cotto++ | trunk/lib/Parrot/OpTrans (2 files):
[ops2c] make the source of some #defines easier to trace - no functional changes
chromatic It's hard to manage this without a goto. 19:35
NotFound The alternative can be using other setjmp, which can be costly 19:36
The cleaned version pass all parrot tests 19:37
chromatic How about the RT?
purl well, the RT is just RT (bestpractical.com/rt) or (:rt3) or (: rt bugs) or Obra's trouble ticketing system or the first IBM RISC workstation (www.contrib.andrew.cmu.edu/~shadow/ibmrt.html) or the bombsquad or the Right Thing or very very capable and open-source or an application framework that bundles a ticketing system or obra's baby or SOOOO slow :-S or email mailto:perlbug-owner@perl.org for access
NotFound The RT runs a lot of time without eating the stack 19:38
The pir version, that is. I don't have a rakudo tree ATM 19:39
cotto NotFound, just don
't do this: thedailywtf.com/Articles/Longjmp--F...ED!!!.aspx
NotFound cotto: not sure is appliable, one more setjmp in a C function that already heavily depends on one, is not much more risk. 19:40
The speed concern, yes, surely impacts negatively, but we don't enter runloops with a high frequency, I suppose. 19:41
But I pefer the goto anyway, sure. 19:43
cotto it was more an excuse to post a link to that site than serious advice 19:51
You're more than smart enough not to put a setjmp or longjmp in a tight loop like that. 19:52
NotFound Don't worry, I don't take seriously any advice ;)
TT #804 created with the cleaned patch 19:56
dalek TT #804 created by NotFound++: Avoid entering inner runloop when catching a exception thrown from C with ...
20:33 jdv79 joined
dalek cnum-dynpmcs: r99 | darbelo++ | trunk/t/multiply.t:
Kill tests that requere more that 512 digits.
20:34
cotto bacek_at_work, ping 20:40
20:47 maettu left 20:55 bacek joined
cotto bacek, pign 20:57
(I guess that's the non-kosher version of ping)
21:03 Whiteknight joined
cotto bacek, reping 21:19
bacek cotto: pong
good morning, #parrot
cotto bacek, the more I think about it, the more I become convinced that Parrot will need some significant internal changes to support pure L1 ops and PMCs, and that an PCT-based pmc2c and ops2c will be necessary but not sufficient. (NOTE: When I say "L1", I mean anything that compiles to L1.) (lots more) 21:20
From what I can see, it seems like it's a better idea to do the following:
* go ahead with pmcc, get it emitting C similar to pmc2c
* get it working with L1 and emitting C
* switch all PMCs over to L1 (this can be done incrementally with frequent tests)
* do all of the above steps, except for ops
* officially deprecate C-based PMCs and ops and write tutorials for HLLs on how to switch to new L1-based equivalents
* after the deprecation takes effect, make whatever major internal changes Parrot requires for pure L1-defined ops and PMCs
- this is the hard part since we won't be able test anything until all of Parrot is updated
- we may figure out a better way as we approach this point
* take a vacation, because anyone working on this project will need it by the time the conversion is done
This can be done gradually with only one major invasive change. In the new approach you suggested, we'd have an additional major transition where we'd need to convert all C-based PMCs to L1-based at once without the possibility of incremental change or testing. I think it's a much better idea to use the original plan, even if pmcc and the ops compiler are only temporary, because it'll mean that we'll only have one place where we need to m
ake massive changes without being able to test them incrementally. 21:21
bacek erm... 21:24
Why do you think my approach will require converting all PMCs in one shot? 21:25
cotto I'm assuming that whatever code allows for pure L1 PMCs will exclude the C-based PMCs. 21:26
bacek how that? 21:27
We will be able to call C from L1.
C PMC is bunch of C functions
cotto You're right. That should have been obvious. 21:28
bacek So, we can convert PMC one-by-one
Did I missed the point?
cotto I still prefer being able to convert PMCs function-by-function, but I was making an incorrect assumption. 21:29
chromatic PMC-by-PMC seems reasonable enough.
Any PMC that's too big to do that in one swoop is too big.
cotto agreed
Whiteknight cotto: you had mentioned that you didn't think NQP was the right tool for rewriting PMCs?
cotto I'm not convinced of that yet. 21:30
Whiteknight we'd obviously need to add some extensions that aren't part of the Perl6 spec 21:31
cotto It seems like nqp doesn't have the right model for low-level PMC implementation.
It's certainly not its original purpose. 21:32
Whiteknight things like the "has" keyword could be repurposed to specify ATTRs for instance
jonathan What will L1 look like?
particle and method
we need to add vtable
jonathan Or more to the point (more)
Whiteknight we add a keyword "vtable" to specify those
jonathan I have the odd PMC that does really rather complex stuff. Re-writing it in an assembly-ish language could make it a killer to maintain. 21:33
Whiteknight jonathan: that's really up in the air. I don't see any reason why we would need any more then a basic human-readable format. We won't be hand-writing L1.
jonathan Whiteknight: OK, so what would we write the PMC bodies in?
cotto jonathan, what PMC? It might be a good example to look at.
jonathan Or is that still open for discussion yet?
cotto: See perl6multisub.pmc. 21:34
particle Q:C { ... } ;)
Whiteknight jonathan: that's the question we're talking about now. I think a variant of NQP would do nicely
chromatic jonathan, I think it's open for discussion. Certainly a language that compiles down to L1 would be sufficient.
cotto also, we expect *very* little L1 to be written directly.
Whiteknight or something C-like to expedite the transition, like Austin's "close" language
jonathan OK, I'd misunderstood and thought the expectation was we'd write them in L1. Now I'm a whole lot less concerned.
particle why don't you compile c to l1?
jonathan Probably because of the memory model.
Whiteknight yeah, we're really trying to divorce ourselves from the C semantics 21:35
jonathan
.oO( what memory model? )
particle sure, but you can convert as you go
cotto particle, do you want to write a C parser and compiler?
particle cotto: those exist already
Whiteknight true. I don't think the conversion is going to be as big a deal as some people are thinking it will be
particle emit l1 from gcc
i'm kidding, folks. 21:36
Whiteknight that's a wasted effort, to write an entire GCC backend for a one-time translation
jonathan Phew!
cotto jonathan, ditto
Whatever language we use, it shouldn't have := 21:37
Actually, I think it may be more productive to go through some existing PMCs and make a list of what language features are needed than to say how nqp could be made to work. 21:38
chromatic Maybe so.
particle just start writing them in nqp-like pseudocode 21:39
nqp is as good as any language for a start
it has blocks, loops, and declarators 21:40
Whiteknight feels a blog post coming on...
bacek particle: same for PIR
cotto but not types/structs, which are of some importance to the C code we've got
particle loops? pir?
jonathan cotto: := is in NQP because it wants to be a subset of Perl 6, and binding semantics are a good bit easier to deal with than assignment semantics. 21:41
(Getting assignment right on Parrot has been non-trivial.)
cotto I understand the reason behind it, but it's still irritating. 21:42
jonathan The syntax or the semantics?
Whiteknight both
cotto what he said 21:43
21:44 jan joined
particle sd++ # i have a local copy of parrot bug queue now 21:46
sd clone --from trac:trac.parrot.org/parrot # it's that easy
21:51 preflex joined
cotto What about using a subset of C? 21:52
Hmm. I think I'll go look at PMCs and see what language features they need. That'll give us a better basis for any language decisions. 21:54
21:56 Zak joined
Infinoid happy Thursday all 22:02
bacek O NOES... It was Fryday few minutes ago!!! 22:06
jonathan Huh, but...it was Thursday a few minutes ago?!?! 22:08
22:08 skids joined
jonathan Ooh, Friday means end of the week. :-) 22:09
22:10 Coke joined
bacek Looks like expand_hash loosing one new item on each expand... 22:16
(gdb) p hash->entries
$4 = 12
(gdb) p old_size
$5 = 16
(gdb) p new_size
$6 = 32
22:20 Limbic_Region joined
Whiteknight losing an item? wtf? 22:22
that's not happening in trunk is it?
jonathan wtf really?
If that *is* happening in trunk, and its losing them in the "no longer GC referenced" sense, that could easily explain some of the "GC" faults Rakudo is hitting. 22:23
bacek I'm still investigating what's going on...
jonathan: can you reproduce rakudo's "fault"? 22:26
I suspect reducing initial hash site to 4 triggered GC issue.
jonathan bacek: I can reproduce it, yes 22:27
It moves with each commit
that is, each small change I make
So looks very much like corruption.
Where is the initial hash size setting?
bacek Try to change src/hash.c
jonathan I can change it to 8 and test. 22:28
bacek top of the file
It was 16 afair
jonathan #define INITIAL_BUCKETS 4
that one?
bacek yes
jonathan I'll give it a teste.
s/te\\.// 22:29
bacek Changing it back to 16 isn't "solution" anyway...
jonathan: "tes"??? :)
jonathan oh bollocks!
;-)
jonathan woulda written it in Russian if only he knew that word
re-building now.. 22:30
And will try one of the spectests that I know blew up.
bacek ok
jonathan Well, what'd you know, that test runs now. 22:31
Let me run make spectest
And see how that goes
bacek ooookeeeey...
jonathan I was getting methods of all things prematurely collected earlier on today. 22:32
bacek Whiteknight: I told ya! It's GC collecting hash keys prematurely!
jonathan They'd be stored in a hash.
bacek: Let's run the suite rather than just one test before jumping to that. :-)
But if it is that, then, well...
Whiteknight well holy shit 22:33
purl only in the Vatican, my friend.
jonathan purl++
Whiteknight who woulda thought that hashes were TEH SUXXOR?
bacek Whiteknight: it's no "hash" by it self...
jonathan Parrot uses hashes intensively, Rakudo too.
If hashes are f*%ked, it's hardly surpsising there's issue. 22:34
bacek In Soviet Russia hashed f%@#k you!
hashes
jonathan In Soviet Parrot too. 22:35
jonathan watches the spectests run by
22:35 rg joined
skids Well, the orderedhash off-by-one I fixed to let hash_buckets not crash rakudo build was more unpredicatable to trace down than one would expect for that kind of thing, so maybe undoing that fix might aggravate things to make the heisenbug more huntable. 22:36
erm hashbuckets=4 that is
jonathan Also, something that has happened recently in Rakudo or Parrot (don't know which) has made the dispatch benchmarks run a bunch slower. 22:37
22:37 clunker9__ joined
jonathan (single, not just multiple...if just multiple I'd know to point the finger straight at me, since I've been doing stuff on that today) 22:37
jonathan should find the tuits to run the benchmark suite regularly on Rakudo and graph it over time. 22:38
chromatic How recently?
jonathan chromatic: I'm not exactly sure, I'm afraid. :-(
chromatic: I ran the benchmarks today to see my multi dispatch refactor hadn't made that crazily slow compared to normal dispatch.
chromatic: It could still be related to that. 22:39
But I'm not convinced.
Last time I ran them was before I went to Italy.
Which is a huge time ago (couple of weeks).
But we're looking at like factor of four change. 22:40
bacek skids: commit number?
chromatic Nothing comes to mind as a likely culprit in the past couple of weeks.
jonathan chromatic: OK. It's very possible it's something that has happened in Rakudo rather than in Parrot, that's had a surprising effect. 22:41
chromatic: I'll try and eliminate the dispatch stuff as a factor before digging any more. 22:42
I hugely refactored multi dispatch today. But then, I'm still surprised the single dispatch test is hit so much.
skids bacek: looking. 22:43
bacek wtf is "#define N_BUCKETS(n) ((n) - (n)/4)"??? 22:44
skids trac.parrot.org/parrot/ticket/636 22:45
bacek: N_BUCKETS is loading factor, I think.
jonathan fwiw, down to S06 tests and no sign of the GC related issues now. 22:49
bacek skids: current implementation of hashes in parrot doesn't require loading factor...
pmichaud (timing) -- I did that graph just earlier today -- let me reproduce it 22:50
jonathan tmave pivo mam! :D 22:51
oops, ww
bacek Too early for beer!
jonathan 1am?
purl Bedtime!
jonathan ;-)
no purl, 1am is beertime!
purl okay, jonathan.
pmichaud pmichaud.com/sandbox/snapshot1.png 22:54
red line is time to do "make spectest" in seconds
blue line is number of spectests we're running 22:55
tick marks along the bottom are days
chromatic It'd be nice to compare their slopes. 22:56
pmichaud well, the first few days would skew it
we'd want to omit them
chromatic Sure. I have a feeling I know what that was.
I want the slope of the red line to increase less than the slope of the blue line. 22:57
chromatic casts L.5 Summon Mathemetician
pmichaud anyway, whatever caused the increase that jonathan is seeing happened either in the last 3 days or in the last 7 22:58
(or both)
but in each of those cases we had an increase in the number of spectests that we were attempting -- i.e., we added new test files to the spectest suite that we weren't running previously 22:59
for example, 7 days ago we were running 405 spectest files
6 days ago we were running 406 (whatever got added added a bunch of tests)
jonathan OK, spectest results with buckets increased to 16: massively better (don't see any of the GC related fails I was seeing with it set to 4).
pmichaud 4 days later we increased to 412 23:00
so part of the slowdown is simply that we're running 150 more tests than we were previously 23:01
chromatic Ah, so the numbers might look better now.
bacek jonathan: well...
skids bacek: hash "size" is based on the mask, power of two. Number of bucket slots available to be mapped to indices is N_BUCKETS... I'd call that a loading factor, personally, but I can see where opinions might differ on that.
23:01 Theory joined
pmichaud (NQP syntax) -- note that I think most of the things people have described can be added to NQP while retaining Perl 6 syntax 23:02
for example, non-pmc registers are just
my int $foo
my str $bar
vtable declarations are just
method get_integer() is vtable { ... } 23:03
NotFound With all that games with +1 and -1 on the mask/size is no wonder that the code is prone to off-by-one errors
jonathan pmichaud: I was talking about the time taking to run tools/benchmark.pl
pmichaud jonathan: oh.
jonathan: *that* would definitely represent a better measure of parrot and rakudo performance 23:04
at least for the core simple operations
jonathan pmichaud: Right, but I ran it today for first time since I got back from my trip, it's it's 3-4 times more time to run now.
Granted it could be the dispatch fiddling I did today, but it doesn't explain single dispatch cost being so much higher really. 23:05
pmichaud I could probably update my daily spectest script to run benchmark.pl for each day over the past couple of months
jonathan That could be interesting.
NotFound orderedhash.pmc:584 That -1 must not be +1? 23:07
pmichaud jonathan: is a rakudo or parrot commit in queue in the next hour or so? 23:09
(e.g., to bump buckets to 16)
jonathan I can commit my bump up to 16.
But are folks are working on figuring out the real underlying issue?
pmichaud I just wanted to know, as I'm looking to bump PARROT_REVISION 23:10
jonathan NotFound/bacek: What would you prefer?
pmichaud to me, slow-but-working trumps fast-but-failing
bacek jonathan: -1 to commit. It's just hiding original issue...
NotFound jonathan: I'd prefer to have a test that fails if the number in that line is wrong. 23:11
jonathan NotFound: It's a more general hash issue than OrderedHash, I think.
pmichaud (hiding original issue) I don't mind if the original issue stays unhidden if there's a chance someone will actually fix it
but otherwise I'm currently looking at (nopasting)
NotFound jonathan: anyway, if I can change that line without breaking any test, then we don't have enough tests. 23:12
nopaste "pmichaud" at 72.181.176.220 pasted "latest spectest run against parrot trunk" (13 lines) at nopaste.snit.ch/17094
bacek NotFound: if you are interested I have "easy" way to recreate this issue.
jonathan bacek: I agree it's a workaround/avoidance patch rather than a solution patch. 23:13
NotFound And yes, changing it all test pass
bacek NotFound: on tt761_keys_revamp branch, src/pmc/hash.pmc, line 135. 23:14
NotFound bacek: I'm looking at runk
jonathan bacek: On ther other hand, it is affecting folks, and I'm not sure what timeline for a fix is going to be.
pmichaud We _really_ don't want 1.4 shipping with gc errors.
bacek NotFound: uncommenting "old" code causing EPIC FAIL in compiling PGE.
jonathan pmichaud: Agree. 23:15
bacek pmichaud: agree.
jonathan We're a bit off 1.4 yet mind.
pmichaud 2.5 weeks
purl 2.5 weeks is not enough.
jonathan But the current bunch of GC bugs are hindering Rakudo development.
pmichaud or is it 3.5 weeks?
2.5 weeks. 23:16
purl hmmm... 2.5 weeks is not enough.
jonathan We ain't had a Tuesday yest this month.
*yet
pmichaud right
release is July 21
today is July 2
so less than 3 weeks
jonathan aye
pmichaud if it's going to be fixed, it probably needs to be fixed not later than july 18 23:17
jonathan I guess we either a) wait to see if there's a fix or b) apply patch, file a ticket and once it gets resolved we can tweak initial buckets down again.
skids bacek: what's the easy way to replicate it?
pmichaud I'm okay with waiting if people are actively going to work on it. 23:18
bacek skids: tt761_keys_revamp branch, check src/pmc/hash.pmc line 135. There is comment about fail.
pmichaud maybe we should put a ticket in the roadmap/critical path that calls for a decision to be made on July 14
bacek skids: comment out "ret = (void *)key;", uncomment "ret = (void *)Parrot_str_new_COW(interp, key);" 23:19
skids: try to build parrot. For me it consistently fail on compiling PGE.
skids wonders if it works with buckets=8... 23:20
nopaste "bacek" at 114.73.175.1 pasted "Premature collected keys in hash (bt)" (71 lines) at nopaste.snit.ch/17095 23:21
bacek skids: tweaking initial hash size is just trigger some underlying problem... 23:22
ok, time for $dayjob.
skids Yeah but just wondering because it might be a clue.
nopaste "NotFound" at 213.96.228.50 pasted "Simple test for OrderedHash clone" (14 lines) at nopaste.snit.ch/17096 23:28
NotFound This program crash in a few iterations if I modify the line I mentioned in clone. However, the test suite pass. So is clear we need to add some test. 23:29
23:30 patspam joined 23:31 Zak joined
Whiteknight pmichaud++ 23:43
(thanks for the hints on the blog)
pmichaud (use of = versus := ) if L1 ends up supporting a true assignment operation, then I think '=' is fine; but I'd prefer not to repeat PIR's mistake of confusing assignment with binding 23:46
Infinoid I sincerely hope L1 will be too low level to care about that. 23:50
Whiteknight yes, I suspect L1 will be playing with PMC* and STRING* pointers directly 23:58