Parrot 1.8.0 Zygodactyly released | Priority: define 2010 Roadmap | Priority: trac.parrot.org/parrot/wiki/ClassV...eOverrides | Latest modified TT's: icanhaz.com/parrotbugs | Parrot Languages: icanhaz.com/parrotlang
Set by moderator on 8 December 2009.
chromatic Always use bufstart. 00:00
cotto_work for now, getting it out of code not in src/string would be great
chromatic Fix substr to copy, not COW.
cotto_work are there any other priorities?
It's better to list more than we can do than to have bored hackers. 00:01
Whiteknight japhb: I suspect you would be using some sort of inference engine or topological sort
00:02 darbelo joined
chromatic I'm going to work on compile-time constant exception handlers attached to Subs. 00:02
Coke chromatic: is it safe to consider COW purely an implementation detail?
chromatic Yes.
japhb Whiteknight, it's beginning to look like the current standard is conversion to SAT (Boolean Satisfiability), and running the analysis there.
Coke hokay. that'll do it, then.
Coke wonders if there was any benchmarking done before strings were made COW, or if they appear that way, full formed. 00:03
chromatic I undid COW and did some benchmarking. Deep hurting.
Coke wasn't paying attention to the C back then.
Whiteknight chromatic: that seems like a special case of a much-needed improvement in constants handling
Coke chromatic: ... but if we remove it now, won't it hurt again?
Whiteknight exception handlers aren't the only type that stand to gain
chromatic We only have to remove it for the substr case. 00:04
As far as I know, I fixed a lot of constants.
EHs that are in scope for the entire sub are definitely fixable. 00:05
That applies to a lot of P6-style control exceptions.
We can avoid the cost of creating the exceptions, setting its handled types, and pushing it into the context.
s/exceptions/exception handler/ 00:06
Whiteknight japhb: I've wanted to write a robust rule engine for Parrot since I joined the project
a nice Rete implementation would be nice
00:07 tetragon joined
Whiteknight (and would be a nice building block for adding a prolog compiler, eventually) 00:07
00:07 ascent_ joined
japhb Whiteknight, well ... one of us is probably going to have to do it in the not too distant future 00:07
Plumage needs it. 00:08
I can keep hacking edge cases away, but fperrad++ will keep finding new edges. Or I can just do it right.
00:20 slash left
dalek tracwiki: v12 | cotto++ | AllHackathons 00:25
tracwiki: document what's planned for the hackathon tomorrow
tracwiki: trac.parrot.org/parrot/wiki/AllHack...ction=diff
00:37 Zak joined 00:40 patspam joined
Whiteknight when did the tomorrow hackathon plan get made? 00:40
chromatic You were on diaper duty.
Tene Whiteknight: it's been discussed a few times earlier this week
just casually in IRC
Whiteknight chromatic: I'm always on diaper duty! 00:41
chromatic TMI 00:42
pmichaud Coke: (commit less) No, restructuring won't reduce my commit rate. 00:45
remove cow for substr case.... that will hurt PGE and regexes bigtime
cotto_work Whiteknight, it's on the wiki 00:46
trac.parrot.org/parrot/wiki/AllHackathons 00:47
nm. saw "where"
japhb pmichaud, aren't you dependent on substr to save regex performance for variable-length encodings? 00:50
pmichaud in nqp-rx, we use that as an optimization, yes.
japhb s/you/PGE & NQP-rx/
pmichaud pge doesn't have that optimization
japhb right, that's what I was thinking
pmichaud but we also have to do substr for any sort of literal string match 00:51
as well as case-insensitive matches
chromatic That'll take some clever thinking then. 00:53
pmichaud why the push to eliminate cow for strings? 00:54
chromatic It's a push to slim parrot_string_t by at least two pointers.
pmichaud and that's an advantage because...? 00:55
chromatic You run the GC a lot less.
We're not talking about removing all COW.
It's the specific case where s->bufstart and s->strstart differ due to substr COW that gets hurt if we merge bufstart and strstart. 00:56
Other COW is unaffected.
pmichaud a lot of pge and regex stuff was designed around the knowledge that substr tended to be cow
i.e., that taking a substr of something wasn't going to make a lot of buffer duplicates 00:58
chromatic And it shouldn't.
00:58 he joined
Whiteknight why are we merging buf_start and string_start again? 00:58
chromatic There's probably a way to reduce the size of parrot_string_t while allowing substr COW.
Whiteknight because both have real uses
pmichaud oh, would substr still use the same buffer?
oh, in that case I'm much less concerned.
chromatic It can.
pmichaud -however- 00:59
if this is a quick fix, I say go for it (more)
if it ends up being at all involved, perhaps we should wait for a strings overhaul
we still don't have good unicode support on systems w/o icu
chromatic We're at the point of improving encapsulation right now, so there won't be any removal in the short term.
If we had to, we could make a parrot_substr_string_t with space for the additional pointer. 01:04
01:04 kid51 joined
kid51 posts a question he first posted 12 hours ago ... 01:06
Does anyone know the final plans for the online Roadmap meeting this weekend? 01:07
If so, we should post on list and change the channel topic.
chromatic 19:30 UTC, I believe. 01:08
01:09 mtk joined
kid51 That's on Sunday Dec 13, correct? 01:09
chromatic Correct.
moderator Parrot 1.8.0 Zygodactyly released | Online Parrot Roadmap Meeting: Sunday 13 December, 19:30 UCT 01:12
dalek tracwiki: v131 | jkeenan++ | WikiStart 01:14
tracwiki: trac.parrot.org/parrot/wiki/WikiSta...ction=diff
kid51 time 01:15
clock
purl, clock?
purl kid51: LAX: Fri 5:15pm PST / CHI: Fri 7:15pm CST / NYC: Fri 8:15pm EST / LON: Sat 1:15am GMT / BER: Sat 2:15am CET / IND: Sat 6:45am IST / TOK: Sat 10:15am JST / SYD: Sat 12:15pm EST /
01:21 mtk left
Coke pmichaud: can one do inline regexn in nqp-rx yet? 01:29
pmichaud I think nqp-rx repo has that capability, I'm not sure if it's been imported into parrot trunk yet 01:30
it undoubtedly will be before the evening is out, unless I get tired
cotto_work chromatic, ping 01:41
01:41 ascent joined
chromatic pong 01:41
01:42 DrForr joined
cotto_work chromatic, I'm looking at the callgrind profile when using annotations and PackFile_Annotations_lookup is eating 33% of the time. Is there a way to look up annotations iteratively to lower that overhead? 01:42
(i.e. would PackFiles be amenable to such an approach)
(that's with no output) 01:43
dalek tracwiki: v132 | jkeenan++ | WikiStart 01:47
tracwiki: trac.parrot.org/parrot/wiki/WikiSta...ction=diff
Whiteknight I figured annotations must be expensive, but 33%? 01:50
cotto_work That's just for looking them up.
(and without any output, which takes up about 29% when it's active. 01:51
I'm checking what it'd be with output, but it'll probably be done long after my weekend has started. 01:52
Interestingly, using the iterator interface is pretty cheap. I'll probably switch to messing more directly with the hash, but it's not nearly as expensive as I'd have expected. 01:55
particle what's robert kuo's handle? 02:01
cotto_work bubaflub
purl bubaflub is mailto:bobjkuo@gmail.com
cotto_work is his cla in?
particle yep, today 02:02
cotto_work that'll make him happy
particle i plan to be online for the sunday meeting, text me if i'm not around 02:03
dalek tracwiki: v13 | jkeenan++ | AllHackathons 02:04
tracwiki: Move last month's hackathon to newly renamed Previous Hackathons section
tracwiki: trac.parrot.org/parrot/wiki/AllHack...ction=diff
chromatic Nice list of ->strstart, kid51! 02:06
kid51 Thanks. Any other prep work you can think of? 02:07
grep is my friend :-)
chromatic Might be good to paste them somewhere on the wiki we can check them off, but I don't remember the right page name for that. 02:08
pmichaud just a note that (as posted on parrot-dev) I probably won't make it to the meeting until 20:30 utc 02:09
kid51 How do I start a new page on this wiki? 02:12
chromatic cotto_work, we need to change the way we store annotations to make that faster. 02:13
dalek rrot: r43008 | pmichaud++ | trunk/compilers/pct/src/PAST/Compiler.pir:
[past]: A few more opcode signatures.
kid51 I want to start a new wiki page called: PreDecemberReleaseHackathon 02:14
But simply entering that on trac.parrot.org/parrot/wiki/AllHackathons isn't cutting it.
chromatic Change the URL in place. 02:17
purl chromatic: that doesn't look right
cotto chromatic, do you think this would be helpful enough to other parts of parrot to be worthwhile? It sounds like there'd be a lot of effort involved? 02:21
dalek tracwiki: v14 | jkeenan++ | AllHackathons
tracwiki: trac.parrot.org/parrot/wiki/AllHack...ction=diff
tracwiki: v15 | jkeenan++ | AllHackathons
tracwiki: trac.parrot.org/parrot/wiki/AllHack...ction=diff
cotto gets to upgrade his interwebs to be half as slow 02:22
chromatic It shouldn't be too difficult. We have to change how we store annotations (one place), how we access them within libparrot (one place), and possibly ancillary utilities such as the PBC disassembler and pbc-merge.
cotto That'd be great. How much effort do you think it'd take me to go from zero to understanding Packfiles enough to make the changes? 02:23
it's a bit of yak shaving, but I'm surprised I haven't had to do more of that. 02:24
chromatic It shouldn't be too difficult. 02:25
The only tricky part is choosing the right data structure.
I think we need to switch to an array-based heap store, where we store the annotation by the pointer value in the PBC.
cotto goes offline briefly 02:28
02:32 cotto joined
dalek tracwiki: v1 | jkeenan++ | PreDecemberReleaseHackathon 02:38
tracwiki: Resources for Dec 12 2009 Development Hackathon
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
kid51 context_unify3 branch current test failures: See smolder.plusthree.com/app/public_pr...ails/30822 02:41
dalek tracwiki: v133 | jkeenan++ | WikiStart 02:54
tracwiki: trac.parrot.org/parrot/wiki/WikiSta...ction=diff
tracwiki: v2 | jkeenan++ | PreDecemberReleaseHackathon
tracwiki: Add Smolder report on context_unify3 branch at r43007</a>
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
tracwiki: v3 | jkeenan++ | PreDecemberReleaseHackathon
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
moderator Parrot 1.8.0 Zygodactyly released | December 12 Development Hackathon: tinyurl.com/ybrsgmp | Online Parrot Roadmap Meeting: Sunday 13 December, 19:30 UCT 03:01
colomon joined 03:08 allison joined 03:20 TiMBuS joined
dalek tracwiki: v4 | jkeenan++ | PreDecemberReleaseHackathon 03:28
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
rrot: r43009 | jkeenan++ | trunk/src/utils.c:
Replace one instance of '->strstart'. Attempts to replace the other three
03:35
kid51 1 down, 72 to go! 03:36
dalek tracwiki: v5 | jkeenan++ | PreDecemberReleaseHackathon 03:44
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
Coke pmichaud: whee. just moved some more PIR into NQP. 03:48
annoyingly, it was some PIR that I had reverse engineering from NQP previously. =-)
dalek rtcl-nqp: ce11002 | coke++ | (4 files):
move TclString's get_integer definition into NQP from PIR.

  - the :vtable is still in PIR, but it just dispatches to NQP.
