ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl6-internals
perl6-internals
Re: Lexical variables, scratchpads, closures, ...
by Jerome Vouillon other posts by this author
Aug 1 2002 3:50PM messages near this date
Re: Lexical variables, scratchpads, closures, ... | Re: Lexical variables, scratchpads, closures, ...
On Wed, Jul 31, 2002 at 11:22:56PM -0400, Melvin Smith wrote:
>  At 06:25 PM 7/31/2002 +0200, Jerome Vouillon wrote:

>  >Closures

>  >

>  >  A subroutine must have access to the scratchpads of all the

>  >  englobing blocks.  As the scratchpads are linked, it is sufficient

>  >  to add a pointer to the immediately englobing scratchpads to the

>  >  closure (Sub class).

>  

>  And they need to be COW, as closures have access to their

>  own copies of lexicals.  I asked Jonathan to reuse the stack code

>  I had already written because it was using the same semantics

>  with COW as control and user stacks.


I'm confused here.  In Jonathan's code, the stack is COW, not the
scratchpads.  If instead of using stacks you make each scratchpad
contains a pointer to its parent, there is no need to copy anything:
several scratchpads can then share the same parent.

By the way, I don't understand how you intend to implement subroutine
invocation.  Are you going to push the caller scratchpad stack on a
stack and replace it by (a copy of) the callee scratchpad stack?

>  We chose to implement

>  the access as ops, and you prefer using a PMC Array directly. I can

>  at least see one advantage to the explicit ops: they don't require

>  a register to use them in the general case.


Adding special opcodes has a cost: they then need to be implemented
for all architectures supported by the JIT compiler.

But I'm especially frightened by opcodes such as new_pad.  The Perl
compiler may well be able to perform more optimizations if it does not
use this opcode but rather generate specialized code.  (And the JIT
compiler may then be able to generate some inlined assembly code
instead of a call to a generic C function.)

So, I would feel more comfortable trying to reuse existing opcodes for
the moment, especially as I don't think we have a clear view of the
"right" way to implement lexical variables yet.  It will still be
possible to add new opcodes to improve performances when we have a
working compiler to benchmark them.

-- Jerome


Thread:
Jerome Vouillon
Melvin Smith
Jerome Vouillon
Sean O'Rourke
Jerome Vouillon
Dan Sugalski
Dan Sugalski
Simon Cozens
Nicholas Clark
Sean O'Rourke
Jerome Vouillon
Nicholas Clark
Jerome Vouillon
Jonathan Sillito
Dave Mitchell
Melvin Smith
Sean O'Rourke
Dan Sugalski
Dan Sugalski
Jonathan Sillito
Jerome Vouillon
Melvin Smith
Jerome Vouillon
Melvin Smith
Jerome Vouillon
Jonathan Sillito
Sean O'Rourke

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved