Parrot 0.6.3 "Beautiful Parrot" Released | parrotcode.org/ | 5/649/88 new/open/stalled tix | logged in irclog.perlgeek.de/parrot/today
Set by moderator on 26 June 2008.
dalek r29271 | jkeenan++ | parallel: 00:08
: Extract most object methods from Parrot::Configure and place them in
: Parrot::Configure::Base, whence they can be inherited by new class
: Parrot::Configure::Parallel as well. The latter has the same structure as the
: Parrot::Configure object.
purl i guess : parrot::configure object is now a singleton. So most tests have been put in a
dalek diff: www.parrotvm.org/svn/parrot/revision?rev=29271
00:09 AndyA joined 00:13 cotto_work joined
Whiteknight hah! i just got my first core dump! 00:21
cotto_work take a picture! 00:27
purl It'll last longer!
00:29 Limbic_Region joined 00:36 bacek joined
dalek r29272 | Whiteknight++ | gsoc_pdd09: 00:36
: [gsoc_pdd09] A few changes:
: * fix problem where sized pools are getting double-swept
: * improve (maybe not fix) card setting function to avoid overlapping
: * fix bounds-checking on cards in pool sweep code.
: * Update comments and readme
diff: www.parrotvm.org/svn/parrot/revision?rev=29272
Whiteknight slowly but surely, I'm getting this to work right 00:37
Limbic_Region Whiteknight: when does SoC end? 00:40
Whiteknight too soon
purl too soon is www.encyclopediadramatica.com/index.php/Too_soon
Whiteknight i dont know when exactly\\ 00:41
it doesn't matter, i plan to parrot for a long time
Limbic_Region well, that's good
particle aug17 iirc
Limbic_Region I was just wondering if there were required deliverables by a certain time frame
particle soccer &
00:57 Ademan joined 01:05 petdance joined 01:26 Ademan joined
TimToady there is no bool type in Perl 6, nor is there a true or false value. The type name is Bool, and its enum is False,True 01:42
you can say .Bool, but that's just a type coercion like .Int 01:43
dalek r29273 | cotto++ | trunk: 01:45
: [codingstd] wrap macro args in src/jit/mips/jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29273
pmichaud TimToady: so, S12 is incorrect about the built-in "bool" enum? 01:49
dalek r29274 | cotto++ | trunk: 01:55
: [codingstd] wrap macro args in src/jit/ia64/jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29274
02:10 teknomunk joined 02:28 particle1 joined 02:30 rdice joined 02:40 wknight8111 joined
dalek r29275 | jkeenan++ | parallel: 02:51
: Create pcfreeze() and replenish() as wrappers around Storable::nfreeze and
: thaw. Combine two test files into one, replenishing the Parrot::Configure
: object to do so.
diff: www.parrotvm.org/svn/parrot/revision?rev=29275
kid51 must sleep 02:53
purl $kid51->sleep(8 * 3600);
dalek r29276 | cotto++ | trunk: 03:32
: [codingstd] ignore token concatenation when looking for unwrapped macro args
diff: www.parrotvm.org/svn/parrot/revision?rev=29276
r29277 | cotto++ | trunk: 04:01
: [codingstd] Wrap macro args in src/jit/i386/jit_emit.h. Yes, all of them.
diff: www.parrotvm.org/svn/parrot/revision?rev=29277
bacek moritz: around? 05:10
purl nope.
05:20 baest joined 05:21 Psyche^ joined
baest identify spade 05:21
whoops
05:56 uniejo joined
dalek r29278 | cotto++ | trunk: 06:05
: [codingstd] wrap macro args in src/jit/hppa/jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29278
r29279 | cotto++ | trunk: 06:28
: [codingstd] wrap macro args in src/jit/arm/jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29279
06:46 barney joined, Ademan joined
dalek r29280 | cotto++ | trunk: 07:07
: [codingstd] wrap macro args in src/jit/amd64/jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29280
moritz bacek: now I'm around 07:09
good morning ;)
bacek moritz: I already started my friday night beer :)
moritz: I actually want to ask for apache rewrite rules for ilbot.
moritz bacek: aren't they in the repo? 07:14
svn.pugscode.org/pugs/misc/irclog/cgi/.htaccess 07:15
dalek r29281 | cotto++ | trunk: 07:16
: [codingstd] wrap macro args in src/jit/alpha/jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29281
bacek moritz: OSHI...
moritz perhaps I should have named it just htacess in there ;) 07:17
bacek moritz: good idea :) I didn't realize that it already here...
07:27 mire joined
dalek r29282 | cotto++ | trunk: 07:34
: [codingstd] wrap macro args in various files
diff: www.parrotvm.org/svn/parrot/revision?rev=29282
r29283 | chromatic++ | trunk: 08:01
: [OO] Made get_class and typeof return the same PMCProxy PMC. See RT #56816.
: There may be a further performance improvement available by caching the
: PMCProxy as needed for each built-in PMC, but it's only useful if you extend a
: built-in PMC from PIR.
diff: www.parrotvm.org/svn/parrot/revision?rev=29283
mj41 hi, 29277, 2008-07-11 06:00:54, cotto - breaks trunk? .... tt.ro.vutbr.cz/report/pr-Parrot/dif...e+selected
or anything odd with TapTinder? 08:03
08:04 iblechbot joined 08:06 jq joined
cotto_home mj41, I'll look into it. Thanks for noticing. 08:08
nopaste "mj41" at 147.229.5.124 pasted "to cotto, make error" (30 lines) at nopaste.snit.ch/13557 08:12
cotto_home how did you run Configure.pl? 08:14
nopaste "mj41" at 147.229.5.124 pasted "configure output" (88 lines) at nopaste.snit.ch/13558 08:16
mj41 $make_cmd = 'make'; 08:17
$conf_cmd = 'perl Configure.pl';
cotto_home I'm not getting that failure. 08:20
I'll look through the diff for something obviously broken I missed the first time. 08:21
moritz gets and error in t/tools/dump_pbc.t 08:22
cotto_home Something tells me my karma's not going to look very good in the morning. 08:23
mj41 imho it's ok, many commits, but only one broken and probably only for one/my machine configuration :-) 08:28
cotto_home found something suspicious 08:33
try lowercasing sTI on line 1141 of src/jit/i386/jit_emit.h and see if that fixes the break 08:34
or just svn up 08:36
dalek r29284 | cotto++ | trunk: 08:37
: [jit] fix a capitalization bug
diff: www.parrotvm.org/svn/parrot/revision?rev=29284
cotto_home you still there?
mj41++ #for finding and reporting the break 08:39
moritz captilization bug => captital punishment? ;-) 08:41
cotto_home It's almost 2:00 here and I need sleep. If it's still broken msg me via purl and I'll take care of it in the morning.
moritz, is your t/tools/dump_pbc.t failure related to mj41's? 08:42
moritz cotto_home: don't know, but don't think so 08:43
mj41 cotto, good night, see tt.ro.vutbr.cz/report/pr-Parrot/rp-trunk at the morning
moritz cotto_home: go get some sleep ;-)
cotto_home sleep & 08:44
nopaste "mj41" at 147.229.5.124 pasted "r29284 - make error (broken in 29277)" (74 lines) at nopaste.snit.ch/13559 08:49
dalek r29285 | bernhard++ | trunk: 09:34
: [Rekudo] Some tidbits in docs/compiler_overview.pod and README
diff: www.parrotvm.org/svn/parrot/revision?rev=29285
r29286 | bernhard++ | trunk: 10:01
: [Pipp] Steal the quote-parsing code from Rakudo.
: But don't use it yet.
diff: www.parrotvm.org/svn/parrot/revision?rev=29286
10:14 Whiteknight joined 10:19 donaldh joined 10:21 Auzon joined 10:23 skv_ joined
dalek r29287 | bernhard++ | trunk: 11:01
: [Pipp] Use 'quote_expression' for single and double quoted strings.
diff: www.parrotvm.org/svn/parrot/revision?rev=29287
11:03 idemal joined
dalek r29288 | bernhard++ | trunk: 11:27
: [Pipp PCT] Merge the rules 'array_assign' and 'scalar_assign' into 'var_assign'.
: Support interpolation of keyed variables in a string.
diff: www.parrotvm.org/svn/parrot/revision?rev=29288
11:39 ruoso joined 11:40 uniejo joined, Whiteknight joined
dalek r29289 | julianalbo++ | trunk: 11:46
: Fix a typo in i386 jit_emit.h
diff: www.parrotvm.org/svn/parrot/revision?rev=29289
12:10 Infinoid joined 12:43 iblechbot joined 12:54 rurban joined
dalek r29290 | pmichaud++ | trunk: 13:05
: [rakudo]: spectest-progress.csv update: 95 files, 1691 passing tests
diff: www.parrotvm.org/svn/parrot/revision?rev=29290
13:14 Ademan joined
dalek r29291 | kjs++ | trunk: 13:15
: [docs] update pct docs a bit.
diff: www.parrotvm.org/svn/parrot/revision?rev=29291
r29292 | kjs++ | trunk: 13:25
: [pdd19] add :lexid, but description not complete yet (not sure about details).
diff: www.parrotvm.org/svn/parrot/revision?rev=29292
r29293 | kjs++ | trunk: 13:26
: [chitchat] add more action methods.
: * made some assumptions/guesses from memory about semantics because lack of internet access and thus no access to reference.
: * grammar might need some tweaks.
diff: www.parrotvm.org/svn/parrot/revision?rev=29293
13:41 gryphon_ joined 13:46 rdice joined
dalek r29294 | bernhard++ | trunk: 13:51
: [Pipp PCT] Try to add support for complex string interpolation with curlies.
: But on input like
: echo "{}";
: an infinnite loop may happen.
diff: www.parrotvm.org/svn/parrot/revision?rev=29294
13:57 Whiteknight joined 14:01 NotFound joined
NotFound Hello 14:01
Whiteknight hello 14:03
purl salut, Whiteknight.
pmichaud hello 14:09
purl hola, pmichaud.
NotFound hello 14:11
purl hola, NotFound.
NotFound Doesn't like caps?
pmichaud too lazy to shift this morning ;-0
jonathan *groan* 14:15
dalek r29295 | Whiteknight++ | gsoc_pdd09: 14:17
: [gsoc_pdd09] updating to trunk r29294
diff: www.parrotvm.org/svn/parrot/revision?rev=29295
pmichaud jonathan: how hard would it be to get an outer Sub PMC to maintain a list of all of the (inner) Closure PMCs that reference it via :outer ? 14:20
14:20 ron joined
jonathan pmichaud: To maintain it, or to build it at compile time? 14:21
pmichaud (phone) 14:22
well, primarily build at compile time, but I suppose it's also possible for a Closure PMC to be GCed 14:24
(still on phone -- bbiab)
jonathan Hmmm...which could be a problem, because if it's on a list that we scan, it'll never get GC'd. 14:26
Whiteknight in my branch, it's not really possible for anything to get GC'd yet 14:28
14:39 jhorwitz joined
tewk Does parrot support weak references? 14:40
cognominal tewk, you don't need them 14:43
weak references is are kludge because reference counting has problem with structures that contains loops. 14:44
Infinoid volunteers to port weaken() to rakudo 14:45
cognominal that would be a noop? :) 14:53
Infinoid yep!
we could implement it in lolcode
hmm. since we have pluggable GCs, is a refcounting GC an option? so far it sounds like the API prevents that
(an answer of "there's no way you would ever want to do that" is also acceptable.) 14:54
cognominal in our communauty, we want to do whatever we want 14:55
14:57 Andy joined
Whiteknight Infinoid, I suspect that true reference counting is not currently possible, no 14:57
at least, not without major modifications 14:58
Infinoid thought so, thanks
it occurs to me that there's a huge amount of code that simply drops a pointer and expects things to be cleaned up automatically. that does keep the code a *lot* cleaner. 14:59
cognominal community! # I always trip on that one
15:08 rdice_ joined
pmichaud (off phone) 15:10
I was thinking that we wouldn't need to follow the inner_sub list to mark its members as live
just that when a Closure PMC was destroyed, it removed itself from it's outer_sub's list 15:11
*its
jonathan pmichaud: I haven't had chance to read your mails to the list yet, which probably give some context to this discussion. :-) 15:12
pmichaud I think only the last one is worth reading :-)
jonathan That aside - we statically know within a compilation unit what references a sub as being one of its outers. So it's possible. 15:13
pmichaud but essentially the bottom line is that we need to make sure that every inner sub has a newclosure performed on it at the time the outer sub is invoked
jonathan Can we not turn it around and lazily newclosure it if the outer sub has been invoked since we last were? 15:14
pmichaud apparently newclosure on invoke is a real problem
for one, we can't always know that we're invoking the inner directly from its outer 15:15
15:15 barney joined
pmichaud the sub might be invoked several levels deep, which means we have to chase up the call stack to hopefully find the sub that this was intended to be newclosured in 15:16
s:1st/the sub/the closure/; 15:17
jonathan Ah, you're saying newclosure is transitive?
pmichaud from what I gather from what I think rgrjr is saying, newclosure at the point of invoke is an issue.
jonathan OK.
pmichaud I'm not certain he's absolutely right about that or that it's unfixable, but I'm looking for other options. :-) 15:18
jonathan So, to answer your question - it's messy, but possible, particularly handling it from a GC perspective.
As far as I can see, anyway.
pmichaud okay, that's good enough for me.
jonathan But I'm answering without reading this in any kind of context.
pmichaud yes, no problem. I just wanted to know if I was overlooking anything obvious before I investigated it further.
jonathan After my last attempt at trying to fix closure stuff up for you, and the fallout of it, I kinda got fed up of it and wanted to do something else for a while... 15:19
pmichaud again, I think my latest post summarizes the issues fairly well and concisely describes how I think we can solve it
jonathan Parrot guts, at times, can be highly frustrating.
pmichaud and yes, I agree with the frustration, which is why I was looking into possibly doing this myself instead of shoving the frustration off to you :-)
Whiteknight agreed!
(Parrot guts can be highly frustrating)++ 15:20
pmichaud your latest changes for lexid and closures gave me enough "oh, here's how it works" details that I think I could make the changes myself if necessary, or at least do an experimental branch with them.
jonathan OK, that's something at least.
And lexid is something we needed anyway and I guess is here to stay. 15:21
pmichaud oh, definitely -- it was very informative and helpful for me.
on another topic (Bool versus bool) -- very interesting conversation with TimToady on #perl6 last night 15:22
irclog.perlgeek.de/perl6/2008-07-11
I don't things are entirely resolved yet, but it did help me to understand .Bool, .true, prefix:<?>, etc., or at least the way the spec is leaning at this point 15:23
jonathan Ah, I saw his commit and not the discussion; the commit didn't to me look to address all of the issues.
pmichaud yes, the discussion is exactly because to me the commit didn't look to address all of the issues :-) 15:24
jonathan In fact, it confused me more - I'll read the conversation log though.
pmichaud i.e., the conversation was a result of the commit, not vice-versa
jonathan Oh, OK. What came first... :-)
pmichaud (commit was at 2:03, conversation started at 3:00 :-)
dalek r29296 | Whiteknight++ | gsoc_pdd09: 15:27
: [gsoc_pdd09] rearrange marking for child objects to account for pointer dependencies. Add a few break statements where GC and DOD blocking might need to be tested.
diff: www.parrotvm.org/svn/parrot/revision?rev=29296
jonathan pmichaud: Too distracted with $otherjob to read it properly now, but will look later; thanks. 15:30
pmichaud no problem, just wanted to make sure you were aware of it
15:47 Theory joined
dalek r29297 | cotto++ | trunk: 15:50
: [codingstd] fix macro args test, making it catch all token concatenations
diff: www.parrotvm.org/svn/parrot/revision?rev=29297
15:58 sjansen joined 16:10 AndyA joined 16:11 gryphon_ joined
dalek r29298 | cotto++ | trunk: 16:16
: [codingstd] whitespace fix and line length fix
diff: www.parrotvm.org/svn/parrot/revision?rev=29298
r29299 | Whiteknight++ | gsoc_pdd09: 16:26
: [gsoc_pdd09] fixed bad ordering in sweep code. hdrs swept front-to-back, corresponding to cards from back-to-front. Fixed premature freeing of some PMCs, but now exposes random segfault in hash code.
16:26 uniejo joined
dalek diff: www.parrotvm.org/svn/parrot/revision?rev=29299 16:26
cotto_home can anyone see tt.ro.vutbr.cz/report/pr-Parrot/rp-trunk ? 16:37
jhorwitz cotto_home: no
timeout
cotto_home thanks. 16:38
work &
barney cotto_home: I see it 16:42
jonathan pmichaud: Just read the discussion and not feeling like it really answers much. :| 16:49
pmichaud it doesn't yet, other than to say that it's not answered yet :-) 16:50
jonathan Think it's worth me mailing p6l? 16:51
pmichaud Larry's aware of it, I suspect we'll see an update soon.
jonathan OK.
16:51 rurban joined
pmichaud I'm looking at namespace interpolations for jhorwitz -- unfortunately we've got a lot of changes to make to existing code in actions.pm 16:51
jonathan I can imagine that classes in some places ain't handling namespaces the Right Way. 16:52
And likely the same for roles too.
pmichaud it's not just namespaces, but also method names and routine declarators
and enums
jonathan We need to be able to stick namespaces on these too? 16:53
pmichaud $foo.XYZ::method(...)
jonathan sub foo::bar::baz() { ... }
jonathan wonders how $foo.XYZ::Mehotd() parses
pmichaud <methodop> takes a <longname> which takes a <name> which can contain namespaces 16:54
<name> is anything with colons
as opposed to <ident>
jonathan Ah
pmichaud quite a bit of existing code wants to treat <name> like ident
jonathan Yes
Aye 16:55
pmichaud I'm not worried about sub foo::bar::baz() as much as I am sub foo::($bar)::baz() --- if such a thing is even legal.
jonathan Ah, longname includes colo pairs.
*colon
pmichaud well, for now it's sufficient to get <name> to work
jhorwitz pmichaud: fyi, that namespace interpolation patch is now broken ($past.name(undef) no longer works for call nodes). i'll update the ticket with a working patch.
jonathan morename?!
pmichaud jhorwitz: don't worry about it too much 16:56
jhorwitz: since STD.pm now says how interpolations get parsed, we'll want to go that way
jhorwitz what, me worry? ;-)
pmichaud I just have to figure out how to represent run-time namespace interpolations in the PAST nodes
jhorwitz ok, if it's getting the proper treatment, i'll leave it to you guys :) 16:57
jonathan pmichaud: Another thing to handle that I am pretty sure will be wrong now, is nested classes.
I did some work in that direction.
pmichaud oh, I know nested classes are likely wrong. I'd like to get basic namespaces working first, though.
jonathan (Making sure attributes and methods ended up in the right class, or role, etc)
But the namespace side of them is almost certainly wrong. It was on my "we'll worry about that later" things.
dalek r29300 | bernhard++ | trunk: 16:58
: [Pipp PCT] Rename token 'circumfix' to 'curly_interpolation'.
: Remove support for Q:w, Q:ww, and Q:regex in quote_expression(),
: as these aren't PHP features.
diff: www.parrotvm.org/svn/parrot/revision?rev=29300
jonathan I think that it'd be good to review namespace stuff in general though.
16:58 ruoso joined
jonathan There are times when I've been writing stuff that I've thought, "hmmm...might have to re-visit that for namespace issues later". 16:58
pmichaud I'm thinking that the namespace attribute in PAST nodes will need to be updated
as well as name, for that matter. 16:59
jonathan To be able to take a PAST tree rather than just a list?
pmichaud yes, to take a PAST tree.
jonathan OK
pmichaud that either returns an array or a namespace (haven't decided)
jonathan namespace may give more flexibility, but array may be easier to code-gen.
(As in, easier for compilers to generate) 17:00
(Not easier for PCT)
pmichaud well, given an array, one can always do PAST::Op.new('get_namespace', $array_past)
er
:pirop('get_namespace')
barney Yes, i probably need PAST nodes for 'name', for supporting ${ $name_of_var } in PHP
jonathan We can probably do MY:: with them too. 17:01
For Rakudo.
So yes, name as PAST tree in PAST::Var sounds good.
pmichaud MY:: ? I figured that was going to have to return the LexPad
jonathan Perhaps. 17:02
pmichaud yes, there is always the option of always treating namespaces as hashes
jonathan I meant a lookup within that.
pmichaud instead of using the get_*_global opcodes
jonathan We still have to use one of them to get at the namespace in the first place, I guess. 17:03
pmichaud I'm pretty sure that the get_*_global opcodes require a NameSpace PMC
anyway, I figured that MY:: would have to be special cased to return a Hash and we use a :keyed PAST::Var node for it
I don't know that we can do pseudo-namespaces using the get_*_global opcodes. 17:04
we could always do namespace lookups with get_*_namespace, and then use those as the base for :keyed nodes 17:05
jonathan nod 17:06
Yeah, I think you're right.
pmichaud which one? ;-)
jonathan That we probably have to have MY:: returning a hash and keyed index into it. 17:07
pmichaud same for OUTER::, CALLER::, etc.
jonathan Aye.
CALLER:: may be a little more fun. :-)
Becuase it'll have stuff in from many lexical scopes (all those in the caller) 17:08
cotto_work NotFound++ #cleaning up the build
jonathan On the upside, at least we now have a way to know what is a Routine and what is a Block. :-)
What's your kinda "work plan" / priorities at the moment? 17:09
pmichaud I'm increasingly concerned that we're putting in too many 'advanced' features before the basics are in yet 17:10
lexicals are still broken 17:11
closure support is broken
namespaces are broken
parameter passing is broken
NotFound pmichaud: me also.
pmichaud HLL support is broken
NotFound pmichaud: unicode is broken 17:12
pmichaud actually, unicode I can deal with. It's relatively isolated and pluggable
NotFound Well, it's not unicode, is the encoding system in general.
pmichaud still, it's quite pluggable. it's not as if a change to Parrot's string handling system is going to force huge code changes in the HLL stuff we're doing 17:13
jonathan Of those, a bunch of them appear to be as much Parrot level issues as high level ones. Which gives resolving them that extra bit of difficulty.
pmichaud yes, they are Parrot level issues also.
NotFound That's the problem I see, a fail in a HLL can come from a variety of sources and is difficult to diagnose. 17:14
pmichaud but I've had too much experience (e.g., S05/PGE) where changes to the underlying model has caused huge rewrites in the code that depends on it
jonathan parameter passing - because the Parrot model doesn't give the Perl 6 semantics? 17:16
pmichaud and is broken on its own, as well.
jonathan And not especialy fast.
NotFound jonathan: because is broken, there are a lot of unresolved tickets about it. 17:17
pmichaud allison has already approved the design for a new param passing model that supports Perl 6 semantics better
we just need an implementation :-)
NotFound A not broken one, preferably ;)
jonathan "just" :-(
NotFound pmichaud: What about the return values? 17:18
jonathan I've not read the details of what Allison suggested, but I'm fearful of putting any more features into the current implementation.
Not to mention trying to understand it in the first place.
pmichaud I don't think it is (or should be) "adding features" as much as "rethinking the implementation altogether" 17:19
the syntax and basic semantics are backwards-compatible with what we have now
jonathan I dived in there last night for a while and saw things like structs in structs in structs...
pmichaud (with one minor exception that I don't believe anyone can possibly be using)
yes, the new approach is likely much simpler
NotFound I completely fail to understand the current implementation when looking at some of the related tickets.
pmichaud I think the existing code suffered from a bit of premature optimization (that really wasn't) 17:20
jonathan branch and re-write would appear to be one option
pmichaud I think branch and re-write is likely the only viable option.
NotFound: return values are handled basically the same as subroutine invocation -- i.e., it's the same code
jonathan The other "fun" in it is handling NCI and arguments from C.
NotFound pmichaud: there is a problem with the return values when doing a tailcall, as a recent ticket exposed. 17:21
pmichaud NotFound: I think that's an implementation bug more than a design problem
and if we re-implement the parameter passing altogether, we can likely solve that bug
NotFound The problem seems to be that the C level call depends that the return values are exactly that it expects to be, and the tail call broke that assumption. 17:22
pmichaud anyway, as to my priorities: they are (in no specific order) HLL support, namespaces, lexicals, list assignment 17:23
NotFound But I'm not completely sure. As I say, I don't understand well the implementation.
pmichaud next tier would be signatures, parameter passing
oh, first tier also includes pre-compiled modules
jonathan OK. 17:24
17:24 Zaba joined
pmichaud HLL support, lexicals, parameter passing are blocked on fixes or updates to Parrot 17:24
jonathan My (small) issue is that my MMD grant is for July/August.
And explicitly non-extendable.
pmichaud yes, I know.
that's why I'm a bit frustrated and concerned that we can't get Parrot issues resolved quickly enough. 17:25
jonathan I don't want to distract from important things; equally, I don't want to let a donor down by not delivering.
NotFound By the way, will be nice if the pir or pbc generated by rakudo will be capable of autoloading the required libs and autostart himself.
pmichaud NotFound: this is explicitly planned. In order for that to work I have to resolve the :load/:init issues
which is yet another Parrot bug.
17:26 cotto-work joined
pmichaud (:load/:init doesn't play well with lexicals.) 17:26
jonathan pmichaud: Isn't that fixed in Allison's branch?
pmichaud yes, but when will that branch merge?
Zaba I'm back!
jonathan Heck knows, but I have a hard time believing that this particular fix is related to the concurrency things that are the subject of the branch. 17:27
pmichaud actually, I think it is related (more)
jonathan Has Allison said it would be hard to port it back into trunk?
pmichaud because the problem has to do with the separate runloops that occur for :init/:load versus the mainline code
jonathan Oh.
pmichaud and in the branch we don't have those runloop issues 17:28
(if I understand what Allison has said about it)
it shouldn't be hard to port back into trunk. The problem is that Allison is the primary one doing it, and she's overloaded with non-Parrot work until at least the 25th
(OSCON)
jonathan Right, I was about to say, progress on that branch will be slow for a while. 17:29
NotFound I've also seen a runloops related problem in the way pdb step code.
pmichaud so, unless/until everything starts magically working in the branch, the merge likely won't occur until the 25th
NotFound Someone is actually using pdb?
pmichaud anyway, as far as your MMD grant goes, I think we can go ahead and plan to reserve hacking days at YAPC::NA for you and I to focus on it intensely, if need be 17:30
sorry, YAPC::EU
jonathan Yes, there is that option too.
In terms of Parrot stuff
pmichaud i.e., if we haven't made progress on signatures by then, then that's what we're doing in August to the exclusion of all else :-)
signatures/MMD, I mean
jonathan How serious are the various issues as blockers? 17:31
pmichaud lexicals: serious
HLL: not too serious, we can continue to live in the 'parrot' namespace for a while and get incorrect types back from time to time 17:32
using precompiled modules: not serious, but profoundly beneficial in numerous respects -- most notably, the time needed to run 'make spectest_regression' 17:33
we can cut approx 6 minutes out of the time needed to run spectest_regression if we get precompiled modules working 17:34
also it allows us to start writing builtins in perl 6
but precompiled modules depends on load/init depends on lexicals
so I'm looking at a workaround for that
parameter passing: livable for now, but we need signatures resolved soon for mmd issues and because I don't like the way they're current factored in actions.pm 17:35
namespaces: increasing in importance, because we need to make sure that PCT supports all of the funky ways in which we deal with namespaces 17:36
(and because a lot of actions.pl depends on being able to grab names)
jonathan You have Parrot bugs relating to namespaces filed too, or that's mostly PCT work? 17:37
pmichaud it's PCT work
jonathan OK
pmichaud mostly design, since I first started thinking about it in depth in the context of jhorwitz' patch
jonathan Just trying to get a sense of, if I'm going to throw some time at Parrot guts, where is it best spent.
pmichaud lexicals continue to be -- by far -- the biggest headache. Nothing works without them. 17:38
well, very little works right without them. It's all a bunch of workarounds.
jonathan I don't want to do anything more on those from a code point of view until something that works for us, bob and others is worked out design wise, though. 17:39
pmichaud agreed. I don't know who needs to bless a design, though.
jonathan I need to throw a lot more brain cycles at the thing to realy understand what both of you are saying.
Well, Allison, I'd think. 17:40
NotFound At least, that the code matches the design documents.
jonathan I don't really feel like I should be saying "yes we can change the design", even if I think we should, without her OKing it.
pmichaud NotFound: I believe the design documents are incorrect here.
NotFound: there's no point in implementing a defective design.
NotFound Or even, that the code matches his own comments and pods. 17:41
pmichaud jonathan: I don't think it would be you saying "yes we can change the design". I think it would be more of "Pm, jonathan, Bob, and chromatic all agree that this is a workable design for now (where the existing one is broken), so we're going to implement it and if Allison wants to change it later then we'll revisit it later)
NotFound pmichaud: yes, but in that case the document must be changed. 17:42
jonathan pmichaud: If we can get that kind of consensus on it, then I think that's OK. 17:43
pmichaud I just know that every time I go to fix something relatively fundamental, lexical bugs keep getting in the way 17:44
jonathan As NotFound says, we should fix the design doc and patch that, and I think ahead of the code changes, so there's a clear spec.
pmichaud I'm not sure we can a-priori know that a particular design works, given our collective experience levels.
I'd rather tinker with an implementation until we get one that works, and then document that. 17:45
:lexid being a prime example
(because pdd20 makes absolutely _no_ mention or inkling that something like :lexid is needed)
jonathan OK, but let's at least try and get a consensus on what we can work out. 17:46
NotFound Maybe a good solution is: cd docs/pdds ; mv *.pod draft ; ;)
pmichaud right now I have a consensus of one that I like what I just proposed. :-)
jonathan I'll read your and bob's mailing list posts at the weekend and try and feed into this. 17:47
pmichaud I'm eagerly waiting to see what rgrjr has to offer
jonathan Yes, I think he has a good understanding of these things.
pmichaud the first part of my proposal doesn't seem radical at all
jonathan Certainly, he's done stuff in that area of the code.
pmichaud the second part is more radical (where outer subs maintain lists of their inner closures), but I can completely live without it if we just do the first part 17:48
17:48 Ivatar joined
pmichaud if we try to stick with the existing newclosure design, either as implemented or as documented in pdd20, then we have a _lot_ of other design changes we have to start making. Most notably we have to completely re-think multisubs 17:48
also, after I wrote what I did last night, it occurred to me that it seems to match very closely many of the statements about closures in S04 17:49
even down to the notion of "cloning closures" 17:50
jonathan Which part? The first part?
pmichaud the whole design
purl the whole design is sketchy as fuck.
pmichaud purl, what the hell do you know?!? 17:51
purl i don't know, pmichaud
pmichaud the basic concept is that inner closures have to capture their lexical environment at the time the outer sub is invoked
the first part provides us with an explicit way to do that
the second part provides a way to have Parrot do that automatically
jonathan pmichaud: "So, I propose that we add a "capture" method to Closure PMCs 17:52
to set the outer_ctx for that PMC."
So basically, it sets the outer_ctx of that closure to the current context?
pmichaud as well as checks that the current context is in fact the outer_sub 17:53
i.e., you can only capture from the outer sub itself.
(the check is optional, but probably useful)
17:53 jq joined
pmichaud invoking a closure then *never* performs a capture 17:54
because that capture must have been already done
jonathan Yes, we should do the check, for sanity and to prevent weird hard to find bugs!
pmichaud i.e., the invoke vtable for captures becomes trivial.
it checks for an outer context, throws an exception if one hasn't been set, otherwise it proceeds to do the sub 17:55
jonathan Right.
Hmm. Things could work.
*this
pmichaud if parrot doesn't implicitly set the outer context for all of its inner subs, then compilers (i.e., PCT) will have to generate code at the beginning of each sub to do it explicitly
I'd prefer not to generate that code, but will do it if need be 17:56
what I really like is that we can potentially eliminate 'newclosure' altogether
because we just clone the Closure after its outer context has been set (whether implicit or explicit)
jonathan Yes, I get that bit. 17:57
pmichaud and that matches exactly what is written in S04
jonathan Can you explain your statement starting "if parrot doesn't implicitly set the outer context" a bit more to me?
pmichaud ideally (assuming it works), when I invoke an outer_sub I'd like it to automatically do a capture for all of its inner closures
i.e., it iterates through all closures that have the sub listed as :outer, and sets the outer context directly 17:58
jonathan Ah, and *that* is why you want to know what all of the inner ones are...
pmichaud yes.
if we don't have that
then the code generator needs to do a lot of
$P0 = get_hll_global 'inner'
$P0.'capture'()
$P0 = get_hll_global 'inner2'
$P0.'capture'()
at the beginning of each outer sub 17:59
the code generator can fairly easily generate this, though, since it knows all of the inner subs
spinclad will this clobber existing closures of those inner subs?
pmichaud spinclad: uncloned ones, yes.
spinclad: but this is what rgrjr has been indicating needs to happen 18:00
18:01 slightlyoff joined, slightlyoff left
pmichaud note that this approach means that the example in dev.perl.org/perl6/doc/design/syn/S..._a_closure works naturally 18:01
because assignment makes a copy (clone)
18:04 uniejo joined
spinclad ok, need to read the thread. (rereading S04 section now) 18:04
pmichaud correct url is dev.perl.org/perl6/doc/design/syn/S..._a_closure
jonathan pmichaud: I suggest wait for feedback on what Bob says. 18:05
pmichaud I agree. :-)
jonathan If he agrees it's a good idea, maybe we create a branch and try this out.
pmichaud but if it works, this proposal seems much simpler and more straightforward than the existing implementation
jonathan The first part of the mail looks like it may well be easily workable. 18:06
The keeping a list of inners bit worries me.
pmichaud I agree
jonathan And this may not play too wonderfully with MMD right off.
pmichaud oh?
jonathan But I can likely fix that up.
Well, the problem is that what are you invoking .capture() on? 18:07
pmichaud oh.
jonathan You're doing a get_.*global
Which looks in the namespace, ands hands you make a MultiSub
Which you then will call .capture on.
pmichaud in the mail I actually did a .const 'Sub'
jonathan Hmm, OK. 18:08
But does that distinguish different multis?
pmichaud but yes, we'd need a way to get the explicit cub
er, sub
jonathan I'd be more inclined
(hmm...maybe, this may not make sense...)
To have .capture on a MultiSub go through the options, and any closures with an outer sub that matches that currently being executed get the outer context set. 18:09
Hmm...or would that break things...
pmichaud ooh, I think that would work wonderfully.
jonathan Yeah, but what if you update the outer of multiple variants?
pmichaud that's okay
jonathan OK
pmichaud because it would mean that all of those multiple variants are inner closures of the outer sub 18:10
jonathan I haven't convinced myself of that yet, but you've thought this through a lot more than I.
OK, that reasoning makes some sense to me.
pmichaud and so they all need to have captures taken
that's far better than what I was thinking 18:11
jonathan++
jonathan It's also the most natural.
pmichaud yes, very natural.
jonathan As in, the most natural from an implementation point of view.
pmichaud that's also what convinces me that this approach is pretty good -- things fall out naturally without a lot of funky stack or context manipulation (other than possibly the need to identify the inner closures)
jonathan OK, if Bob isn't disagreeable, let's try and get the first part of this implemented in a branch soon. 18:12
I'm still not convinced the second part will fly.
Certainly, holding a list of GC-able items without making sure they are marked, feels scary to me. 18:13
spinclad .oO { 'inner closures of outer sub' or '.. of outer closure (ie, call?)'? }
jonathan But if we need to do that, we can maybe work out another way.
pmichaud I may decide that I prefer having a method on outer subs that takes a list of inner closures and performs captures on each 18:14
i.e., outer.'make_captures'(inner1, inner2, inner3, ...)
dalek r29301 | julianalbo++ | trunk:
: Allow concat of utf8 and iso-8859-1 without icu
diff: www.parrotvm.org/svn/parrot/revision?rev=29301
pmichaud but either way works for me 18:15
if inner.'capture'() is implemented, it's trivially simple to create outer.'make_captures'(...) :-)
or even just '!make_captures'() since we can infer outer 18:16
jonathan If you know what outer's inners are...
pmichaud I'd still have to do the inner lookups, yes
I don't see a way around that, unless outer somehow has a way of automatically getting the list itself
jonathan OK, so you're saying if the first part of your proposal is implemented, then you've got enough to work with and it will unblock things? 18:19
pmichaud yes.
assuming it works. :-)
jonathan OK. That gives me some hope we might be able to resolve this soon.
pmichaud the only thing I'm not sure of is the :load/:init issue with lexicals, but I think I can work around that.
at least far enough to keep progress moving until the branch comes in. 18:20
jonathan OK.
So we have a plan from here to try and get lexicals/closures sorted out. 18:21
For HLL - are there tickets for the current issues you have with it? 18:22
18:23 jjore joined, julian_ joined
pmichaud (have to run for about 15-20 mins... bbiab) 18:24
yes, there are hll tickets. There's even a meta ticket.
jonathan OK, good.
I need to go for a bit too, to eat...back later
pmichaud meta ticket is #49812. current outstanding bug is #56650 18:33
Whiteknight++ was working on #56650, and there's information in the irc logs about how I proposed to fix it
dalek r29302 | Whiteknight++ | gsoc_pdd09: 18:34
: [gsoc_pdd09] Remove some unnecessary garbage and cruft that I added for debugging, for problems which have since been resolved.
diff: www.parrotvm.org/svn/parrot/revision?rev=29302
Whiteknight Yeah, I'm probably not going to be able to get a solid patch up and running for that until sunday night 18:36
pmichaud I may go ahead and do it if I do any work on p6object, then.
Whiteknight I'm knee-deep in this damned GC. I fix one segfault and expose two more! 18:37
pmichaud are there any blessed GCs?
or are all GCs inherently the spawn of the underworld? 18:38
Whiteknight i'm starting to wonder 18:41
18:50 uniejo joined
NotFound pmichaud: after my last commit related to #39930 I'm testing to delete the workaround mentioned in #50092 and all looks good. Wan't to look at it? 18:57
pmichaud if it works and tests pass, feel free to commit a fix for #50092. I'll review the commit and if I see anything wrong I'll fix/revert. 18:58
NotFound Ok, I go to commit when some more test finish. 18:59
19:00 purl joined
dalek r29303 | bernhard++ | trunk: 19:09
: [Pipp PCT] Avoid infinite loop for curly string interpolation,
: but break some tests.
diff: www.parrotvm.org/svn/parrot/revision?rev=29303
Tene ICFP contest just announced. 19:13
dalek r29304 | julianalbo++ | trunk: 19:19
: Deleted PCT grammar workaround, RT#50092
diff: www.parrotvm.org/svn/parrot/revision?rev=29304
jonathan returns 19:25
cotto-work icfp? 19:27
purl icfp is probably international conference on functional programming or at pauillac.inria.fr/pli/icfp/ or sponsoring a programming contest at www.cs.virginia.edu/~jks6b/icfp/ or (see:icfp2007)
19:29 davidfetter joined
dalek Jeff Horwitz | mod_parrot: 19:48
link: www.perlfoundation.org/parrot/index...mod_parrot
19:53 Zaba_ joined 19:55 uniejo joined
NotFound Whiteknight: ping 20:39
spinclad icfp2008?
dalek r29305 | coke++ | trunk: 20:41
: [punie] resolve RT#56670 with an explanatory comment
diff: www.parrotvm.org/svn/parrot/revision?rev=29305
cotto-work NotFound, is there any reason to keep RT#50092 open? 20:42
NotFound cotto-work: waiting for pmichaud take a look on it. 20:43
pmichaud it looks fine to me.
I think the ticket can be closed.
NotFound++
NotFound I will close both tickets, then.
20:44 Z2Z joined
cotto-work tickets-- 20:45
NotFound++
spinclad just include 'Closes: #56670' in the changelog, it will autoclose. oh, wait. this isn't debian, is it? never mind.
NotFound ++ for who added the blue box on the public interface 20:46
karma tickets 20:49
purl tickets has neutral karma
NotFound I'm wondering why the const_cstring_hash is not marked, and supposing there is no reason why it does not brokes horribly. 20:55
jonathan NotFound: I don't think constants can get collected. 20:57
opes
*can't* get collected
NotFound jonathan: but the headers are, it isn't? 20:58
Ah, no, I was confused. 20:59
jonathan pmichaud: Read Bob's message?
pmichaud yes. I'm confused. Or he is. 21:00
jonathan I need to think it over more.
pmichaud I'm writing a response now.
jonathan OK.
pmichaud I think he misinterpreted what I wrote.jA
NotFound And the hash itself is not an object, I see now. 21:01
jonathan I'm writing a crappy evil ASP.NET output filter to translate .png to .gif to work around IE6 being unable to handle alphas transparency in PNGs. For a site that's meant to go production at the weekend. *sigh*
pmichaud yes, IE is horrible. 21:02
Tene jonathan: have you looked at pngfix? a solution in javascript? 21:03
homepage.ntlworld.com/bobosola/
pmichaud although, I'm a little tired of Bob writing things like "I would remove all use of autoclose from PCT and Rakudo, replacing it with a general solution" when he doesn't even tell me what the "general solution" is. 21:07
jonathan Tene: I looked at SuperSleight, which is a JavaScript solution also. It didn't help so much. And looking at pngfix, it's trying the same trick.
21:07 pac1 joined
pmichaud that's all I'm asking for -- "what's the damn general solution?" 21:07
particle the gloves are off!
the texan is mad!
jonathan Tene: But thanks the suggesting. :-) 21:08
particle quick... where's the dr pepper and doritos?
pmichaud: sorry i haven't paid close enough attention to help you more with that closure problem 21:09
pmichaud All I have been doing from the beginning is trying to get PCT and Rakudo to work with a general solution. I have no idea if I'm using autoclose or not -- that word means next-to-nothing to me. I'm just trying to follow the stupid documentation (which is wrong) or ask folks to tell me what the compiler is supposed to be generating so that things will work.
I'm just writing to write standard PIR code that makes lexicals work, and nothing I try works.
and the solution he offers also doesn't work. 21:10
(for multisubs)
particle mmd is yet to be redesigned
'course that doesn't help you today 21:11
jonathan particle: Huh? The spec isn't marked draft any more.
pmichaud or this month. or likely this summer at the rate things are being done.
21:12 donaldh joined
particle jonathan: but the implementation isn't done 21:12
cotto-work best line of code EVAR
#include <shellapi.h></shellapi.h>
Tene laughs.
editor autocompletion gone wrong?
cotto-work: where's that from?
cotto-work forums.thedailywtf.com/forums/p/924...spx#172728 21:13
jonathan particle: Last time I read the PDD, I found it vague enough that it seemed too incomplete to implement. And I posted some issues I had with the draft on the mailing list, and I don't think any of them were addressed in the final. 21:14
The useful bit in there is that you can subclass the MultiSub PMC to get your language's semantics. Which is what I will do for Rakudo. 21:16
But it doesn't state the standard multiple dispatch algorithm for Parrot, etc.
...let alone does it mention anything about closures and multis... 21:18
pmichaud and based on what Bob Rogers is saying in his thread, the idea that we can have a single symbol pointing to a MultiSub PMC is itself a problem. 21:24
because there's not a way to replace that symbol with the result of a newclosure
so, we have to have a MultiSub PMC that allows us to replace a specific entry with a newclosured one 21:25
which means we need a way to *locate* that specific entry so that it can be replaced
all of which says (to me) that for a vm that is supposed to make dynamic languages easier to implement, Parrot spectacularly fails at this aspect of it. 21:26
if Parrot's defaults can't handle standard closures and lexicals without HLL compilers having to go through a lot of hoops and symbol table manipulations to make it work, then it's really b0rken.
NotFound I fail to understand why a closure has to be treated like a stand-alone function. Is not an already binded thing? 21:27
jonathan pmichaud: If we make newclosure a method, then it can be implemented on MultiSub, just the way I specified for Capture (which maybe from what Bob says won't work), but replacing the entries that match. 21:28
Or the newclosure op changes to recognize multis.
pmichaud "replacing the entries that match" sounds very tricky. 21:29
I suppose one could determine "match" from lexid
jonathan That match = that have an outer that is the current sub.
Just as for newclosure on one closure.
(If we want to forbid calling newclosure when not in the outer) 21:30
pmichaud I don't think the problem that bob is referring to has to do with calling newclosure when not in outer
jonathan No. 21:31
jonathan thinks
pmichaud Bob's recommended solution to the closure issue is to do
.const 'Sub' inner_sub = 'inner_sub'
$P0 = new_closure inner_sub
set_global 'inner', $P0
....and then later
'inner'() # invoke inner sub
....so, each time the outer sub is invoked, we do a newclosure of inner_sub and store that in the namespace as 'inner' 21:33
(of course, if the inner_sub happens to be a method, then we need to replace a method)
NotFound pmichaud: What is the problem with that approach? Too much code? 21:34
pmichaud (and if the inner_sub happens to be a :multi, we have to make sure that 'inner' refers to a MultiSub and then replace whatever MultiSub (if any) was there from the previous invocation of outersub with the newly created closure)
jonathan Replacing a method would imply replacing it in the class vtable! 21:35
That *can't* be the right thing to do.
pmichaud I totally agree. But since methods are lexical as well, I can certainly come up with an example that uses methods instead of strict sub calls.
and so whatever we do for subs we'd have to do for methods
and thus my frustration that he keeps saying "use a general solution" but doesn't give one that is at all workable in Parrot. 21:36
NotFound What is the reason to have to store the closure in a global named var?
pmichaud NotFound: I'll no paste an example
21:39 jan joined
nopaste "pmichaud" at 76.183.97.54 pasted "example of global symbol table" (7 lines) at nopaste.snit.ch/13562 21:39
jonathan pmichaud: I think S04 is helpful where it says, "In particular, named subroutines in any scope do not consider themselves closures unless you take a reference to them." 21:40
pmichaud I pointed that out to Bob in an earlier message, yes. I have no clue what that exactly means.
jonathan And in that case, newclosure - the clone - is what the reference becomes.
pmichaud yes, that's what I had been thinking, but apparently Bob disagrees. 21:41
jonathan Ah, OK. I *think* I understand it...let me just make sure, before I confuse things more...
pmichaud NotFound: in my example, foo() is a global sub
(actually, global to the namespace -- a package-scoped sub)
NotFound pmichaud: Is global, or is scoped in the enclosing block? 21:42
pmichaud NotFound: the symbol itself is global
'sub foo' is equivalent to 'our sub foo' 21:43
if we wanted to limit it to the enclosing block, it would be 'my sub foo'
NotFound pmichaud: ok, but that applies to the sub, not the closure taken, it isn't?
pmichaud if we take a closure and expect 'foo()' to find it, then that closure has to be stored in the symbol table under 'foo' 21:44
jonathan pmichaud: I think what S04 is saying is that the only type a named sub needs to be newclosure'd, is if a reference is made to it. 21:45
only *time*
pmichaud jonathan: that's what I thought S04 was saying as well.
let me rephrase
when I read S04, that's what I think it's saying as well. 21:46
jonathan And that means that the result of the clone is _not_ replacing anything in the symbol table. Instead, it's what you get if you write &sub.
pmichaud agreed
NotFound That looks the reasonable thing to me.
jonathan Now, if it's an immediate block *that you're taking a reference to*, it always needs to be newclosure'd. 21:47
pmichaud and that's why I think I shouldn't have to be doing newclosure at all for the Perl 6 examples I've been doing
jonathan Note: taking a reference to. *not* invoking.
I wonder if that is the confusion here.
NotFound But that reference has to be taken inside the block, to have a correct context, I suppose. 21:48
jonathan Now it's just considering what happens under recursion.
pmichaud btw, I think that the existing implementation of newclosure is suspect, also. 21:49
I was very surprised to see how it's implemented
dalek r29306 | fperrad++ | trunk: 21:50
: [Pipp] doc
: - fix some links to PHP reference manual
diff: www.parrotvm.org/svn/parrot/revision?rev=29306
jonathan .sub 'foo' $P0 = whocares() .lex '$a', $P0 bar()
.end
.sub 'bar' :outer('foo') find_lex '$a' bar()
.endGrr
...wow, no newlines
pmichaud hint: nopaste :-)
jonathan Yeah, I wanted to have it in front of me while I talked about it!
NotFound .endGrr ? Nice way to end rant comments X-) 21:51
nopaste "jonathan" at 85.216.151.226 pasted "example" (9 lines) at nopaste.snit.ch/13563
dalek r29307 | fperrad++ | trunk:
: [install]
: - fix lolcode test
diff: www.parrotvm.org/svn/parrot/revision?rev=29307
jonathan In this case, when we invoke bar the first time, from foo, we want bar to capture (have it's outer set to) foo's current outer context. 21:52
I guess a call on bar.capture() inside bar would then want to be a no-op, since the outer hasn't changed 21:53
Or would you have not been emitting a capture there?
pmichaud we would never call bar.capture there
we call capture from the _outer_ sub.
jonathan Right.
So we'd just never emit it.
So that recursive example works with your scheme.
pmichaud all invocations of bar would end up using the same foo as an outer context
jonathan Right. Which is, I believe, correct.
nopaste "pmichaud" at 76.183.97.54 pasted "lexicals and recursion" (5 lines) at nopaste.snit.ch/13564 21:56
21:57 shamu joined
pmichaud 13564 is a more interesting recursive example 21:57
(that I gave in the mail thread)
jonathan I think the key thing in Bob's example is here 22:00
my $recur = sub {
Note - he takes a reference to an (anonymous) sub
NotFound pmichaud: but following the rule of taken a reference, it's still not a closure. 22:01
jonathan That captures the current outer - the clone of the way things are now.
And that's the point of the newclosure.
pmichaud so, you're saying his example actually works under my proposal?
or...?
I don't immediately understand his example. 22:02
jonathan I'm saying that if we are doing what you suggest *and* we are doing newclosure when a reference is taken to a block/sub (anything that compiles down to a .sub in Parrot), then yes.
Or at least, I think so.
pmichaud I already mentioned that 'newclosure' is effectively a clone.
jonathan nod 22:03
pmichaud and that assignment takes a clone
NotFound I don't know perl6 rules, but looks logical to me.
pmichaud (since assignment copies its rhs anyway)
NotFound pmichaud: it takes a sub and returns a closure, it isn't? 22:04
jonathan pmichaud: At this point, since we both think this may work, I wonder if it's worth us just making a branch, implementing your suggestion, along with making sure we put newclosure in the right place (when a sub/block gets referenced), then translating Bob's example to Perl 6 to actually try it... 22:06
22:06 pac1 left
pmichaud I'd rather see it translated to PIR, personally. 22:06
even a hand translation
NotFound But if is as you say in the thread just a synonym to call capture on the sub, the only reason for his existence is as optimization, I think.
pmichaud if you're correct, then my guess is that Bob doesn't recognize that my $recur = sub { ... } results in a newclosure
(or a clone) 22:07
jonathan pmichaud: working on it
(hand translation)
NotFound pmichaud: at pir level the anonymous is still anonymous, or must have a name assigned? 22:08
pmichaud NotFound: it has an internal name
but that name doesn't really mean anything, and we can even keep it from appearing in the symbol table
NotFound pmichaud: then I think it must be the same than a named one.
That is, taken a new closure on it at usage. 22:09
pmichaud jonathan: if you really need to be doing your $otherjob stuff, this can wait.
NotFound Maybe the problem is that Bob thinks that the sub is already a closure, not a sub. 22:10
jonathan Meh, $otherjob already got over 8 hours of me today
And I'll be doing stuff for them at the weekend.
pmichaud notfound: in Parrot, any sub that accesses its outer lexical context is a Closure PMC
in effect, all nested subs are Closure PMCs
er, all nested blocks are Closure PMCs 22:11
jonathan If I wasn't doing this I'd only be drinking beer and looking at lolcats...
pmichaud jonathan: okay, just wanted to let you know my sense of priority/urgency.
NotFound pmichaud: but that is at execution, not at declaration, I suppose.
pmichaud NotFound: no, it's at declaration in PIR
a nested block in PIR has an :outer(...) flag. That causes it to be created as a Closure PMC instead of a Sub PMC 22:12
of course, when the Closure PMC is created this way it doesn't have an outer context -- i.e., it hasn't captured its lexical environment yet
NotFound Mmmmm.... So a declared and an active one are the same type of object?
pmichaud so the discussion centers around "when does the inner closure captures its lexical environment?" 22:13
Closure PMC and Sub PMC really differ only in type
(and the implementation of invoke/freeze/thaw/etc.)
and the fact that a Closure PMC has a value for outer_sub 22:14
(outer_sub is NULL in a Sub PMC)
22:15 paco joined 22:16 paco left
jonathan I'm really glad we have compilers, because translating HLL code to PIR gets really tedious... 22:17
pmichaud well, I don't think it needs to be a literal translation -- just enough to show the same thread of execution
I'm going ahead and sending a message pointing out the my $recur = sub point, and then I'm done for the evening (dinner here and need to spend time with kids) 22:18
jonathan OK, 2 mins and I have a translation.
pmichaud Feel free to add it as a response to my previous message. :-)
NotFound Looks to me, according that explanation, that the problem is to distinguish between the static closure and the dinamic one. 22:19
pmichaud I'll look at the translation a bit later tonight
gotta run
NotFound If you don't make the newclosure thing, you don't have the dynamic context stored on it. 22:20
22:20 paco joined 22:24 teknomunk joined 22:48 kid51 joined
jonathan has got Bob's example to work in PIR by just taking newclosure whenever a reference is taken to a block. 22:52
NotFound I think I'm starting to understand... When calling directly, the context is taken directly by the current one. When taking the reference, is captured by the newclosure operation for later usage. 22:57
If that is correct, maybe having two different types will make things clearer. 22:58
dalek r29308 | jkeenan++ | parallel: 23:02
: P::C::Base, P::C::Parallel: YAGNI. No need for parallel object at this time,
: as two wrappers around Storable functions will suffice. Eliminate one test
: file whose tests have been moved to another file.
diff: www.parrotvm.org/svn/parrot/revision?rev=29308
r29309 | julianalbo++ | trunk:
: Reanme disassemble to pbc_disassemble by Reini Urban, RT#56542
diff: www.parrotvm.org/svn/parrot/revision?rev=29309
NotFound Nice typo. 23:04
jonathan Nah...nice typos are the ones that accidentally lead to rude words. :-) 23:13
NotFound: See my post to the list, which I hope helps clear things up a bit.
dalek r29310 | jkeenan++ | parallel: 23:15
: Consolidate multiple test files per configuration step into a single file.
diff: www.parrotvm.org/svn/parrot/revision?rev=29310
NotFound jonathan: yes, that confirms whay I was starting to understand. 23:17
$P0 = find_global 'anon_1' | $P1 = newclosure $P0 23:18
Maybe a help from the parrot side to the hll writers can be to make an operation that combines those two. 23:19
jonathan I'd rather leave it as two. You might not be doing find_global. 23:21
find_hll_global and all manner of other things are possible. 23:22
NotFound We can just expect to see what the more frequent usage will be, an then maybe add an operation to shorten it. 23:24
tewk is up over his eyebrows in parrot calling convention innards (src/inter_call.c) 23:26
I used to know this stuff by heart, two years later and I can't remember a thing. 23:27
jonathan tewk: I looked in there just a couple of days ago and...hate.
I'm sure I saw stuff like src.sig.sig->c[0].... 23:28
NotFound tewk: that's a clear sign of too complex code.
Well, not, the sign is clear when is just two monts X-) 23:29
jonathan tewk: You are working on the GSoC project doing NCI things, right?
tewk Well I think I got enough of it back in my head now.
Yeah I'm getting ready to jit nci calls, it really isn't going to be that bad. I just have to call a bunch of functions in assembly (src/jit_emit.h:build_call) 23:31
NotFound The jit is also a less than ideal example of clean code X-)
purl okay, NotFound.
NotFound jit? 23:32
purl jit is a Just In Time compiler. Or just more Java hype. or new Parrot hype! or a less than ideal example of clean code X-)
tewk the current Parrot_jit_build_call_func is at least 2 or 3 refactors out of date. 23:33
jonathan tewk: pmichaud and I were pondering changes to inter_call.c - I guess touching it now would be disruptive to what you are doing? 23:34
tewk NotFound: inter_call.c makes all the cool calling convention stuff work.
NotFound tewk: for some values of 'all'
tewk You should have seen inter_call.c two years ago. I did a major refactor to get it to look as good as it does. Chromatic has cleaned it up quite a bit more too. 23:37
jonathan: I'm not changing anything, just remembering how it works.
There are a lot of helper functions, and I'm just going to use those. 23:38
NotFound tewk: I don't say that is all bad, but is very hard to diagnose the known bugs.
tewk I know what you mean, I always say to my self that it doesn't need to be that complex. 23:39
But once I remember all the things it does, its hard to reduce the complexity. 23:40
It does boxing, unboxing, INSP conversion, slurpy, named, flat, NCI, PCCMETHOD, I just need a few more acronyms :) 23:42
jonathan: what were you goint to change, the optional vs named stuff? 23:43
jonathan Apparently there are some changes too. 23:48
Or maybe they are optional vs named related. I'm not completely sure.
I haven't been thinking about it much, pmichaud just mentioned it was something that needed doing. 23:49
And both of us find that chunk of the codebase more than a little hard to get into.
dalek r29311 | jkeenan++ | parallel: 23:52
: [configure] Refactor code from within runstep() into _handle_exec_protect(),
: then test it.
diff: www.parrotvm.org/svn/parrot/revision?rev=29311
kid51 Oooh, that last commit message was wrong. 23:54
dalek r29312 | jkeenan++ | parallel: 23:56
: Consolidate multiple test files per configuration step into a single file.
diff: www.parrotvm.org/svn/parrot/revision?rev=29312