Unless I hear otherwise, I plan on freezing RFC 204 and RFC 206 this 
evening (17:30 New York time), and issue a revised version of 207.  The 
frozen versions will be substantially identical to the versions ow 
released.

On RFC 204 (LOL refs as indices), I have followed the discussion from 
Ilya that list references will have problems when objects that used 
blessed references to lists as their internal representation are used 
as indices.  This does indeed seem to be a problem, but I'm uncertain 
how big of a problem.

Would it help if the RFC stated that the index had to be either a 
scalar integer or an ARRAY ref of integers?  Since objects would be 
blessed as something other than ARRAY, they would need to be converted 
first.  If it was an object, it would try to call standard methods to 
convert to a scalar integer, a list of integers, or an ARRAY ref of 
integers.  Just an idea.

I will include Ilya's objections (and a more formal version of the 
above suggestion) in a "Summary of Discussion" section.

On RFC 206 (@#arr as bounds-fetcher), I have not really heard any 
substantive comments, but most of what I've heard is positive.  Please 
point out to me anything I may have missed.

I will freeze 206 as-is, unless someone has something to add.

On RFC 207 (efficient array loops), based on discusion and additional 
thought on my part, I want to clarify and change the syntax used in the 
RFC.  I also want to go into more detail about how the scope of the 
efficient array loops is derived.

Here is a summary of changes:

1)  Replace use of |i as a "list-like" expression to use of |i as a 
"scalar-like" expression.  This would prefer syntax like:

  @newarray = $a[|i]*$b[|j];

over

  @newarray = @a[|i]*@b[|j];

I originally viewed |i as being syntactically a replacement for a range 
(0..$max), but I think that view is potentially confusing.

2)  In v1, iterators converted the minimal expression containing all 
iterators in a statement into a loop (or nested loops).  This 
unfortunately led to such clumsiness as:

  {my @temp; $temp[|i] = dotproduct += $a[|i]*$b[|i];} # Not DWIMish

where it isn't clear why the @temp needs to be created and destroyed.  
The RFC also required the creation of a potentially huge 
multidimensional array even if such an array would then simply be 
thrown away.  Worse, in the "dotproduct" example above, both the 
implicit array and the @temp array would be created and destroyed for 
no good reason.

v2 will have iterator scope and implicit array creation dependant on 
context:

Starting with the minimal expression containing all iterators in a 
statement:

a) If the expression is in list context, generate an implicit temporary 
array.

b) If the expression is in void context, do not generate an implicit 
temporary array

c) If the expression is in any other context (scalar, lvalue, etc) 
expand the expression to the minimal proper superexpression (i.e., go 
up one level on the parse tree) until you have list or void context.

That would make

  dotproduct += $a[|i]*$b[|i];

Do The Right Thing.

I would also state that although some of the examples used can be 
better done under RFC 82, this RFC is not intended to compete with RFC 
82.  RFC207 and RFC82 provide two different sets of functionality that 
partially overlap.

Comments?  Criticism?  Complaints?

Later,
  Buddha

-- 
     Buddha Buck                             [EMAIL PROTECTED]
"Just as the strength of the Internet is chaos, so the strength of our
liberty depends upon the chaos and cacophony of the unfettered speech
the First Amendment protects."  -- A.L.A. v. U.S. Dept. of Justice


Reply via email to