Camelia, the Perl 6 bug

IRC log for #parrot, 2010-05-30

Parrot | source cross referenced

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

All times shown according to UTC.

Time Nick Message
00:07 contingencyplan joined #parrot
00:10 mikehh_ joined #parrot
00:13 dalek parrot: r47118 | jonathan++ | trunk/src/ops (2 files):
00:13 dalek parrot: [core] Another step towards better annotation output; this does the same for method calls as the previous patch did for other invocations.
00:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47118/
00:21 plobsing how do backtraces handle TCO?
00:23 jnthn joined #parrot
00:23 jnthn plobsing: TCO?
00:23 purl i guess TCO is total cost of ownership
00:23 plobsing TCO is also tail call optimization
00:23 purl okay, plobsing.
00:23 whiteknight joined #parrot
00:24 jnthn plobsing: There is no frame. ;-)
00:24 gbacon joined #parrot
00:24 jnthn plobsing: The context is done, so we've no way to know we tailcalled when we get to produce the backtrace.
00:24 jnthn *gone
00:25 plobsing I guess there is no good way to handle that one. Might be a tad bit confusing for debugging though.
00:25 jnthn plobsing: Given how many problems we have producing decent backtraces today, if we get to the point where that's our biggest problem, I'll be happy. :-)
00:26 jnthn Last few patches have made things a *lot* better though.
00:26 jnthn One more nasty issue and then I can probably consider the data good enough to enable the Rakudo backtrace printer.
00:28 jnthn Hmm...does Parrot_cx_find_handler_local do any unwinding or does it just go looking?
00:29 jnthn oh whee, it does all sorts. :-)
00:29 dalek parrot: r47119 | jonathan++ | trunk/src (2 files):
00:29 dalek parrot: [core] A little cleanup now we have GC-able contexts.
00:29 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47119/
00:31 jnthn <- rusty Parrot guts skillz
00:34 davidfetter oh hai
00:34 GeJ plobsing: ping
00:35 GeJ Good morning everyone.
00:35 plobsing GeJ: pong
00:36 GeJ plobsing: I saw that you recently touched t/op/arithmetics_pmc.t to accomodate with the merge of ops_massacre.
00:36 GeJ You decreased the test count from 44 to 40.
00:37 plobsing yes. I moved the pow test to t/dynoplibs
00:37 GeJ However Its looks like I'm running 42 tests.
00:37 plobsing I didn't delete tests if that is your concern
00:37 plobsing weird
00:38 GeJ no gmp here.
00:38 plobsing oic. I need to decrement the skip count for non-GMP
00:38 GeJ maybe that changes the tests count?
00:40 plobsing fixed in r47120.
00:40 plobsing or should be. can you test it?
00:40 GeJ thanks.
00:41 GeJ yup, give me a couple of minutes.
00:45 GeJ plobsing: make test PASS. Thank you.
00:46 GeJ bbiab
00:46 GeJ &
00:46 dalek parrot: r47120 | plobsing++ | trunk/t (2 files):
00:46 dalek parrot: adjust appropriate skips for non-GMP users
00:46 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47120/
00:49 hercynium joined #parrot
00:49 joeri joined #parrot
00:52 jnthn GAH!
00:53 jnthn Pro debugging tip: never skip reading a line of code just because you think it's doing something too obvious go get wrong.
00:53 jnthn *to
01:02 dalek parrot: r47121 | jonathan++ | trunk/src/pmc/exception.pmc:
01:02 dalek parrot: [core] Rather than just getting the thrower context, we should actually then use it to try and obtain a backtrace, not just toss it in favor of (probably the handler's) context.
01:02 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47121/
01:02 dalek parrot: r47122 | jonathan++ | trunk/src/exceptions.c:
01:02 dalek parrot: [core] Exceptions thrown from ops also need to stash the thrower inside the Exception object so we can produce the backtrace.
01:02 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47122/
01:02 dalek parrot: r47123 | plobsing++ | trunk (2 files):
01:02 dalek parrot: make opsc op_func_table output slightly prettier
01:02 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47123/
01:03 jnthn OK, I think I've patched enough to actually have useful backtraces.
01:03 jnthn This very possibly makes the PIR backtraces a bit more informative too.
01:11 plobsing 2 options for fixing dynops in PBC:
01:12 plobsing 1) scan code at compile time and add a fixup for every dynop instance
01:12 plobsing 2) scan code at runtime and modify dynop instances
01:13 plobsing note that scanning code may be expensive as you have to ask each opcode what size it is
01:13 plobsing but many fixups will be bloaty
01:15 plobsing advice welcome
01:16 jnthn plobsing: What's the Actual Problem that you're looking to fix?
01:17 jnthn The fact that different PBCs may have assigned different numbers to dynops?
01:17 plobsing yes. and a loading parrot has no way of knowing this.
01:18 jnthn Does it know what dynop libs the PBC uses?
01:18 plobsing in an indirect way, yes
01:18 plobsing the interpreter state gets frozen into the pbc and merged with the current interpreter on load
01:18 plobsing I intend to make the dynop dependancies explicit
01:19 jnthn How about - and I'm *rusty* on Parrot guts - something like:
01:19 jnthn A PBC lists the dynoplibs it uses and the numeric range it gave to each
01:19 plobsing yes. this is what I intend to do about the explicit mapping.
01:19 jnthn OK
01:19 jnthn So today when you call code in another bytecode segment...
01:19 jnthn ...you have to "switch" to that seg.
01:20 jnthn Could you associate with each bytecode segment a number -> op function pointer lookup table?
01:20 plobsing umm... not really. loading *appends* to the current segment. it is all kinds of ugly and wrong.
01:20 jnthn Oh.
01:20 jnthn Er, yeah.
01:20 whiteknight what the hell does interp->class_hash contain?
01:20 jnthn That sounds...awful.
01:20 plobsing in fact, parrot *can't* handle multiple segments.
01:21 plobsing GC doesn't mark constants for anything but the current segment
01:21 jnthn Heh. Even though all the stuff is there to switch to another segment when you call a sub?
01:21 jnthn Oh.
01:21 jnthn Do I want to ask why?
01:21 plobsing because multiple segments is the *right* way to do it.
01:21 plobsing just not the way we do it now
01:21 jnthn Yeah, it's what I'd have expected too.
01:22 jnthn Then you don't have to modify a load of stuff
01:22 jnthn Each seg can have its own mapping to the actual dynop functions.
01:22 jnthn Heck, a JITter can then even use the table to write the calls faster. Or a pre-deref core. Or whatever.
01:23 plobsing that would be nice. very nice. but a lot of work.
01:24 jnthn Fixing things to enable multiple segs would be?
01:24 jnthn Or the other fancy stuff I mentioned?
01:25 plobsing fixing things to enable multiple segs and then making enough things use multiple segments to make breaking it non-trivial
01:25 plobsing At some time in the past, I suspect multiple segments worked
01:25 jnthn I'm sure they did.
01:25 jnthn I'm not sure why things ended up going in the appending direction.
01:25 plobsing but then someone broke it and the tests didn't whine because everything was using one segment
01:26 jnthn I suspect it got broken long, long ago.
01:27 * plobsing pushes segments issue to tasklist
01:29 jnthn whiteknight: clash_hash maps names to type IDs
01:30 jnthn whiteknight: $P0 = new 'ResizablePMCArray' # probably uses class_hash to map the name to the PMC ID
01:30 jnthn whiteknight: I have no idea wtf it's a namespace and not a hash.
01:31 whiteknight jnthn: yeah, that's the question I'm running into right now. Why the hell is it a namespace?
01:31 whiteknight but, I think I'm understnading better how it is used now
01:31 jnthn whiteknight: Well, does making hash break anything?
01:31 jnthn er, making *it* a hash... :-)
01:31 jnthn Maybe the person who wrote it was making hash. ;)
01:31 whiteknight jnthn: I'm sure it does. It's called often with the get_pointer_keyed VTABLE, which I don't know if Hash implements in the same way
01:32 whiteknight whatever, I'll consider changing it later
01:32 jnthn ugh
01:32 jnthn I thought the whole thing was meant to go away anyway.
01:32 plobsing can you make it a Hash of Integers? That would reduce memory usage *and* help GC.
01:32 sorear plobsing: The first time I read our handling of dynops, here's how I understood it working; it might be sufficient:
01:33 sorear 1. Dynops aren't real ops, but live in separate tables, one per dynop lib
01:33 sorear 2. Dynop libs have dynamically assigned numbers; each PBC has a fixup table for the constant pool
01:33 jnthn btw, with today's Parrot fixes, I can now get Rakudo start to spit out stuff like in http://gist.github.com/418686
01:33 sorear 3. When a dynop is assembled, it generates the _wrapper coreop, passing a constant table index (which gets fixed up) for the lib, a number for the op itself, and the op's args
01:34 jnthn Other HLL devs may be interested to do similar. :-)
01:34 plobsing sorear: so you're for using fixups in stead of scan on read?
01:35 jnthn plobsing: Anything that involves changing the bytecode in memory before running it is *very* bad.
01:35 jnthn That's the main thing to avoid.
01:35 plobsing jnthn: we already do that with fixups
01:35 jnthn ...
01:35 jnthn Wow.
01:36 sorear fixups need to exist, but they should be localized to a small area
01:36 plobsing also Parrot *mostly* works without multiple segments. I consider it to be a lower priority
01:36 sorear think about the PIC and GOT
01:36 sorear that's the model we want to follow
01:36 sorear (actually just the GOT; PIC isn't needed)
01:36 jnthn Guess all the "we can mmap bytecode files" stuff is kinda not happening then.
01:36 sorear jnthn: if all the fixups are on a single 4k page, no harm
01:36 plobsing doesn't the G in GOT  stand for *global*?
01:37 sorear plobsing: yes
01:37 jnthn sorear: Troo.
01:37 plobsing so how does that keep the fixups local?
01:37 sorear plobsing: each module has its own GOT
01:37 sorear it would be more correct to call it Intermodule Offset Table
01:37 sorear they're "global" in the sense that they refer to external things
01:38 sorear the offsets are what's global, not the table
01:38 plobsing jnthn: how does modifying bytecode after loading preclude mmapping?
01:38 jnthn plobsing: mmap lets one copy of a file be held in memory and shared between all running instances.
01:38 sorear plobsing: the whole point of using mmap is that it's lazy.  If you mmap a 5MB bytecode file, the I/O doesn't occur until subs are called
01:38 jnthn Also that.
01:39 jnthn But the other thing is, imagine a CGI situation where people are running 20 instances of Perl 6 simultaneously.
01:39 sorear but if we're making 1 fixup on each of 1250 4kb pages, we force the whole thing to be loaded
01:39 plobsing I see. So it's that we want read-only bytecode.
01:39 jnthn Our bytecode file is, say, 6 megs.
01:39 sorear plobsing: this is also why we use native-endian bytecode
01:39 jnthn Having one copy of that in RAM rather than having to make 120 MB worth of copies of it is kinda preferable. :-)
01:40 sorear in a perfect world, the kernel would have a callback for "I just paged in some data at XYZ address; please byteswap or otherwise fix up the in-memory version"
01:40 sorear but neither POSIX nor Linux has that
01:40 plobsing mmapping bytecode would be nice, but there are more pressing issues.
01:41 plobsing if you can figure out how to eliminate the fixup table, and get multiple segments working, it would likely be smooth sailing from there
01:42 sorear Is our fixup table a table of fixups or a table that is fixed up?
01:43 plobsing those are all things I'd like to do, but I only have so much time. Also single-instance parrot performance is still shitty, so I'll fix that before fixing multiple-instance performance
01:43 nopaste "GeJ" at 192.168.1.3 pasted "[PATCH] Partially fix `make codetest`" (71 lines) at http://nopaste.snit.ch/20732
01:45 plobsing I'll try and keep the fail in one place and use fixups then.
01:45 plobsing so to answer my initial RFC, option (2)
01:46 plobsing sorear: fixup table is table of bytecode fixups
01:46 plobsing mostly label and sub fixups ATM
01:47 plobsing I mean option (1). /me can't count apparently.
01:47 sorear plobsing: ah
01:48 sorear the ELF global offset table is a data object at a known (PC relative) address which contains pointers to global functions and variables used in the module
01:49 sorear all external references from the module indirect through the GOT
01:49 sorear this means that, if a module imports 1000 functions, only a single 4kb page of pointers needs to be touched during dynamic linking
01:53 dalek rakudo: b066578 | jonathan++ |  (3 files):
01:53 dalek rakudo: First cut of a backtrace printer. With recent Parrot improvements, it actually
01:53 dalek rakudo: seems to show the Perl 6 line numbers reasonably reliably. Many enhancements to
01:53 dalek rakudo: come, but commit early, commit often and all that. :-)
01:53 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/b​066578c10dd4e42ffafc8fe2928e185ab421f94
01:53 dalek rakudo: 339d0b9 | jonathan++ | build/PARROT_REVISION:
01:53 dalek rakudo: Bump PARROT_REVISION to get latest Parrot with various backtrace production
01:53 dalek rakudo: fixes.
01:53 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/3​39d0b98671b767172f71b41cf73a07415ef1581
01:57 tcurtis joined #parrot
02:00 sorear also, \o/ JONATHAN RETURNS
02:05 Andy joined #parrot
02:08 dalek parrot: r47124 | plobsing++ | trunk (4 files):
02:08 dalek parrot: partial codetest fixes submitted by GeJ++
02:08 dalek parrot: also, for future reference, to fix t/distro/file_metadata.t, run:
02:08 dalek parrot: $  prove t/distro/file_metadata.t 2>&1 1>/dev/null | perl -nle '/#\s*(svn ps.*)$/ and print($1) and system($1)'
02:08 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47124/
02:22 dalek rakudo: 8b3bb0b | jonathan++ | src/Perl6/BacktracePrinter.pm:
02:22 dalek rakudo: Include fully qualified names of routines in the backtrace, plus better handling
02:22 dalek rakudo: of anonymous things.
02:22 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/8​b3bb0bba7b33c3e280cce0c08bcbda86f34f3d3
02:27 dalek tracwiki: v2 | plobsing++ | PlobsingTaskList
02:27 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Plob​singTaskList?version=2&amp;action=diff
02:30 eternaleye joined #parrot
02:41 dalek parrot: r47125 | plobsing++ | trunk (6 files):
02:41 dalek parrot: eliminate unused fixup type 'label'
02:42 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47125/
03:01 janus joined #parrot
03:15 dalek parrot: r47126 | plobsing++ | trunk/t/native_pbc (4 files):
03:15 dalek parrot: mk_native_pbc
03:15 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47126/
03:19 plobsing I broke PBC_COMPAT twice in one week. Let's see if I can make it a hattrick ;-)
03:21 dalek rakudo: 6e39fe1 | jonathan++ | src/Perl6/Compiler.pir:
03:21 dalek rakudo: Little tweak so things in the core setting get shown in the backtrace with a
03:21 dalek rakudo: filename of CORE.setting.
03:21 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/6​e39fe1035ef3823d320ed2131008d8631007a1d
03:21 dalek rakudo: 34542f7 | jonathan++ | src/Perl6/Actions.pm:
03:21 dalek rakudo: Emit file annotation so backtraces have file names.
03:21 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/3​4542f7a864fedfea4905d7f1479a2d27a65c6e7
03:52 GeJ plobsing: even at r47126, I seem to have problems with packfile tests.
03:55 GeJ "PackFile_unpack: This Parrot cannot read bytecode files with version 6.19."
03:56 plobsing yes. someone seems to have added *other* PBCs that don't get updated when I run mk_native_pbc.
03:56 plobsing (whoever did that)--
03:56 patspam joined #parrot
03:56 plobsing I am in the process of updating them
03:56 * sorear wonders how hard it would be to add a "write little endian 32-bit PBC" function to Parrot
03:57 GeJ Great. Sorry for the repeated annoyances.
03:57 sorear we already have code to massage PBC integers...we run it when loading non-native PBC
03:57 plobsing sorear: probably very. we have *many* places that simply do '*cursor++ = x;' for writing PBC
03:58 * plobsing is more interested in if we could make opcode_t smaller than native pointer size
03:58 plobsing then I could make 16-bit PBC for epic compression levels
04:00 plobsing GeJ: pointing out failures I introduced is *usefull*. no need to appologize.
04:05 Andy joined #parrot
04:21 dalek parrot: r47127 | plobsing++ | trunk/t/native_pbc (3 files):
04:21 dalek parrot: mk_packfile_pbc
04:21 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47127/
04:24 GeJ I don't doubt that there is some use in my pointing at errors and or mistakes. However I can't stop thinking that it may make me look like a whining bitch to all of you guys who make the real work (which is definitely not my intent I can assure you).
04:26 cotto GeJ, doing nothing but complaining about valid problems with Parrot still counts as making a valuable contribution.
04:30 GeJ Hah! my point exactly. I'm not so much "complaining" about anything. I'm more in the line of "Hey guys, when I run make codetest, I get this, this and this. Would be nice if someone had a few minutes to fix it."
04:30 GeJ Hence my apologies if I sound like always complaining. :)
04:31 cotto I consider that to be complaining, but I think I have a less negative connotation attached to the word than you do.
04:31 cotto If it helps, mentally substitute "report
04:31 cotto " for "complain" and you won't lose any information.
04:33 GeJ Well, my English sucks. I may have translated it to my native language in which "complain" holds a negative connotation. You're lucky I don't apologize for that every couple of lines I type something here.
04:33 cotto Heh.  I'll make sure to say "report" more often then.
04:34 GeJ Nah, "complain" is fine. :)
04:34 cotto ooc, what's your native language?  French?
04:34 GeJ yes.
04:35 cotto good to know
04:35 cotto I wouldn't have guessed without having Wikipedia to look up New Caledonia's official language
04:35 sorear GeJ: complain has a strong negative connotation in Englsih too
04:55 GeJ Speaking about foreign languages and translations, Christian Aperghis-Tramoni has written his second series of articles about Parrot. They have been published in France in a F/OSS-oriented magazine. Their policy is to publish the articles online 6 months after the paper version.
04:55 GeJ The first series of articles were about PASM. And the second one are about PIR.
04:56 GeJ The first article of the second series has been put online.
04:56 GeJ http://www.unixgarden.com/index.php/prog​rammation/le-langage-pir-premiere-partie   (in French)
04:58 GeJ Not quite sure about licence and rights restrictions, but since they're pretty well witten and cover a lot of topics, they could be a nice addition to the docs.
05:03 GeJ I'll try to get some info about this.
05:04 * sorear grumbles at the lack of good Anglophone technical writers
05:12 cotto It's good that they have url at the bottom, but I'm not sure why they wouldn't want to make them into actual links.
05:13 cotto Has the author been on #parrot?
05:13 GeJ cotto: my guess, quick copy-and-paste from the paper version.
05:13 cotto probably the case
05:14 plobsing wow finite 32 registers of each set? how old is that article?
05:14 cotto if they wait 6 months to publish articles online, the interwebs are most like ancillary to the print version
05:18 cotto Maybe we'll get another hacker or some bug reports out of the deal.
05:19 GeJ plobsing: yep, that seemed weird to me when I read it. I had the ide that this limitation had been guillotined a long time ago.
05:19 plobsing it also claims our register allocator works
05:21 GeJ FYI, in src/exceptions.c on line 213, there are some trailing spaces that if removed make `make fulltest` passes all tests.
05:23 cotto fix't
05:25 sorear ...what
05:25 sorear traling spaces in C code cause bugs?
05:26 cotto no.  It's just a coding standards test
05:26 GeJ not bugs, but failures in `make codetest`
05:27 dalek parrot: r47128 | cotto++ | trunk/src/exceptions.c:
05:27 dalek parrot: [codingstd] trailing space fix, gej++ for noticing
05:27 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47128/
05:39 JimmyZ joined #parrot
05:42 cotto hola, JimmyZ
05:42 JimmyZ Hi
05:42 purl privet, JimmyZ.
05:46 tcurtis Is there a way in Perl 6(preferably also in NQP) regexes to be able to add the ability to do something like <foo(bar, baz)>, where foo is a named regex that takes parameters? Not necessarily with that syntax, but with some simple convenient syntax?
05:47 plobsing I'm looking into associating dynops with bytecode segments in stead of interpreters (like jnthn++ and sorear++ advised earlier).
05:47 plobsing It would be a clean design but would require deciding between 2 tables of ops (1 for core ops, 1 for currently active dynops)
05:47 plobsing I'm sure it might cause some controversy
05:50 tcurtis I retract my question. Looking at http://dev.perl.org/perl6/doc/design/apo/A05.html I see that <foo(bar, baz)> is indeed valid. Is that implemented in NQP-rx?
05:52 sorear yes
05:52 sorear we use it extensively
05:53 sorear token scope_declarator:sym<our>       { <sym> <scoped('our')> }
05:53 sorear eg
05:53 sorear from Rakudo
05:56 tcurtis Wonderful!
06:02 sorear Are you doing this for tree gramamrs?
06:03 tcurtis Yes.
06:03 sorear Excellent.
06:25 tcurtis This is a very simple single optimization(independent optimizations should probably be roles, I'd rather a tree grammar "does FoldArithmetic::Optimization does TailCallElimination::Optimization does BlockLocalExceptionElimination::Optimization" than "is ... is ... is ...") http://gist.github.com/418828
06:29 tcurtis thoughts, anyone?
06:32 sorear it looks pretty much exactly like I imagined
06:32 sorear note that NQP doesn't have roles
06:33 sorear what you're doing is a rewrite system, not really a parser, though
06:33 sorear "make" is as such slightly wrong
06:34 sorear you'd still need a set of classes to build a rewrite engine
06:34 sorear maybe you would want a new regex declarator rewrite{}
06:35 sorear rewrite names are used only for documentation; a rewrite engine take a rewrite grammar and calls rules in the right places
06:35 sorear Perl6 'tr' is an example of a rewrite engine for strings
06:36 sorear (it's incomparably more powerful than perl5 tr)
06:39 sorear try this: http://pastie.org/983986
06:40 sorear the Grammar/Actions split arguably has no place in this context; it's optional in Perl6
06:43 tcurtis That is much nicer. Although, I think a Grammar/Actions split might be sensible for larger groups of more complicated optimizations.
06:43 sorear or better yet
06:45 sorear http://pastie.org/983989
06:45 sorear proto regex means to take fold:foo, fold:bar, fold:quux in the current inheritence hierarchy and merge them by conjunction into one super-regex named fold
06:46 sorear now, the rewrite engine you're going to use for constant folding is going to look like this
06:47 sorear sub rewrite-past-bottom-up($past, $grammar, $rule) {
06:47 sorear for ($past.children) { $_ = rewrite-past-bottom-up($_, $grammar, $rule); }
06:48 sorear while ($past ~~ /<$grammar::$rule>/) { $past = $/.ast }
06:48 sorear $past
06:48 sorear }
06:48 sorear there will be different rewrite engines for different occassions; top-down ones, ones that work on POST, etc
06:49 plobsing tcurtis: you have to be carefull about constant folding PMCs. PMCs are free to do whatever they want when you ask them to add. This is one of the things that makes parrot great (or horrible, flip sides of the same coin really).
06:50 bacek Hello humans
06:50 purl hey, what about me?
06:50 bacek purl, good girl :)
06:50 purl thanks bacek :)
06:51 bacek plobsing, (about your mail) what about store dynops with each segment, have global core ops and create full table of ops per segment during unpack?
06:52 plobsing so option (3)?
06:52 bacek plobsing, e.g. option "5" - copy in Parrot_switch_cs + copy in PackFile_unpack
06:52 tcurtis plobsing: noted.
06:54 plobsing tcurtis: you might want to maintain a "well behaved" list of PMCs and use available type information (if available) to make inferences on what you actually can fold
06:55 cotto plobsing, could hll mapping mess that up?
06:56 plobsing I would assume that HLLs would be the people specifying what optimizations are legal and/or providing the list of well behaved PMCs
06:56 * sorear replies to plobsing
06:57 plobsing bacek: the problem with that option is that every PBC bytecode segment gets its own rather large ops table. core ops alone is almost 1K entries.
06:59 cotto There won't be that many different ops tables.  That strikes me as something we could be smart about to avoid excessive memory bloat.
07:00 cotto (different wrt contents)
07:01 bacek plobsing, how many bytecode segments do we usually have? What if pbc_merge will properly merge them?
07:01 cotto That's also an important question.
07:01 sorear plobsing: reply is now sent.
07:02 sorear bacek: 1
07:02 sorear but that's due to change
07:02 sorear (right now, pbc load *appends to the current segment*)
07:02 plobsing sorear++. bacek, cotto: while I do enjoy the immediate discussion IRC allows, please at least put a summary on the list.
07:03 cotto sorear, nice suggestions
07:03 plobsing (trying to keep discussion entirely in one place)
07:06 plobsing re pbc_merge, appending segments: those actually perform shallow packfile merging (ie: only at the directory level). bytecode segments remain distinct.
07:14 plobsing sorear: I don't understand your 3a suggestion. please elaborate
07:15 sorear instead of having 1000 core ops + N*M dynops
07:15 sorear have 0 core ops
07:16 sorear IMCC will always act as if the core ops were implicitly loadlib's
07:16 sorear 'd
07:16 sorear so the user notices no difference
07:16 sorear but because all ops are in the dynop table, we can trim them
07:16 plobsing I thought you might be getting at that, but given the recent issues with removing core ops, I thought it impossible for someone to suggest that
07:16 sorear say the user uses 57 distinct core ops.  that's a 228 byte "core op" section
07:17 plobsing sorear: that assumes you can load ops with a granularity of a single op
07:17 sorear plobsing: the core ops are only removed if the packfile doesn't use them
07:18 sorear plobsing: why couldn't we?  PIRC knows what ops are used, it doesn't have to generate dispatch table entries for /all/ of them
07:19 tcurtis Even if you load all of the ops in an oplib, you wouldn't need to keep all of them in every op table.
07:19 plobsing OK, I think I have a grasp on what you're getting at. Now I can form a response on the list with a little more than "I have no idea what you just said".
07:25 tcurtis I have an idea which would probably be equivalent or very similar to sorear's 4b. But if so, no harm in describing it more explicitly, eh? And if not, perhaps it's at least worth considering.
07:25 tcurtis Have a global ops table that holds both core and dynops. Have a separate dynops table for each segment that maps from dynop numbers used in the segment to the index into the global ops table for each segment.
07:25 tcurtis When you execute an op above HIGHEST_CORE_OP_NUMBER, get the dynop table for the current bytecode segment, execute the op found at $global_table[$current_dynop_table[$dynop_number - HIGHEST_CORE_OP_NUMBER - 1]]
07:27 plobsing IIUC, that's a pretty close variant of what I suggested in (4) with the exception that you lose thread-locality
07:27 cotto How much of this applies to dynpmcs?
07:27 plobsing sorear: what's the difference between the redispatch op of (4a) and the stub ops of (4b)?
07:28 sorear there is only 1 or a small number of redispatch ops
07:28 sorear cotto: None.  dynpmcs are referenced by name.
07:28 plobsing no they aren't
07:28 sorear D:
07:29 plobsing actually, this has a little to do with dynpmcs, but the problems with their numbering ends after the bytecode is loaded.
07:29 plobsing as opposed to dynops, whose mapping remains important throughout runtime
07:31 plobsing so the redispatch looks like "dynop_redispatch <dynop_num> <dynop_args>", whereas the stub looks like "<magic_stub> <dynop_args>"?
07:31 sorear yes
07:32 sorear dynop 1395, <args>   vs   dynop_1395 <args>
07:32 sorear the former is actually how I misunderstood the dynop code the first time I read it
07:35 plobsing anything that requires platform-specific code is likely to fall into disrepair for anything except x86(_64)? linux very quickly
07:37 cotto I got the impression that it'd only be a tiny snippet of assembly.
07:39 sorear it couldn't be the only option
07:39 plobsing case and point: do we actually ever use src/atomic ?
07:39 plobsing that has platform-specific stuff
07:39 sorear (for a start, many of the machines bubaflub is trying to port Parrot to have separated I/D spaces and *cannot* support this)
07:40 sorear plobsing: it will be impossible to have sanely working threads without it, so if the GSoC thread guy succeeds, we will
07:41 sorear pthreads, RTEMS threads, and NT threads all offer CPU-independant atomic op APIs
07:41 cotto sorear, did you mean that 4b would be possible with straight C but could be sped up with asm?
07:41 plobsing sorear: what modern architectures are pure Harvard?
07:41 sorear if we aren't using those, we should
07:41 dalek parrot: r47129 | bacek++ | branches/gc_massacre:
07:41 dalek parrot: Yet another massacre. See wiki GCMassacre for details
07:41 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47129/
07:41 sorear plobsing: AIUI, many microcontrollers
07:42 sorear cotto: yes
07:42 cotto ok. that's sane
07:42 sorear (my favorite is 3a)
07:44 plobsing sorear: I think I'm missing something about (3a). see my response on list.
07:47 fperrad joined #parrot
07:47 plobsing sorear: I've done some work with microchip and atmel uCs and they provide ways (albeit convoluted) of mixing data with code
07:47 eternaleye joined #parrot
07:49 sorear it wouldn't actually be asm written; it would be a small chunk of C that does t = malloc(11); /* pretend I got that from a W&X pool somewhere */ memcpy(t, "\xA1\x00\x00\x00\x00\xFF\xA0", 11); *(int*)(t+1) = (int)&current_dynop_table; *(int*)(t+7) = (int)(opnum * 4);
07:53 sorear plobsing: Did you send it to me only in error, or is it truly secret and I should reply in kind?
07:53 plobsing lolno. /me fails at mailing lists often
07:55 cotto I was wondering about that same question.
07:55 fperrad_ joined #parrot
07:55 plobsing it is now forwarded appropriately
07:55 cotto (how does parrot know which op table to dispatch to)
07:56 plobsing whichever one is current. each code segment gets one. you can only be executing one code segment in one thread of execution at any one time.
07:57 plobsing (see Parrot_switch_to_cs, which is where we'd put the code to support switching between tables)
08:01 sorear plobsing: replied
08:02 sorear plobsing: I was thinking of PIC, so I guess I was wrong.  This is without hardware modification?
08:03 sorear plobsing: Anyways, runtime code generation is not portable between CPUs, not portable between OSes (if PROT_EXEC is fully supported), and flat out impossible under maximum-security SELinux
08:04 sorear we'd be fools to not support doing without
08:06 tcurtis Good night, folks. I'll work some more on example code(probably quite similar to your idea, sorear) of possible tree grammar syntax tomorrow and probably post on the list about it. By the way, sorear, you could reduce the memory usage by...nevermind...you already mentioned an essentially equivalent version(mine would have used a sentinel value for the end, but length prefix is slightly better, now that I think about it).
08:07 plobsing one thing about (4a) I dislike: it introduces a variable length op, which are hard to work with
08:08 cotto istr that we already have some
08:08 plobsing and I wish we'd eliminate them
08:09 cotto +1, and I'm certainly not saying more are justifiable if there's a better way
08:14 dalek parrot: r47130 | moritz++ | trunk/compilers/pct/src/PCT/HLLCompiler.pir:
08:14 dalek parrot: [PCT] print backtraces to STDERR by default, not STDOUT
08:15 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47130/
08:16 moritz oh fun
08:16 plobsing moritz: what?
08:16 moritz that commit makes rakudo segfault on producing an error message
08:16 plobsing moritz: you can get at stderr without using dynops
08:16 plobsing getinterp => interp.stdhandle => print
08:17 moritz plobsing: will try that, thanks
08:17 plobsing or you could just use "die"
08:17 ttbot Parrot trunk/ r47130 MSWin32-x86-multi-thread make error http://tt.taptinder.org/file/cmdout/332232.txt ( http://tt.taptinder.org//bui​ldstatus/pr-Parrot/rp-trunk/ )
08:17 sorear ...why does PCT print backtraces?
08:18 sorear that belongs in src/exception.c
08:20 plobsing sorear: it is so you can overload backtraces. so that java on parrot can be just as fun to debug
08:31 dalek parrot: r47131 | bacek++ | branches/gc_massacre (3 files):
08:31 dalek parrot: Start cutting PMC_Attribute_Pool as Pool_Allocator.
08:31 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47131/
08:31 dalek parrot: r47132 | bacek++ | branches/gc_massacre/src/gc (2 files):
08:31 dalek parrot: Cargo-cult PMC_Attributes_Pool as Pool_Allocator
08:31 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47132/
08:31 dalek parrot: r47133 | moritz++ | trunk/compilers/pct/src/PCT/HLLCompiler.pir:
08:31 dalek parrot: [pct] print backtraces to STDERR without using dynops. plobsing++
08:31 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47133/
08:31 dalek parrot: r47134 | bacek++ | branches/gc_massacre/src/gc (2 files):
08:31 dalek parrot: Add .is_owned method to Pool_Allocator
08:31 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47134/
08:31 dalek parrot: r47135 | bacek++ | branches/gc_massacre/src/gc/pool_allocator.c:
08:31 dalek parrot: Don't allocate objects smaller than sizeof(void*). Always allocate full 4kb page
08:31 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47135/
08:42 dalek wmlscript: 83982a0 | fperrad++ | setup.pir:
08:42 dalek wmlscript: refactor with runtests()
08:42 dalek wmlscript: review: http://github.com/fperrad/wmlscript/commit​/83982a01534659debf590c3dbaa637e4af35f9a0
08:48 dalek parrot: r47136 | fperrad++ | trunk/runtime/parrot/library/distutils.pir:
08:48 dalek parrot: [distutils] add a helper runtests()
08:48 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47136/
08:50 dalek lua: 6f78f52 | fperrad++ | setup.pir:
08:50 dalek lua: refactor with runtests (from distutils)
08:50 dalek lua: review: http://github.com/fperrad/lua/commit/6f​78f52f1be4919b74d54ea4a6aed61522061d68
08:57 sorear joined #parrot
08:59 purl joined #parrot
09:07 dalek rakudo: dd8b9f0 | moritz++ | docs/ChangeLog:
09:07 dalek rakudo: update ChangeLog
09:07 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/d​d8b9f074a9968a1f2efdbafbbcfbc077c334e6f
09:07 dalek rakudo: 5aba135 | moritz++ | build/PARROT_REVISION:
09:07 dalek rakudo: bump PARROT_REVISION yet again to get backtraces printed to STDERR
09:07 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/5​aba1353fdde14c7203c5eb841cbd744f5670b4b
09:07 dalek rakudo: 6eec67c | moritz++ | src/core/Seq.pm:
09:07 dalek rakudo: Seq hash coercion
09:07 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/6​eec67cd69bdb7142092387f1a81c7ecf08fc1ff
09:36 dalek nqp-rx: d1d1d31 | moritz++ | src/stage0/ (4 files):
09:36 dalek nqp-rx: update stage0
09:36 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/d​1d1d31833f3898f5d4cfa5fc3fbf92a156a9198
09:38 dalek parrot: r47137 | moritz++ | trunk/ext/nqp-rx/src/stage0 (4 files):
09:38 dalek parrot: [nqp-rx] update bootstrap files to get $/.chars fix for failed matches
09:38 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47137/
09:38 dalek parrot: r47138 | bacek++ | branches/gc_massacre/src/gc/pool_allocator.c:
09:38 dalek parrot: Fix rounding up Pool_Allocator_Arena
09:39 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47138/
09:39 dalek parrot: r47139 | bacek++ | branches/gc_massacre/src/gc/gc_private.h:
09:39 dalek parrot: Uncomment GC_Subsystem.gc_private. We'll need it.
09:39 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47139/
09:39 dalek parrot: r47140 | bacek++ | branches/gc_massacre (3 files):
09:39 dalek parrot: Add stub for double-linked lists
09:39 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47140/
09:55 dalek parrot: r47141 | bacek++ | branches/gc_massacre/src/gc (2 files):
09:55 dalek parrot: Implement linked-list. Not tested
09:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47141/
09:55 dalek parrot: r47142 | bacek++ | branches/gc_massacre/src/gc/gc_ms.c:
09:55 dalek parrot: Add mark_{pmc,string,buffer} stubs into GCMS. Allocate @objects.
09:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47142/
10:17 aukjan joined #parrot
10:36 whiteknight joined #parrot
10:38 TiMBuS joined #parrot
10:47 whiteknight good morning, #parrot
10:54 JimmyZ joined #parrot
11:13 dalek nqp-rx: 45a6612 | masak++ | src/Regex/P6Regex/Actions.pm:
11:13 dalek nqp-rx: aligned error message with STD's
11:13 dalek nqp-rx: review: http://github.com/perl6/nqp-rx/commit/4​5a66127aaf0ca722b1b2581276f15fb61950d41
11:17 dalek parrot: r47143 | bacek++ | branches/gc_massacre/src/gc (2 files):
11:17 dalek parrot: Made Parrot_gc_create_pool_allocator public
11:18 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47143/
11:23 bacek aloha whiteknight
11:23 whiteknight aloha, bacek
11:24 bacek whiteknight, I pleased that my GC pseudo-code is useful :)
11:33 dalek rakudo: 5a8bd03 | masak++ | src/core/IO.pm:
11:33 dalek rakudo: [IO.pm] better params name in &note
11:33 dalek rakudo: Only use all-caps when there's a reason.
11:33 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/5​a8bd03990799d97301f14b9800cefbbb9e17672
11:34 dalek parrot: r47144 | bacek++ | branches/gc_massacre/src/gc/pool_allocator.c:
11:34 dalek parrot: Implement destruction of Pool_Allocator.
11:34 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47144/
11:34 dalek parrot: r47145 | bacek++ | branches/gc_massacre/src/gc (2 files):
11:34 dalek parrot: Move guts of mark_FOO_fun into gc_ms.c from api.c
11:34 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47145/
11:34 dalek parrot: r47146 | bacek++ | branches/gc_massacre/src/gc/system.c:
11:34 dalek parrot: Use mark_PMC_alive during tracing of system stack.
11:34 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47146/
11:34 dalek parrot: r47147 | bacek++ | branches/gc_massacre/src/gc (3 files):
11:34 dalek parrot: Remove GC_Subsytem.mark_string_alive. Use mark_pobj_alive instead
11:34 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47147/
11:39 dalek rakudo: 3d540b8 | moritz++ | build/PARROT_REVISION:
11:39 dalek rakudo: bump PARROT_REVISION to get fix for RT #74694
11:39 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/3​d540b8a0669939d459d0dcffb43b1c0a586ea43
11:43 * whiteknight thinks he's finally figured out how to get a proxy from a namespace
11:56 whiteknight ...maybe not
12:01 gbacon joined #parrot
12:08 dalek rakudo: ff31b59 | jonathan++ | src/Perl6/Module/Loader.pm:
12:08 dalek rakudo: Set $?FILES in module loader, so we end up with the correct filename annotation
12:08 dalek rakudo: in modules.
12:08 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/f​f31b59fb88258147ade70f861997bd8d84b9d9a
12:08 dalek rakudo: 478ba48 | jonathan++ | src/pmc/p6opaque.pmc:
12:08 dalek rakudo: Correct busted format string to fix bad error message noticed by moritz++.
12:08 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/4​78ba48841a8bec00ff538465d39912641493087
12:10 JimmyZ joined #parrot
12:10 smash joined #parrot
12:10 smash hello everyone
12:20 nopaste "mikehh" at 192.168.1.3 pasted "remaining errors in make corevm/make coeretest at r47147" (71 lines) at http://nopaste.snit.ch/20739
12:20 mikehh the tests pass in make test
12:23 mikehh make corevm/make coretest FAILs - see: http://nopaste.snit.ch/20739
12:23 mikehh all other tests PASS (pre/post-config, smoke (#34129), fulltest) at r47147 - Ubuntu 10.04 amd64 (g++)
12:29 mikehh t/op/annotate-old.t - TODO passed:   1 in testf
12:37 dalek rakudo: 1727ca5 | moritz++ |  (2 files):
12:37 dalek rakudo: implement Cool.succ and .pred
12:37 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/1​727ca53c7052fabe008748b70823bf8460ad656
12:38 * mikehh gotta reboot - bbiab
12:44 mikehh joined #parrot
13:13 snarkyboojum joined #parrot
13:14 dalek parrot: r47148 | jonathan++ | trunk/src/ops (2 files):
13:14 dalek parrot: [core] One more tweak for better annotation reporting, from feedback by masak++; this gets us able to identify the correct line number that a failed sub call happened on.
13:14 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47148/
13:31 JimmyZ joined #parrot
13:41 joeri joined #parrot
13:44 elmex joined #parrot
13:44 elmex joined #parrot
13:50 mikehh make corevm/make coretest FAILs - see: http://nopaste.snit.ch/20739 (same failures)
13:50 mikehh all other tests PASS (pre/post-config, smoke (#34132), fulltest) at r47147 - Ubuntu 10.04 i386 (g++)
13:50 mikehh t/op/annotate-old.t - TODO passed:   1 in testf
13:50 mikehh t/op/exit.t - TODO passed:   6 in testf
13:52 mikehh in testf the first TODO passes on amd64 but not the second
14:05 cognominal I can't find how to compile pdb :(
14:06 cognominal I see stuff in the Makefilethough
14:07 cognominal ho, apparently, it is called a longer name... that's why I could not find it.
14:11 cognominal but still rough at the edges :  ./parrot_debugger
14:11 cognominal Segmentation fault
14:11 cognominal bash-3.2$ ./parrot_debugger --help
14:11 cognominal stat failed: No such file or directory
14:11 purl (Core dumped)
14:13 aukjan joined #parrot
14:25 lucian joined #parrot
14:37 lucian joined #parrot
14:41 seatek joined #parrot
14:43 tetragon joined #parrot
14:48 nopaste "bacek" at 192.168.1.3 pasted "chromatic, it works :)" (12 lines) at http://nopaste.snit.ch/20742
14:49 bacek msg chromatic http://nopaste.snit.ch/20742 - first working version of TriColour M&S on gc_massacre branch.
14:49 purl Message for chromatic stored.
14:51 nopaste "bacek" at 192.168.1.3 pasted "chromatic, some TriColour stats for t.pir" (10 lines) at http://nopaste.snit.ch/20743
14:53 kid51 joined #parrot
14:55 dalek parrot: r47149 | bacek++ | branches/gc_massacre/src/gc/gc_tms.c:
14:55 dalek parrot: Copy INF GC to TMS GC as barebone future GC implementation
14:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47149/
14:55 dalek parrot: r47150 | bacek++ | branches/gc_massacre/src/gc/list.h:
14:55 dalek parrot: Fix list macros.
14:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47150/
14:55 dalek parrot: r47151 | bacek++ | branches/gc_massacre/src (2 files):
14:55 dalek parrot: Add TMS into command-line options.
14:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47151/
14:55 dalek parrot: r47152 | bacek++ | branches/gc_massacre/config/gen/makefiles/root.in:
14:55 dalek parrot: Build TMS
14:55 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47152/
14:55 dalek parrot: r47153 | bacek++ | branches/gc_massacre/src/gc (2 files):
14:55 dalek parrot: Initial version of TMS
14:56 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47153/
14:56 dalek parrot: r47154 | bacek++ | branches/gc_massacre/src/gc/gc_tms.c:
14:56 dalek parrot: Initialize self.objects in constructor.
14:56 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47154/
14:56 dalek parrot: r47155 | bacek++ | branches/gc_massacre/src/gc/api.c:
14:56 dalek parrot: Actually create TMS when requested
14:56 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47155/
14:56 dalek parrot: r47156 | bacek++ | branches/gc_massacre/src/gc (3 files):
14:56 dalek parrot: Sketch implmenetation of TMS
14:56 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47156/
14:56 * kid51 got the same errors as mikehh doing make corevm && make coretest
15:00 kid51 I don't really understand why something that is described as 'core' can fail a test ... and then pass that same test when 'core' is built with 'ancillaries' (terminology used in config/gen/makefiles/root.in).
15:01 kid51 Why would the 'ancillaries' fix something that was failing in 'core'?
15:03 kid51 Moreover, why would something fail with "error:imcc:syntax error" in 'core' but not fail with syntax error when 'ancillaries' are added to the build?
15:04 bacek kid51, I suspect dynops/ops2c "misunderstanding"
15:05 bacek ops2c depends on NQP/PCT
15:05 bacek which should not be part of corevm.
15:05 nopaste "kid51" at 192.168.1.3 pasted "Two make coretest errors as run thru 'prove -v'" (104 lines) at http://nopaste.snit.ch/20744
15:07 kid51 Is that to say that the functionality being tested at the failure points should not be expected to pass at those points?
15:07 kid51 ... or, given recent changes in trunk, should *no longer* be expected to pass at those points (i.e., prior to nqp-rx)
15:07 bacek Testing of functionality dependent on dynops should be moved out of coretest
15:08 kid51 Aha, so the tests now are 'prematurely run', in effect?
15:08 bacek E.g. splitting tests into two parts - one for coretest, one for test
15:08 bacek kid51, yes.
15:08 bacek look at t/op/sprintf.t line 489
15:08 kid51 I don't often do 'make corevm && make coretest'
15:09 kid51 So I don't have past builds and test runs as reference points.
15:09 bacek There is "sysinfo" op which is part of dynops now.
15:12 dalek parrot: r47157 | bacek++ | branches/gc_massacre/src/gc/gc_private.h:
15:13 dalek parrot: Add GC_Sys.is_pmc_ptr.
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47157/
15:13 dalek parrot: r47158 | bacek++ | branches/gc_massacre/src/gc/gc_ms.c:
15:13 dalek parrot: Expose GC.is_pmc_ptr
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47158/
15:13 dalek parrot: r47159 | bacek++ | branches/gc_massacre/src/gc/list.c:
15:13 dalek parrot: Fix removing items from 'other' list
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47159/
15:13 dalek parrot: r47160 | bacek++ | branches/gc_massacre/src/gc/pool_allocator.c:
15:13 dalek parrot: Fix Pool_Allocator.is_owned slighly by almost copy logic from contained_in_pool
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47160/
15:13 dalek parrot: r47161 | bacek++ | branches/gc_massacre/src/gc/list.c:
15:13 dalek parrot: Sigh... Fix List.append again
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47161/
15:13 dalek parrot: r47162 | bacek++ | branches/gc_massacre/src/gc/pool_allocator.h:
15:13 dalek parrot: Rerun headerizer
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47162/
15:13 dalek parrot: r47163 | bacek++ | branches/gc_massacre/src/gc/gc_tms.c:
15:13 dalek parrot: First working version of TMS
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47163/
15:13 dalek parrot: r47164 | bacek++ | branches/gc_massacre/src/gc/system.c:
15:13 dalek parrot: Quick hack to make trace_memory_block work with TMS
15:13 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47164/
15:21 dalek rakudo: 5fc925c | smashz++ | src/core/IO/Socket/INET.pm:
15:21 dalek rakudo: Fail if can't create socket.
15:21 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/5​fc925ce246733a074a47c06bddd9c0d9effde0f
15:23 kid51 TT created
15:29 dalek parrot: r47165 | bacek++ | branches/gc_massacre/src/gc/gc_tms.c:
15:29 dalek parrot: Add bits of comments
15:29 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47165/
15:31 jan joined #parrot
15:38 dalek TT #1666 created by jkeenan++: t/op/sprintf.t and t/pmc/sub.t fail during 'make coretest'
15:38 dalek TT #1666: http://trac.parrot.org/parrot/ticket/1666
15:50 dalek rakudo: 749fe91 | moritz++ | Test.pm:
15:50 dalek rakudo: [Test.pm] simplify eval_exception
15:50 dalek rakudo: The days when eval() would leak exceptions through are luckily long gone, no
15:50 dalek rakudo: need for nesting try {  eval() } anymore.
15:50 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/7​49fe91a9abf2a787a05dbe9b707c29e73a91960
16:09 aukjan joined #parrot
16:12 khairul joined #parrot
16:21 nopaste "mariano" at 192.168.1.3 pasted "Problem in actions.pm with resizablepmc arrays @parrot-2.3.0" (20 lines) at http://nopaste.snit.ch/20746
16:22 mariano could you please take a look at nopaste, I'm having problems with NQP when shifting unshifting things
16:26 plobsing could you try figuring out if there's anything in the array between the unshift and the shift?
16:26 moritz like say(+$variable)
16:26 plobsing btw, shift/unshift is a degenerate case for the performance of RPA. using push/pop will be much faster.
16:28 mariano the code i pasted is the actual code
16:28 mariano nothing in the middle
16:28 mariano thanks for the tip about the pop/push
16:29 moritz rakudo: say ~3.2
16:29 moritz sorry, wrong channel
16:29 plobsing yes, I'm asking you to put a debug print there. one of the operations is failing. I want to know which.
16:31 mariano says 0
16:31 mariano so i think the push is wrong
16:31 mariano I've changed it to push/pop
16:38 plobsing maybe this is a bug in autoviv. try initializing @?BLOCK with something
16:39 mariano how?
16:39 plobsing @?BLOCK = ( 'some', 'rubish', 'here' );
16:41 plobsing or maybe @?BLOCK = Array.new();
16:42 plobsing or however NQP-rx gets at arrays
16:53 kid51 plobsing:  If you get a chance, can you take a look at http://trac.parrot.org/parrot/ticket/1666 ?
16:53 kid51 possible fallout from ops massacre
16:53 cotto there's been a lot of that lately
16:54 dalek rakudo: 8081285 | moritz++ | src/core/Match.pm:
16:54 dalek rakudo: make Match.Str return a Perl 6 Str
16:54 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/8​08128502df433e3d8be1cf943a7d9f9a3bb4597
16:54 dalek rakudo: c227238 | moritz++ | Test.pm:
16:54 dalek rakudo: [Test.pm] return comparsion result from is_deeply
16:54 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/c​22723823e2c5d42dd700126911b6af208f6feb2
17:00 plobsing seriously, what is with our test suite and calculating Pi? There are other irrational numbers people!
17:01 dalek TT #1667 created by jkeenan++: t/op/sprintf2.t:  Misleading documentation
17:01 dalek TT #1667: http://trac.parrot.org/parrot/ticket/1667
17:02 cotto We tried ε but it was too small. ;)
17:08 dalek parrot: r47166 | fperrad++ | trunk/tools/dev/fetch_languages.pl:
17:08 dalek parrot: fix Mercurial command
17:08 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47166/
17:08 dalek parrot: r47167 | plobsing++ | trunk/t/pmc/sub.t:
17:08 dalek parrot: use something other than Pi for an irrational. avoids the use of dynop atan
17:08 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47167/
17:08 mariano plobising: if I do @?BLOCK := (1,2,3); it works, so I guess your theory is correct about the autoviv
17:10 cotto phi is a nice number
17:14 plobsing mariano: I don't know enough about nqp to actually fix the bug. Now that we've isolated it, I suggest you file a ticket at trac.parrot.org.
17:15 mariano is there any guidelines for opening bugs? I'm asking cause I know how hateful is to read bugs without enough information
17:16 cotto just make sure there's enough information to reproduce the bug
17:17 mariano alright then, thanks
17:18 pmichaud @?BLOCK should autoviv.
17:18 pmichaud but perhaps doesn't
17:19 pmichaud 16:26 <plobsing> btw, shift/unshift is a degenerate case for the performance of RPA. using push/pop will be much faster.
17:19 pmichaud we use shift/unshift so that the current block is always in @?BLOCK[0]
17:20 pmichaud speed is generally not an issue here anyway, there aren't that many blocks.
17:20 plobsing oic. I don't know much about PCT, but I do remember the performance bottlenecks we ran into when we changed over from Array to RPA everywhere.
17:20 pmichaud ...Array?
17:21 plobsing we had a general purpose Array PMC at one point
17:21 plobsing it had ... erm ... issues
17:21 pmichaud iirc, it wasn't resizable.
17:22 plobsing it was. you just had to accept a 1% chance of segfault
17:23 plobsing it was a linked-list of chunks. the code implementing that was quite hairy. not helped by the premature optimizations.
17:29 dalek rakudo: fe19e82 | masak++ | src/Perl6/BacktracePrinter.pm:
17:29 dalek rakudo: [BacktracePrinter.pm] indented backtrace a bit
17:29 dalek rakudo: Added two spaces so that the backtrace will 'stand out' a bit and the
17:29 dalek rakudo: error message will be easier to spot.
17:29 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/f​e19e8244b9c0ab84b908e19630d0944750334da
17:34 dalek TT #1668 created by bluescreen++: NQP: Problem with arrays when unshifting/pushing
17:34 dalek TT #1668: http://trac.parrot.org/parrot/ticket/1668
17:38 cotto mariano, you should try to reduce your code down to a self-contained test case.
17:39 mariano do you want me to attach that to the TT?
17:39 cotto sure
17:46 lucian joined #parrot
17:53 mariano doen
17:54 cotto That code seems to work fine.
17:55 cotto It prints 1
17:57 mariano if you run it with parrot-nqp maybe
17:57 cotto how else would you run it/
17:57 cotto ?
17:57 mariano but running with parrot compilers/nqp/nqp.pbc bug.nqp
17:58 mariano it was able to reproduce it
17:58 moritz nqp is deprecated
17:58 cotto yes
17:59 cotto the real nqp lives in github and is copied into ext/nqp-rx on occasion
17:59 moritz and compiled to parrot-nqp
17:59 plobsing maybe old-nqp should printerr on startup to warn users
17:59 cotto +yes
17:59 moritz +1
17:59 purl 1
17:59 moritz botfail
17:59 cotto why is it still around
17:59 cotto yes, purl is botfail
18:00 cotto not that I don't love confusing newcomers
18:01 plobsing can't remove. deprecation policy and many old languages depend on it. can't ditch nqp without ditching "30 dynamic languages run on parrot"
18:01 mariano cotto: got it.. so my makefile has "compilers/nqp/nqp.pbc" what should I change it for?
18:02 plobsing whu? compilers/nqp doesn't exist in current trunk. guess it got axed
18:07 moritz mariano: what version of parrot are you using?
18:07 mariano 2.3.0, but before any speculation i started my project using parrot 1.4
18:08 pmichaud nqp was deprecated in 2.3.0
18:08 mariano so i was upgrading parrot and never change the makefile other than the parrot version
18:08 pmichaud so it was removed shortly thereafter
18:08 pmichaud (the one in compilers/nqp)
18:09 mariano so should I "mk_language_shell" again?
18:09 pmichaud that might work.  the language tools have evolved quite a bit over the last six months
18:11 mariano thx
18:19 joeri joined #parrot
18:40 plobsing coverage?
18:40 plobsing purl?
18:40 purl yes, plobsing?
18:40 plobsing cover?
18:40 plobsing urg. where are our coverage stats at?
18:51 plobsing Do I need a deprecation to remove some of the complex and braindead op rewriting rules in IMCC?
18:57 kid51 joined #parrot
19:06 ingy joined #parrot
19:25 moritz only if it implies semantic change for HLLs
19:44 dalek rakudo: dd0e5dd | moritz++ | t/spectest.data:
19:44 dalek rakudo: run test file for line numbers in error messages
19:44 dalek rakudo: review: http://github.com/rakudo/rakudo/commit/d​d0e5dd8c1645e61ca981cb49035b0683939f555
19:54 dalek parrot: r47168 | jkeenan++ | branches/tt1452_configure_debug:
19:54 dalek parrot: Create branch to work on TT #1452.
19:54 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47168/
20:11 GeJ Good morning everyone.
20:34 cotto hio GeJ
20:35 arnsholt Does anyone know if NQP-rx can be made to work with a token being possible to interpret as both a term and an operator?
20:40 cotto what are you trying to parse that necessitates that?
20:42 plobsing joined #parrot
20:43 arnsholt cotto: Prolog
20:44 arnsholt In some cases operators are valid literals
20:44 GeJ servus cotto.
20:45 arnsholt For example, the draft standard I'm using for reference cites this as a valid example: f(:-, ;, [:-, :-|:-])
20:45 arnsholt (Yes, you may now recoil in horror)
20:46 cotto all I see is a smiley getting progressively happier
20:46 * cotto looks up prolog syntax
20:47 arnsholt f(':-', ';', [':-', ':-' | ':-']) is a more readable version
20:47 cotto I'm not sure I agree.
20:48 arnsholt [] is a list constructor, and the [ foo | bar ] construct is the same as (cons 'foo 'bar) in Lisp (if you're familiar)
20:48 arnsholt Yeah, it's not much better
20:49 cotto I'll be quiet until I have something other than noise to contribute.
20:49 arnsholt Heh, right. Anyways, :- and ':-' are equivalent (and one of the central operators, incidentally)
20:51 arnsholt So I need to figure out a way to allow the looser operators in certain contexts, but not in others
20:52 cotto I'd wager that pmichaud or some of the #perl6 folks would have enough familiarity with prolog to point you in the right direction.
20:54 arnsholt Probably a good suggestion
20:55 arnsholt I just try to keep my Prolog project out of #perl6, since it's not strictly the right place =)
21:00 cognominal hi,  is need_ext needed anymore in pmcs?  I don't see that handled anywhere but they are still there in 1 pmc in parrot and 8 in rakudo
21:07 plobsing take it out and see where it fails tests
21:07 plobsing rand > 0.5 and s/where/if/
21:18 dalek parrot: r47169 | plobsing++ | trunk/DEPRECATED.pod:
21:18 dalek parrot: deprecate logical vtables TT #1655
21:18 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47169/
21:27 cognominal plobsing, compiling, but bet  that ATTRS feels the ecological niche previously occupied by the need_ext fossil
21:32 Patterner joined #parrot
21:34 dalek parrot: r47170 | jkeenan++ | branches/tt1452_configure_debug (26 files):
21:34 dalek parrot: Begin to implement Parrot::Configure::debug().
21:34 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47170/
21:37 bacek Good morning, humans
21:37 mikehh hiho bacek
21:37 bacek aloha, mikehh
21:38 cotto bacek, the gc_massacre build works fine with tms but 'splodes with the default set to ms
21:38 mikehh bacek:  how's your massa-cre branch goin'
21:39 cotto it's also funny becuase I'm used to tms standing for transcranial magnetic stimulation, which is completely not a gc
21:39 bacek cotto, I know. Last commit broke ms.
21:39 bacek mikehh, pretty well :)
21:40 bacek cotto, I'm planning to replace ms with tms and rename it to ms.
21:40 cotto ms is really that useless?
21:42 bacek ms is really very naive.
21:45 cotto good for you hacking out tms so quickly
21:46 bacek cotto, I spend about month thinking how to make it :)
21:46 aloha joined #parrot
21:46 bacek A-ha! It works :)
21:46 bacek aloha, cotto
21:46 cotto is that your bot?
21:46 bacek yeap
21:47 cotto does it do anything?
21:47 bacek nope :)
21:47 cotto and is it running in Parrot?
21:47 plobsing it allows autocompletion!
21:47 bacek plobsing, it's sole purpose of this bot :)
21:47 plobsing aloha++
21:48 bacek cotto, hmm. Good idea. Care to migrate POE to parrot?
21:48 cotto aloha, aloha
21:49 plobsing is the structure of POE necessary in the presence of full CPS?
21:51 bacek plobsing, not really. But Bot::BasicBot runs on POE.
22:02 mikehh_ joined #parrot
22:02 plobsing what non-toy HLLs (beyond rakudo) are in a resonably testable state? I'm looking to make sure some changes I want to make don't affect anything.
22:06 bacek plobsing, lua
22:06 bacek or partcl-nqp afaik
22:08 arnsholt And nqp, I suppose?
22:09 plobsing nqp is dead
22:09 plobsing nqp-rx ftw
22:10 sorear that said, if rakudo works, nqp does
22:11 plobsing parrot lua?
22:11 plobsing lua?
22:11 plobsing damnit purl!
22:12 bacek purl, lua?
22:12 purl bacek: no idea
22:12 bacek purl, lua is http://github.com/fperrad/lua
22:12 purl OK, bacek.
22:14 mikehh opbots, names
22:16 arnsholt plobsing: Er, right. That's what I meant
22:16 arnsholt I've not really done anything with old nqp, so nqp-rx is just nqp to me =)
22:17 sorear plobsing: You should also check out winxed.  The author refuses to use PCT, so it's probably a much better test than Yet Another NQP Language
22:21 mariano joined #parrot
22:24 dalek parrot: r47171 | bacek++ | branches/gc_massacre/src/gc (2 files):
22:24 dalek parrot: Rename PoolAllocator.attrib_size to .object_size
22:24 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47171/
22:24 dalek parrot: r47172 | bacek++ | branches/gc_massacre/src/gc (2 files):
22:24 dalek parrot: Always use lazy allocator in PoolAllocator.
22:24 dalek parrot: It's proven to be faster.
22:24 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47172/
22:24 dalek parrot: r47173 | bacek++ | branches/gc_massacre/src/gc/gc_tms.c:
22:24 dalek parrot: Allocate 'constant' PMCs from separate pool
22:24 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47173/
22:27 plobsing sorear: winxed is my favorite parrot language. it's the first one I check.
22:29 mariano joined #parrot
22:30 plobsing rakudo spec is tl;dnr
22:31 bluescreen joined #parrot
22:40 plobsing removing misfeatures from 2003 is fun
22:41 dalek parrot: r47174 | plobsing++ | trunk (5 files):
22:41 dalek parrot: Eliminate <cmp_op>_(str|num) virtual ops (AKA IMCC op rewrite rules).
22:41 dalek parrot: These don't DWIM (eg: '$I1 = cmp_str $P0, $I0' does *integer* comparison),
22:41 dalek parrot: are generally a bad idea, and are unused.
22:41 dalek parrot: If these ops are actually desired, they should be added as real ops that DTRT.
22:41 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47174/
22:43 nopaste "mikehh" at 192.168.1.3 pasted "make corevm/make coretest 1 remaining failure" (20 lines) at http://nopaste.snit.ch/20754
22:43 plobsing ooh. palendromic commit number!
22:44 plobsing mikehh: noted. see TT #1666 for discussion.
22:44 mikehh make corevm/make coretest 1 remaining failure - see: http://nopaste.snit.ch/20754
22:44 mikehh all other tests PASS (pre/post-config, smoke (#34138), fulltest) at r47170 - Ubuntu 10.04 i386 (gcc with --optimize)
22:45 mikehh t/op/annotate-old.t - TODO passed:   1 in testf
22:45 mikehh t/op/exit.t - TODO passed:   6 in testf
22:47 sorear bacek: What does gc_tms do?  Just non-incremental tricolor?
22:47 sorear (Why is it called GC Massacre if you're adding GCs?)
22:47 bacek sorear, yes. It's described on GCMassacre wiki page
22:48 bacek sorear, I'm going to kill Memory_Pools, old GC, and maybe few kittens
22:48 hercynium joined #parrot
22:48 mikehh plobsing: there's just the one remaining test failing and I have tested on both i386/amd64 with gcc/g++ with qnd without --optimize
22:48 mikehh and
22:50 mikehh also the with the TODO passes, the first seems to pass on bot amd64 and i386 in testf but the latter only on i386
22:50 mikehh both
22:51 mikehh bacek: as long as you leave the poor puppies alone :-}
22:54 cotto parrot: r47177 | cotto++ | branches/puppy_massacre:
22:54 cotto parrot: Create a branch to remove all puppies.  We only like parrots.
22:54 cotto parrot: review: http://trac.parrot.org/parrot/changeset/47174/
22:55 bacek LOOOOL
22:56 mikehh cotto: ROFL - should have thought of that :-}
22:56 plobsing ENOPUPPIES
22:57 cotto It's a short-lived branch.
22:57 cotto not unlike the puppies
22:57 dalek parrot: r47175 | bacek++ | branches/gc_massacre/src/gc (3 files):
22:57 dalek parrot: Made Memory_Pools optional during gc_mark_root
22:57 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47175/
22:57 dalek parrot: r47176 | bacek++ | branches/gc_massacre/src/gc/gc_tms.c:
22:57 dalek parrot: Remove allocating of Memory_Pools in gc_tms. They are not needed anymore
22:57 dalek parrot: review: http://trac.parrot.org/parrot/changeset/47176/
23:02 NotFound Winxed is not a very good test not just because of not using PCT, also because It doesn't have lexicals.
23:03 NotFound And don't HLL map. So you can break a lot of important parrot parts without affecting winxed.
23:04 NotFound BTW I don't "refuse" to use PCT, I just don't use it.
23:05 sorear What's the difference?
23:05 NotFound Refuse sounds pejorative to me.
23:06 sorear ah.
23:12 dalek tracwiki: v59 | bacek++ | ParrotQuotes
23:12 dalek tracwiki: No puppies!
23:12 dalek tracwiki: http://trac.parrot.org/parrot/wiki/Pa​rrotQuotes?version=59&amp;action=diff
23:29 snarkyboojum joined #parrot
23:30 mikehh bacek: should I regen manifest etc in gc_massacre branch
23:41 bacek_at_work mikehh, not really. It's long way before branch will be ready for codetest fixes.
23:46 mikehh bacek_at_work: 'k just testin' then
23:51 NotFound About whiteknight's 1.000 man-hours estimate to build a compiler on top of Parrot: I wrote most of winxed in two months.
23:53 NotFound Calendar months, not work time ;)
23:53 sorear How sophisticated is winxed?
23:54 NotFound A lot less than perl ;)
23:54 NotFound But is a compiler anyway.
23:55 * mikehh heading back to amd64 - bbiab

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

Parrot | source cross referenced