Considering the Language:
Synopsis 7 was updated to better define the notions of mostly lazy, mostly eager and strictly eager.
List assignment semantics have been refined: List assignment will be mostly eager, meaning that it will cause evaluation of the leading part of the right-hand side that is known to be finite. In any case, list assignment will evaluate enough elements to fill scalar slots in the signature, so
($one, $two, @many) = 1..*will eagerly calculate
$two. Portions of a list that end with an exact value will be treated as finite, even if it is infeasible to actually evaluate all elements up to that exact value.
There were several changes to types involved with sequential things (
Listrole represents lazy access to a list. The iterator of a list is the list itself. Thus
Iterator, the type of Perl lists, does the
Listrole. However, types doing the
Listrole will usually be hidden from casual view, as iteration is typically triggered by context, not by calling iterator methods.
Listdoes no longer do the
Positionalrole, but it gains a method
newand a sub
listfor creating a
Listthat visits all iterable elements of the given arguments.
Iterablerole and is allowed to generate its values lazily. The elements that have already been reified, however, will be considered immutable. (The
Iterablerole also replaces the
Eachrole mentioned in sections about hyperoperators.)
In item context, a list is turned into a lazy
Parcelalso turns into a
Seqobject in item context.
Nil) will evaluate to a null list in list context and to an empty
Seqin slice context. As iterators can never return a
Nilwill be used as the value that marks the end of iteration.
Arrayalso gets a
Stringymight be split into two roles: a general one containing operations for dense sequences (which both
Strare), and a specialized one for operations specific to characters (done only by
The deletion criterion of
KeyWeightwas brought in line with the other containers. Keys will only be deleted when their weight goes exactly to zero. Implementations may complain, however, if a negative weight is used.
Patrick Michaud returned to Rakudo development and updated Rakudo to work with Parrot 2.0. He also enabled basic list assignment and in the process triggered refinements of the spec. He also prepared Rakudo development release #25.
Jonathan Worthington taught the ng branch the
$foo.'methname'()syntax and the default
*%_parameter of methods, making the branch pass several tests of method invocations. He also improved the handling of
Solomon Foster worked to make the ng branch pass some list-related tests.
Parrot 2.0.0 was released on Wednesday, January 20 by chromatic. Major features are the merged
CallContextPMC that also supports attribute-based introspection and the improvements of the PMC freeze code.
Right after the release, James Keenan merged the noalignptrs branch into trunk, removing a needless configuration step, and the no_running_make_test branch, which gets rid of an unused harness option.
IMCCnow forbids the use of macro labels outside the macro definition, and thereby fixes a reported segfault.
Stephen Weeks worked on the pge_no_namespace_methods branch to fix method lookup in PGE.