03:49
rrot: r43010 | jkeenan++ | trunk/src/oo.c:
Replace three instances of '->strstart'. Cf.:
03:52
TT #1370 created by jkeenan++: ->strstart cleanup 03:57
tracwiki: v6 | jkeenan++ | PreDecemberReleaseHackathon 04:01
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
04:12 plobsing joined 04:44 darbelo_ joined
Coke bah. I can't seem to move get_bool to getBoolean in tcl string. 04:54
dalek tracwiki: v7 | darbelo++ | PreDecemberReleaseHackathon 05:07
tracwiki: Remove items that we can't be "cleaned up" yet, like GC bookeeping and assertions.
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
Coke AIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGH 05:15
cotto someone needs a hug 05:16
Coke bit again by == working differently in NQP than it does in tcl. 05:19
now I'm trying to figure out why try {} in NQP isn't catching an error. 05:20
Coke adds an empty CONTROL block to resolve the issue. 05:21
ugh. can't return from inside a try with a CONTROL {} block. whee. 05:52
dalek rtcl-nqp: aaf6aba | coke++ | src/ (2 files):
move guts of TclString's get_bool vtable into an NQP method.
05:54
06:14 cotto joined
dalek rrot: r43011 | cotto++ | trunk/src/utils.c:
[string] one more strstart removal that doesn't break anything. The other two
06:52
darbelo_ Hm. Speaking of that. Has anyone built a parrot with GC_VERBOSE turned on? It fails in spectacular ways for me. 07:14
s/that/deeper fixes/
cotto My need for deeper fixes has been overruled by my need for sleep. night. 07:18
darbelo_ Night. I should probably sleep too, now that you mention it.
dalek rrot: r43012 | pmichaud++ | trunk (2 files):
[pdd]: Add a proposed new draft for pdd31 -- HLL compiler and library interop
07:25
rrot: r43013 | pmichaud++ | trunk/docs/pdds/draft/pdd31_hll.pod:
[pdd31]: Improve the text of 'import' a bit.
07:48 chromatic joined 07:58 fperrad joined 08:02 fperrad_ joined 08:06 jsut_ joined 08:29 iblechbot joined 08:55 plobsing joined 09:09 mikehh joined 10:00 jan joined
chromatic Hm, why should Buffer_bufstart() be void *? 10:05
dalek rrot: r43014 | mikehh++ | trunk/src/utils.c:
fix src/utils.c to build with g++ - Buffer_bufstart is of type void *
10:08
10:24 bacek joined
darbelo chromatic: It's a 'generic pointer' to an amourphous blob of data? 10:26
That and the (whatever *) -> (void *) -> (whatever *) roundtrip gurantee. 10:27
10:50 pjcj joined
dalek rkdown: 43df65a | fperrad++ | markdown/grammar.pg:
now parrot-nqp supports '\\'', so remove \\x27
10:57
fperrad msg pmichaud when I trying to convert the Markdown grammar to NQP-rx, 11:33
I found that an empty string crashes NQP-rx.
purl Message for pmichaud stored.
fperrad See github.com/fperrad/markdown/blob/ma...rammar.pg, lines 408, 455 & 589.
msg pmichaud when I trying to convert the Markdown grammar to NQP-rx, I found that an empty string crashes NQP-rx. See github.com/fperrad/markdown/blob/ma...rammar.pg, lines 408, 455 & 589. 11:34
purl Message for pmichaud stored.
darbelo Hmm. s->strstart != Buffer_bufstart(s) indeed. If I change Parrot_str_to_cstring to return s->_bufstart everything breaks. 12:02
That's going to need some work to get fixed. But pmc_freeze is uglier, so it goes first. 12:04
12:07 lucian joined
nopaste "mikehh" at 81.149.189.7 pasted "code required to TODO failing tests in t/op/exceptions.t" (32 lines) at nopaste.snit.ch/19055 12:18
darbelo All tests successful. But editing pmc_freeze.c make me paranoid so testing of r43015 is appreciated. 12:23
Also, does anyone know if a PMC frozen in one machine should be able to be thawed on a machione of a different arch. 12:26
?
dalek tracwiki: v8 | darbelo++ | PreDecemberReleaseHackathon 12:34
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
rrot: r43015 | darbelo++ | trunk/src/pmc_freeze.c:
Rewrite push_opcode_* to Use the string API. Perform weird PackFile contortions to maintain the stream format. This code will become less ugly after the next deprecation boundary.
12:35
mikehh darbelo: had to add a couple of casts for g++ but after that it passes all tests inc fulltest 12:46
darbelo Agh. I keep forgetting about the c++ build. 12:47
mikehh++ # fixing the stuff I break.
12:52 Whiteknight joined
darbelo Whiteknight: ping 12:52
Whiteknight pong! 12:53
darbelo Do you know anything about building parrot with GC_VERBOSE turned on?
It causes all sorts of 'splosions for me. 12:54
13:06 riffraff joined
dalek rrot: r43016 | mikehh++ | trunk/src/pmc_freeze.c:
fix src/pmc_freeze. for g++ build
13:08
13:13 payload joined
Whiteknight darbelo: never tried it 13:16
i'ts very old, probably needs to come out
13:18 colomon__ joined
darbelo I can do that. Old, bitrotten, #ifdefs are my favourite deletion targets. 13:18
dalek rkdown: 9cabe0a | fperrad++ | markdown/Compiler.pir:
refactor (closer to NQP/Compiler.pir)
13:28
darbelo Damm. the shift_opcode_* functions are tricker than the push_opcode* ones 13:37
13:38 kid51 joined
darbelo Also, if we push() them in, why couldn'te pop() them out? 13:38
13:45 colomon__ joined
dalek tracwiki: v9 | jkeenan++ | PreDecemberReleaseHackathon 13:56
tracwiki: credit mikehh for one revision
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
tracwiki: v10 | jkeenan++ | PreDecemberReleaseHackathon
tracwiki: credit cotto for one revision
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
tracwiki: v11 | darbelo++ | PreDecemberReleaseHackathon
tracwiki: Tick another strstart use from the list.
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
rrot: r43017 | darbelo++ | trunk (6 files):
Remove unused and bitrotted GC_VERBOSE debugging output.
13:57
13:57 fperrad joined
kid51 darbelo ping 14:03
dalek tracwiki: v12 | jkeenan++ | PreDecemberReleaseHackathon 14:13
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
14:15 colomon___ joined
darbelo kid51: pong 14:16
kid51 Are you still looking at src/pmc_freeze.c? 14:18
I tried the Buffer_bufstart replacement in the 2nd of 4 groups, but it didn't work. 14:19
darbelo Not really, got sidetracked wth non-parrot stuff. 14:20
kid51 k
pmichaud ...is it noted somewhere that one cannot simply do a blind replacement of strstart with Buffer_bufstart ?
at least, not until we refactor the substr opcode
kid51 pmichaud: Could you add your thoughts on that to TT #1370? 14:21
pmichaud well, my thoughts on that are basically what I just wrote bove :)
*above
kid51 If that is so, then we should stop where we are.
darbelo src/pmc_freeze.c is probably the hardest part to cleanup, since it plays scary tricks with strstart.
kid51 I'll have to check moritz's log.
pmichaud iiuc, one can replace uses of ->strstart with Buffer_bufstart when it's known that the given string isn't a substring 14:22
I'm not sure one can always know when that's the case. Otherwise we get to issues noted in the thread surrounding r42961. 14:23
darbelo pmichaud: 'external' strings can bring problems too.
pmichaud darbelo: yes, that also
darbelo pmichaud: But that's not the only replacements we're doing. 14:24
look at r43015 for example.
mikehh pmichaud: your docs/pdds/draft/pdd31_hll.pod is failing t/examples/pod.t
pmichaud darbelo: sure, r43015 doesn't fit the pattern I just mentioned, though. 14:25
mikehh pmichaud: all except the last examples fragment - the other PIR_FRAGMENTs appear to be more specifications rather than code
nopaste "kid51" at 70.85.31.226 pasted "src/pmc/eval.pmc: This strstart replacement passes 'make coretest'" (13 lines) at nopaste.snit.ch/19056
pmichaud i.e., it's not a blind replacement of ->strstart with Buffer_bufstart
darbelo I also plan on looking if there's a way we can make substr() work with _bufstart == strstart when I'm done with pmc_freeze.c 14:27
pmichaud just be careful that the solution doesn't end up being "create a new string buffer". That will likely kill PGE and NQP performance (and everything that depends on them)
darbelo pmichaud: Yeah, other than that. The whole point of killing strstart is reducing gc pressure, creatings strings all over the place doesn't hep ther. 14:29
*help there.
kid51 pmichaud: Could you test whether the replacements of strstart we have made in the last 15 hours have had negative effects onn PGE or NQP? 14:30
pmichaud kid51: not easily
darbelo goes afk
kid51 Well, then, is Parrot's 'make test' inadequate for that purpose -- even though it's the only thing we have? 14:31
pmichaud I don't know how many operations are being tested using substring operands as opposed to whole strings.
that's how I ended up with the failure case in r42961 -- the original change was assuming that substrings would never be used as an argument to that function 14:33
it's not common to test every function for use with every possible type of string, at least not yet
anyway, I wouldn't expect most of the changes made thus far to seriously impact PGE or NQP, but since (by necessity and design) they make heavy use of substrings, and they tend to produce a lot of substring results, it's entirely possible that some of the changes would cause things to break that we aren't testing. 14:34
(substrings being the primary case where ->strstart != bufstart ) 14:35
kid51 Do you mind if I quote what you've just said in TT #1370? 14:38
pmichaud not at all
I'm by no means authoritative on this point, though. :) 14:39
mikehh: when does t/examples/pod.t get run? (what make target runs it?) 14:47
oh.... does pod.t run the PIR examples? 14:48
ick
14:50 cconstantine joined
kid51 needs to reboot 14:55
14:57 colomon___ joined
dalek rrot: r43018 | pmichaud++ | trunk/docs/pdds/draft/pdd31_hll.pod:
[pdd31]: Remove PIR_EXAMPLES pod directives from things that aren't examples.
15:03
mikehh pmichaud: It is part of make fulltest as well as make examples_tests as you no doubt found out 15:10
15:12 JimmyZ joined, JimmyZ left 15:13 JimmyZ joined, kid51 joined 15:14 Jimmy joined
Jimmy good evening, #parrot 15:14
15:24 slash joined 15:41 Psyche^ joined 15:44 patspam joined 16:19 theory joined 16:25 mikehh joined
darbelo WTF? 16:32
pmc_freeze keeps the suprises! I've just removed a big part of the image_io structure and everything works. 16:33
nopaste "kid51" at 70.85.31.226 pasted "Replacement of strstart in src/dynext.c -- passes make coretest and make test." (24 lines) at nopaste.snit.ch/19057 16:34
darbelo WTF is that packfile even there for?
16:34 mikehh_ joined
kid51 darbelo: If you get a chance, could you look at that paste? 16:35
although it's a "blind replacement", it passes make test
so, other things being equal, we would commit it.
darbelo looking now... 16:36
16:37 mikehh joined
darbelo It seems subject to pmichaud's usual objection. If we don't solve the substr() issue we can't do that. 16:37
kid51 Alright, I'll put the patch in the ticket but won't apply it. 16:38
darbelo But, I think we can safely use Parrot_str_to_cstring() there.
mikehh I keep dropping the internet connection - it's driving me crazy - gibber, gibber
kid51 Yeah, I was thinking, "mikehh - why not stick around for 60 seconds?" ;-) 16:39
darbelo Parrot_str_to_cstring() uses ->strstart to build the cstring.
mikehh certainly try :-}
kid51 Hmm, I just realized that in src/dynext.c, the instances are in locations specific to Win32 or Cygwin -- which I can't test. 16:43
darbelo kid51: That's the reason they survived my first "kill strstart" push some time ago ;) 16:45
kid51 Am making note of that on wiki page: trac.parrot.org/parrot/wiki/PreDece...eHackathon 16:46
nopaste "kid51" at 70.85.31.226 pasted "src/io/socket_unix.c: Replacement of strstart passes 'make test'" (13 lines) at nopaste.snit.ch/19058 16:56
kid51 darbelo: There's another one for you to look at.
dalek p-rx: d851756 | pmichaud++ | (4 files):
Add some HLL::Compiler capabilities, tests.
16:57
p-rx: 73f3c37 | pmichaud++ | (2 files):
Update HLL::Compiler.get_exports, add t/hll/03-exports.t .
p-rx: 5fa7530 | pmichaud++ | (2 files):
Update HLL::Compiler.import, add tests.
p-rx: 227aaf6 | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION.
p-rx: 31f41ef | pmichaud++ | src/ (12 files):
Update copyright information to The Perl Foundation.
p-rx: 9a9ea3d | pmichaud++ | README:
Update copyright information to The Perl Foundation.
p-rx: 782d140 | pmichaud++ | src/Regex.pir:
Update copyright information to The Perl Foundation.
p-rx: e2dd357 | pmichaud++ | src/stage0/ (4 files):
Update bootstrap.
tracwiki: v13 | jkeenan++ | PreDecemberReleaseHackathon 16:59
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
tracwiki: v14 | jkeenan++ | PreDecemberReleaseHackathon
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
tracwiki: v15 | jkeenan++ | PreDecemberReleaseHackathon
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
kid51 afk 17:03
nopaste "darbelo" at 190.136.175.208 pasted "Wait, why isn't this failing?" (78 lines) at nopaste.snit.ch/19059 17:04
darbelo Both parrot and rakudo report "All tests successful" with nopaste.snit.ch/19059 17:06
Even the decnum-dynpmcs freeze-thaw test pass without a hitch.
17:09 payload joined 17:41 brooksbp joined
brooksbp hello 17:42
purl hola, brooksbp.
brooksbp is parrot based of any well-known virtual machine like SECD or CEK?
allison brooksbp: no, it's a new concept. SECD and CEK were both targeting functional languages 17:59
brooksbp so what is parrot based off?
moritz C :-)
allison brooksbp: the behavior of parrot is inspired by things like the Perl and Python interpreters, but it's not really like any of them
brooksbp So there's no close theoretical machine? 18:00
allison brooksbp: nope, it's a new idea
brooksbp Is there an explanation for how the machine works?
brooksbp is hoping for anything but a pointer to the dev docs
allison brooksbp: no academic papers yet 18:01
brooksbp: what specifically are you interested in? it will help guide us in writing the papers
brooksbp Just a simple description of the parrot vm...
I've been implementing SECD, SECD hybrid that operates on AST, ECD abstract machine, CEK, and looking into tail calls 18:02
allison brooksbp: in terms of what features it implements? or the architectural philosophy?
brooksbp just wondering what 'type' of vm/abstr-machine parrot is... or how it operates
both, any, all
allison it's register-based, continuation-based, dynamic 18:04
garbage-collected, concurrent, supports exceptions, closures, continuations, coroutines
it has a global symbol table like Perl/Python 18:05
it natively runs a bytecode format and a low-level assembly language
brooksbp What are the main advantages over a simple machine like SECD?
allison tools for building dynamic languages, and a runtime that already includes most of the behavior needed for a dynamic language runtime 18:06
so, less development time needed to new dynamic languages up and running 18:07
(because less needs to be developed for a specific language)
18:07 mj41 joined
brooksbp Are there any ways to make the machine faster at the evaluation/transformation 'close to the metal' level? 18:08
allison tools to optimize a language during compilation, or optimizations for the virtual machine itself? 18:09
brooksbp the vm
18:33 chromatic joined
darbelo chromatic: ping 18:41
Whiteknight brooksp: we have optimization work yet to be done. Many of our systems are still young 18:43
chromatic pong 18:44
18:44 mikehh joined
darbelo Do you have any idea why is there a packfile in the imageio struct? 18:45
eh, image_io
the one that dirves freeze/thaw. 18:46
plobsing darbelo: its not really a packfile
chromatic I don't *know* for certain. I've written some of the freeze/thaw code in PMCs, but I can't say that I understand the design or implementation.
darbelo I removed it (nopaste.snit.ch/19059) and nothing failed.
Whiteknight I don't think anybody really understands that system right now 18:48
darbelo It's a quick hack, but from what I see it's only there to put a 'header' at the start of the string.
Whiteknight not entirely
darbelo And it can do that by living in the initialization function instead of a persistant data structure. 18:49
Whiteknight darbelo: where should I be looking if I wanted to learn more, pmc_freeze.c? 18:50
darbelo Whiteknight: unfortunately, yes.
It's slightly less chtulian nowadays, but you should strill tread carefuly. 18:51
Whiteknight where is the entry point? All the functions I see there are static 18:52
oh nevermind, I found the public functions all the way at the bottom of the file 18:53
We really need to come up with a good duplicates detector, like what the freeze code uses (but more general for other places) 18:55
chromatic Isn't there a CPD plugin for C? 18:56
Whiteknight CPD? 18:59
purl CPD is probably Commission on Presidential Debates, www.debates.org/, which controls all Presidential debates or cut-and-paste detector pmd.sourceforge.net/cpd.html or run by the former chairs of the DNC and RNC with explicit purpose to exclude third-party candidates
darbelo Oh, and from the bad news department: the strstart removal blocks on a way to substr() that keeps _bufstart == strstart but doesn't totally suck performance-wise. 19:00
chromatic We need to figure out how to have slim STRINGs while still allowing for cheap substr() without buffer copies. 19:01
Whiteknight a second string header with an IS_SUBSTR flag pointing into the buffer of the first header 19:02
nevermind, you'd need a pointer back to the original header to prevent it from getting GC'd 19:03
darbelo Whiteknight: And a pointer to the first header, so we can mark it.
Whiteknight: exactly. 19:04
Whiteknight exactly, bad idea
darbelo Otherwise you would be able to implement it with the 'external' PObj flag.
Whiteknight parrot_string_representation_t 19:05
chromatic You don't need a pointer to the first header; it uses reference counts for COW.
Whiteknight I'm sure there are very limited numbers of combinations of encoding/charset, we could create objects to store those combinations together
we could also separate out the notion of a "string" and a buffer 19:06
where the buffer is storage, and strings point into it
it's an idea that would be able to save us more in terms of string constants than runtime strings though 19:07
darbelo That would make for smaller structs, but with more bookeeping.
chromatic Unless we have a clever duplicate buffer detector.
Whiteknight a build-time duplicate detector for CONST_STRINGs would be a major win, I think 19:08
at least in terms of memory footprint
but I've kicked that dead horse before
what's the difference between bufused and strlen? 19:09
chromatic Suppose your substr doesn't use the entire buffer. 19:10
I don't think we allow duplicate CONST_STRINGs now.
Whiteknight what if strings could have an attached "->window" object, that would provide a window on the buffer in the case of a substr?
if ->window != null, we have a substring and act accordingly 19:11
so we would have one pointer in place of strstart and strlen
chromatic I'd rather use polymorphism. 19:12
Whiteknight including the parrot_string_representation_t idea, STRING is down in size by 2 pointers, and only a little slower for the incommon cases
how would that work, if "$S0 = substr $S0..." would we create a new header or have to copy over the existing one? 19:13
chromatic That's an easy case; create a new parrot_string_substr_t and set a flag in the header. 19:14
Whether it's desirable to create a new struct for that case... meh.
19:14 mj41 joined
Whiteknight I was looking for literature in support of immutable strings, but most of what I found was against them 19:15
so I stopped looking 19:16
chromatic Really?
Whiteknight I'm reasonably sure I didn't google for "immutable strings are TEH SUXXOR", but those are the kinds of results I seem to remember seeing
probably need to search more
my memory is made of fail 19:17
chromatic Profile almost anything and see how many Parrot_str_new_COW() calls we have for cases where we know we shouldn't modify anything (such as getting the name of a class). 19:18
Whiteknight a case to be made for enforcing certain strings to be considered constant 19:20
create the COW reference only after we try to modify the constant string 19:21
chromatic Oh, did I mention that we have to analyze every STRING passed to subs?
If they're constant, we have to create COWs and pass those instead.
Whiteknight what do you mean by that?
chromatic STRINGs, even stored in registers, always have reference semantics. 19:22
We have no intrinsic string type with value semantics.
Whiteknight so what's the way to do all this right, if we had the opportunity to throw it out and start fresh? 19:24
chromatic Do not allow string modification in place.
19:25 bacek joined
chromatic Always return a new string header for operations which mutate. 19:25
Whiteknight without inplace modification you end up with a tonne of copies
chromatic Behind the scenes, play whatever buffer games you like.
Whiteknight </british for some reason>
chromatic We already have a ton of copies to *avoid* in-place modification.
When you find yourself working around your optimization because it breaks things, it's time to reconsider that optimization. 19:26
Whiteknight immutable strings seems to just be a more consistent COW scheme
chromatic If you need in-place modification, use a String PMC which can hide the fact that the STRING primitive is immutable. 19:27
Whiteknight that's a decent rule of thumb, but it really hides the idea that String should just be a boxed version of STRING
a StringBuilder would be better in my estimation
chromatic PMCs have reference semantics.
Whiteknight but that's nitpickery on my part
darbelo Except that we try to fake value semantics at the PIR level for PMCs 19:29
chromatic For fun, remove lines 614-619 of src/call/args.c.
Watch tests fail.
Debug.
darbelo, that's because we don't have intelligible lvalue semantics for PMCs. 19:30
(also because we can't store primitives in certain places such as lexpads)
19:32 mj41 joined
darbelo (args.c) That's... ugh. 19:32
chromatic See also key_string() and src/pmc/class.pmc +587 19:33
darbelo Ouch. 19:34
Whiteknight I guess I really dont understand the lvalue semantcs problem
chromatic For PMCs?
Whiteknight yeah 19:35
darbelo Whiteknight: It's easy, what happens to a PMC on the left side of a '=' ?
Whiteknight I never looked into it, only saw what was said on list
darbelo If you can't tell, then you don't have clear semantics.
Whiteknight well "=" is a syntax issue. we have set and assign ops 19:36
darbelo And what does each one do? Is the PMC a value or a reference? 19:39
chromatic What if the PMC is an aggregate?
Whiteknight ok, point illustrated. 19:41
again, how do we make it sane?
chromatic The best idea I've heard is to figure out the appropriate vtable entries for the behaviors we want to support. 19:42
bacek Good morning 19:46
Whiteknight hello bacek
bacek aloha Whiteknight
darbelo Is it tomorow morning already? Damm. 19:47
bacek++ # Time travel.
Whiteknight so what lvalue semantics do we even want to support? I can think of two classes: "overwrite storage with new pointer", and "set value" 19:53
the former wouldn't be a vtable at all
chromatic pmichaud will know better.
Whiteknight so many things like this I think would benefit from being written down 19:55
chromatic Lots of failures still in context_unify3... not to the point of debugging yet. 19:56
bacek chromatic, I just added all this failures.
chromatic Oh, I thought we were removing failures today. 19:57
darbelo Well, we can't remove them if nobody add them, right?
dalek rrot: r43019 | bacek++ | branches/context_unify3 (2 files):
Add Parrot_pcc_allocate_empty_context to allocate new context without
purl registers is better www.theregister.co.uk/2005/10/18/wi...y_problem/
rrot: r43020 | bacek++ | branches/context_unify3 (2 files):
Expose init_context function.
rrot: r43021 | bacek++ | branches/context_unify3/src (2 files):
First naive try to avoid creating of many useless CallContext objetcs
kid51 wakes up and reads 3 hours of backscroll
moritz purl: forget registers
purl moritz: I forgot registers
bacek chromatic, no you have a lot of opportunities to remove them!
s/no/now/ 20:00
kid51 Is this instance of replacement of strstart valid? nopaste.snit.ch/19058 20:05
20:05 mikehh joined
pmichaud Whiteknight: (assignment versus bind) trac.parrot.org/parrot/wiki/WhyDoes...icientCode 20:11
chromatic What's next on the branch, bacek? 20:16
bacek chromatic, figure out how to pass args/results...
chromatic Do you have a list of tasks we can help? 20:17
Whiteknight's not doing anything interesting at the moment.
cotto me too
darbelo is doing something frustrating at the moment. 20:18
I welcome any excuses to get away from this goddam file. 20:19
bacek Ok, I'm dcommiting current code from my local branch. 20:20
Main "task" is to understand clearly where we should push new context, how argument passing should work, etc.
Next task - fix tailcall. 20:21
chromatic Let's take the context pushing out of Sub.invoke. 20:25
I can't think of anything that breaks if the new context is already in place when we call invoke. 20:26
bacek chromatic, I tried it. 20:28
"invokecc"
op invokecc.
If Sub.invoke doesn't push context, than invokecc has to push it
chromatic Why not the *param ops?
bacek set_params? 20:29
It's called way too early to push created context.
allison bacek: too early to push it, yes but not too early to create it 20:31
chromatic Where do we store it if it's created but not pushed?
bacek allison, it's actually created in set_args
dalek rrot: r43022 | bacek++ | branches/context_unify3/src/call/args.c:
clone_key_arg can accept NULL
rrot: r43023 | bacek++ | branches/context_unify3/src (2 files):
Move pushing of context into Sub.invoke instead of invoke_from_sigobject
rrot: r43024 | bacek++ | branches/context_unify3/src/ops/core.ops:
Update passing of args/results to use current context
bacek chromatic, ctx->current_sig 20:32
same as in trunk
allison chromatic: same place we store the signature object now
bacek t/op/calling.t (Wstat: 2560 Tests: 97 Failed: 10)
Failed tests: 23, 37-39, 52, 61-62, 91, 96-97
Non-zero exit status: 10
oookey. Much better now
chromatic Oh, I thought we removed that. Easy enough for now. 20:33
bacek Ok, tailcall is broken.
nopaste "kid51" at 70.85.31.226 pasted "What we've committed to trunk since in last 18 hours" (613 lines) at nopaste.snit.ch/19060
bacek Looks like simple args/results passing works
(my family waking up) 20:34
chromatic kid51, I don't think nopaste.snit.ch/19058 is right. 20:36
./src/pmc/sub.pmc:390: warning: ignoring return value of ā€˜Parrot_pcc_init_context’, declared with attribute warn_unused_result 20:39
bacek chromatic, fixed 20:40
chromatic When building PCT: src/call/context_accessors.c:301: failed assertion 'ctx' 20:42
tailcalls? 20:43
purl tailcalls are borked
bacek tailcalls 20:45
purl tailcalls are borked
dalek rrot: r43025 | bacek++ | branches/context_unify3/src/pmc/sub.pmc:
Initialize context before pushing.
20:47
rrot: r43026 | bacek++ | branches/context_unify3 (2 files):
Update Parrot_pcc_init_context guards
kid51 chromatic: That warning: Are you getting it in 'make coretest' or 'make test'? 20:51
kid51 is not getting that warning on Linux/i386
Correction: During 'make corevm' or 'make'?
bacek kid51, it's on context_unify3 branch
dalek tracwiki: v16 | jkeenan++ | PreDecemberReleaseHackathon
tracwiki: trac.parrot.org/parrot/wiki/PreDece...ction=diff
bacek fib.pir is passing on r43027 20:52
kid51 Alright, then; chromatic, what problem do you see in paste 19058
chromatic kid51, if the string used in IO is the result of a substr() operation, the logical string will not start at the start of the buffer. 20:53
bacek have to go. I'll try to fix tailcalls if no-one beat me
chromatic Any advice on what to do next, bacek?
Hm, we can get rid of ->buflen. 20:55
Probably ->bufused too.
By which I mean "move them into the buffer *before* the memory location to which ->bufstart points." 20:56
Yes, that does mean the macros to access those values have to use negative offsets... but that's acceptable C black macro magic. 20:57
darbelo chromatic++ # black macro magic 20:59
21:00 Zak joined
dalek rrot: r43027 | bacek++ | branches/context_unify3/src/call/context.c:
Clear registers after allocation.
21:04
21:25 bacek joined
chromatic Oh, I see. Create the signature (which implies a context), then fetch and push that later. 21:27
21:34 naypalm joined
Whiteknight "black macro magic" <- my favorite santana song 22:26
bacek chromatic, indeed
chromatic For the buffer we store { INTVAL refcount; INTVAL buflen; INTVAL bufused; void *bufstart; } and in the STRING we point to bufstart. 22:28
Whiteknight that doesnt decrease overall memory usage 22:29
chromatic We have to do some compile-time calculations in the header to figure out the appropriate math for the offsets to avoid any struct padding/alignment issues on weird platforms, but the macros are trivial.
Sure it does.
Whiteknight just makes accessing those fields harder
chromatic We don't have to have four bytes for buflen and four bytes for bufused in parrot_string_t. 22:30
We shrink that from 36 bytes to 28.
We fit 22% more STRING headers in the same amount of space and we don't hurt substr. 22:31
Whiteknight we can do that now inplace 22:32
chromatic Our buffer allocations get 8 bytes larger apiece, but we have the same number of allocations overall.
Combine that with compile-time combinations of encoding/charset, and we can fit 33% more STRING headers in the same amount of space. 22:33
That's like making the GC 33% more efficient.
Hah, and we could take a trick from the old tile-based video games. 22:39
Store all of the constant string text in the constant segment of the object file.
Make one buffer pointing to that.
All constant strings point to that buffer but have a different ->strstart and ->strlen. 22:40
Try to modify a constant string in place? BLAM!
<crickets>C'mon, someone appreciate my evil brilliance.</crickets> 22:41
pmichaud +1 22:42
purl 1
Tene +1
purl 1
pmichaud chromatic: we've come to always expect such brilliance from you
Tene pmichaud: it's still nice to express appreciation.
pmichaud Tene: oh, absolutely! 22:44
purl Oh my, yes.
pmichaud I was waiting to see it in code first :-)
chromatic It's difficult to tell if I've dazzled everyone with bad ideas, with ideas fully-formed in my own mind, or if you're all at the grocery store or changing diapers. 22:47
pmichaud Ah. I think it makes excellent sense that the buffer information be stored along with the buffer. I'm a little surprised it wasn't that way already :-) 22:51
chromatic Yeah, we have to access it all in the same spot, and there aren't many of those. 22:52
Tene chromatic: I think it's a great idea.
22:56 colomon___ joined
pmichaud afk, time to take the family to dinner 22:56
(no diapers here anymore, fortunately.)
23:05 davidfetter joined
chromatic The goodnews is that ->bufstart and ->buflen have macro encapsulation. ->bufused does not. 23:08
23:21 colomon joined 23:47 mikehh joined