Re: PCT tutorial update suggestions

2008-04-17 Thread Klaas-Jan Stol
On Fri, Apr 11, 2008 at 5:32 AM, Patrick R. Michaud [EMAIL PROTECTED] wrote:
 With some recent PCT-related changes I think we may want to
  update the tutorials a bit.

  1.  Remove the custom List class.

  ResizablePMCArray now has built-in shift/unshift/push/pop
  methods, so we can use it directly from NQP and don't need
  to create a custom List class to be able to invoke these
  operations.

  2.  Remove :scope attribute from PAST::Var nodes.

  My intent has been that most PAST::Var nodes for simple variables
  would not require individual scope attributes; with the changes
  I checked into Parrot tonight this should be easier.  In Squaak's
  case this means that the Cidentifier action method should now
  read:

 method identifier($/) {
 make PAST::Var.new( :name($name),
 :viviself('Undef'),
 :node($/) );
 }

  In particular, note that there's no longer a need to
  explicitly search outer blocks for the scope -- PCT
  will handle this automatically.

  To indicate that all undeclared variables should default
  to 'package' scope, we use the Csymbol_defaults method on
  the top-level block.  For Squaak, we add the following to its
  TOP action method:

 $?BLOCK.symbol_defaults(:scope('package'));

  This says that 'package' scope is to be used for any PAST::Var
  node that doesn't have its own :scope and that doesn't have a
  scope provided by an outer block's symbol hash.


  3. (Bonus problem)  Eliminate @?BLOCK

  Since PAST::Var nodes no longer need to search outer blocks
  (PCT will handle that), we no longer need to maintain a @?BLOCK
  array.  So, for bonus points, eliminate @?BLOCK from the Squaak
  methods.


I don't really see immediately that @?BLOCK can be removed...

blocks open and close, but $?BLOCk should always point to the current
block, right?
So, in order to restore $?BLOCK, we need to store the old one
somewhere, and this must be done in a LIFO order (to allow for
multiple nested blocks).

Maybe I'm missing something. Could you explain this a bit?

thanks!
kjs

  If I can help explain or demonstrate any of the above, let me know.
  Thanks!

  Pm



Re: PCT tutorial update suggestions

2008-04-11 Thread Klaas-Jan Stol
Hi,

these are good improvements! It will also improve performance a bit I think.
currently I don't really have much time to work on it, but I will in
maybe a week or so (or 2 weeks, possibly)

If people are looking for additional Exercises I suggest these are nice :-)

kjs

On Fri, Apr 11, 2008 at 5:32 AM, Patrick R. Michaud [EMAIL PROTECTED] wrote:
 With some recent PCT-related changes I think we may want to
  update the tutorials a bit.

  1.  Remove the custom List class.

  ResizablePMCArray now has built-in shift/unshift/push/pop
  methods, so we can use it directly from NQP and don't need
  to create a custom List class to be able to invoke these
  operations.

  2.  Remove :scope attribute from PAST::Var nodes.

  My intent has been that most PAST::Var nodes for simple variables
  would not require individual scope attributes; with the changes
  I checked into Parrot tonight this should be easier.  In Squaak's
  case this means that the Cidentifier action method should now
  read:

 method identifier($/) {
 make PAST::Var.new( :name($name),
 :viviself('Undef'),
 :node($/) );
 }

  In particular, note that there's no longer a need to
  explicitly search outer blocks for the scope -- PCT
  will handle this automatically.

  To indicate that all undeclared variables should default
  to 'package' scope, we use the Csymbol_defaults method on
  the top-level block.  For Squaak, we add the following to its
  TOP action method:

 $?BLOCK.symbol_defaults(:scope('package'));

  This says that 'package' scope is to be used for any PAST::Var
  node that doesn't have its own :scope and that doesn't have a
  scope provided by an outer block's symbol hash.


  3. (Bonus problem)  Eliminate @?BLOCK

  Since PAST::Var nodes no longer need to search outer blocks
  (PCT will handle that), we no longer need to maintain a @?BLOCK
  array.  So, for bonus points, eliminate @?BLOCK from the Squaak
  methods.


  If I can help explain or demonstrate any of the above, let me know.
  Thanks!

  Pm



PCT tutorial update suggestions

2008-04-10 Thread Patrick R. Michaud
With some recent PCT-related changes I think we may want to
update the tutorials a bit.

1.  Remove the custom List class.

ResizablePMCArray now has built-in shift/unshift/push/pop
methods, so we can use it directly from NQP and don't need
to create a custom List class to be able to invoke these
operations.

2.  Remove :scope attribute from PAST::Var nodes.

My intent has been that most PAST::Var nodes for simple variables
would not require individual scope attributes; with the changes
I checked into Parrot tonight this should be easier.  In Squaak's
case this means that the Cidentifier action method should now
read:

method identifier($/) {
make PAST::Var.new( :name($name),
:viviself('Undef'),
:node($/) );
}

In particular, note that there's no longer a need to
explicitly search outer blocks for the scope -- PCT
will handle this automatically.

To indicate that all undeclared variables should default
to 'package' scope, we use the Csymbol_defaults method on
the top-level block.  For Squaak, we add the following to its
TOP action method:

$?BLOCK.symbol_defaults(:scope('package'));

This says that 'package' scope is to be used for any PAST::Var
node that doesn't have its own :scope and that doesn't have a
scope provided by an outer block's symbol hash.


3. (Bonus problem)  Eliminate @?BLOCK

Since PAST::Var nodes no longer need to search outer blocks
(PCT will handle that), we no longer need to maintain a @?BLOCK
array.  So, for bonus points, eliminate @?BLOCK from the Squaak
methods.


If I can help explain or demonstrate any of the above, let me know.
Thanks!

Pm