February 28, 2010

Some days of regret and hope

Dear readers and protagonists!

As you know when you are reading this, I have not been able to deliver weekly summaries for a while. Just as the activity of the Perl 6, Parrot, and Rakudo projects leapt upward, the workload in my job increased and I found myself unable to stay at the screen after hours.

I have not at all lost interest in these projects, which in fact are becoming more inspiring every day. I still follow your work closely and I am considering other formats of summarizing that might allow me to contribute again.

Thanks for sharing your enthusiasm and for your encouraging comments!

Lithos

February 02, 2010

Seven Days between the Parrot and the Camel

from Monday, January 18 to Sunday, January 24 in the year 2010

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 $one and $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 (List, Seq, Parcel, Capture, Iterator):

The List role represents lazy access to a list. The iterator of a list is the list itself. Thus Iterator, the type of Perl lists, does the List role. However, types doing the List role will usually be hidden from casual view, as iteration is typically triggered by context, not by calling iterator methods.

List does no longer do the Positional role, but it gains a method new and a sub list for creating a List that visits all iterable elements of the given arguments.

Seq does the Iterable role and is allowed to generate its values lazily. The elements that have already been reified, however, will be considered immutable. (The Iterable role also replaces the Each role mentioned in sections about hyperoperators.)

In item context, a list is turned into a lazy Seq object. A Parcel also turns into a Seq object in item context.

The empty Parcel (called Nil) will evaluate to a null list in list context and to an empty Seq in slice context. As iterators can never return a Parcel, Nil will be used as the value that marks the end of iteration.

Array also gets a new method.

Blob does the Stringy role. Conjecturally Stringy might be split into two roles: a general one containing operations for dense sequences (which both Blob and Str are), and a specialized one for operations specific to characters (done only by Str).

The deletion criterion of KeyWeight was 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.



Considering Rakudo:

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 has attributes.

Solomon Foster worked to make the ng branch pass some list-related tests.



Considering Parrot:

Parrot 2.0.0 was released on Wednesday, January 20 by chromatic. Major features are the merged CallContext PMC 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.

IMCC now 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.

January 26, 2010

Seven Days between the Parrot and the Camel

from Monday, January 11 to Sunday, January 17 in the year 2010

Considering the Language:

There were no spec changes except for some typo fixes.

One of the fixes sparked some discussion about the correct reading of the sentence "Regexes are now first-class language, not strings".

Larry Wall refactored the Cursor class in his STD grammar implementation.

Kyle Hasselbacher contributed many spectests for RT tickets and split up the smartmatch operator tests into several files.



Considering Rakudo:

Jonathan Worthington returned to Rakudo development and immediately increased the momentum of the ng branch by implementing parametric roles, role punning, and "my Can of Beer $starobrno" declarations.

Solomon Foster made exponentiation right-associative as per STD.pm and implemented Complex.roots and Num.Complex.

John Harrison fixed List.new(1, 2, 3).



Considering Parrot:

Peter Lobsinger merged the pmc_freeze_cleanup branch to trunk.

James Keenan merged the branches remove_Parrot_ex_calc_handler_offset and tt473_remove_memcpy_aligned to trunk.

In the tt389_fix branch for fixing bug 389, chromatic was blocking a bit on related fixes to PGE/TGE. He expects the branch to land just after release 2.0. A separate branch pge_no_namespace_methods has been created to fix PGE not to look for methods in namespaces.

Vasily Chekalkin started the gc_encapsulate branch for improving the encapsulation of pluggable garbage collectors.

Peter Lobsinger added the testG make target and -G harness flag for running the tests with the gcdebug runcore. He reports 8 failures currently on Linux x86_64 using this flag. He also disabled Garbage-collection when threads are used as they don't play nice together.

Aninhumer contributed documentation about defining subs in PIR. He also suggested mentioning Duke Leto's GitHub mirror as an easy place to apply documentation changes.

"vv" and similar NCI signatures have been deprecated.

François Perrad added new meta data for Cardinal and Forth to plumage.

January 15, 2010

Seven Days between the Parrot and the Camel

from Monday, January 4 to Sunday, January 10 in the year 2010

Considering the Language:

The spec remained quiet except for some cleanup and clarification:

KeyHash containers will have a default value (such as 0 or '' or Nil or Bool::False) and delete any entry if its value goes to this default.

Declaration examples were updated to properly use constant as a type declarator syntactically.

Some fossils using the range constructor .. with the obsolete :by adverb were fixed to use the ... sequence operator.

Remnants of .true changed to .so.



Considering Rakudo:

While still waiting for the return of its main protagonists, the ng branch made some progress:

Jonathan Scott Duff implemented unspace parsing and parsing of variable shapes in declarations.

Solomon Foster added log functions with $base parameter.

Stephen Weeks added &warn.



Considering Parrot:

In the one_make branch, Will Coleda has already converted data_json, pirc, nqp, imcc, and json to use included Makefile fragments instead of recursive make invocations. Each subproject provides a Defines.mak and a Rules.mak file so all variable definitions can be gathered before the rule definitions start. The checkdepend.pl tool now has a --dump option for printing the preprocessed Makefile and checks .include and load_bytecode dependencies of PIR files in addition to C #includes.

Vasily Chekalkin changed tailcall ops to detach the RetContinuation from the context in an attempt to fix the elusive bug 1393. The issue does not seem to be fully resolved, however, as James Keenan still reports test failures.

In order to fix bug 389 (methods are wrongly entered in namespaces), chromatic started the tt389_fix branch.

The OrderedHash PMC has been deprecated.

François Perrad added a separate install-doc target for installing documentation files and examples.

January 06, 2010

Seven Days between the Parrot and the Camel

from Monday, December 28 in the year 2009 to Sunday, January 4 in the year 2010

Considering the Language:

Larry Wall updated Synopsis 1, explaining the spiral, cooperative, and convergent design process of Perl 6. He emphasized that Perl 6 will be anything that passes the official test suite owned by the community. The spec will not be frozen prematurely: Specced features should be considered conjectural until they have been proven in an implementation. The rate of convergence is, according to Larry Wall, an emergent property, and cannot be forced, but only encouraged by cooperation.

The standard Perl 6 grammar will be able to parse a well-behaved subset of Perl 5. Implementations will only be required to support this subset.



Considering Rakudo:

Apart from continued core setting work by David Romano and Moritz Lenz, the ng branch remained mostly silent. Stephen Weeks added a first draft of a new Failure class. Jonathan Scott Duff renamed break/continue to succeed/proceed.

The master branch learned :l for checking whether a file is a symbolic link (contributed by Heikki Mehtänen).



Considering Parrot:

In the one_make branch, Will Coleda is working towards a single top-level makefile that includes submakefiles instead of invoking make recursively. Some of the required dependency cleanups already propagated to the trunk.

Vasily Chekalkin created the boehm_gc branch on which he integrated the Boehm-Demers-Weiser garbage collector into Parrot as an alternative to the default mark-and-sweep collector. Results so far suggest that the Boehm GC — being a conservative GC — turns out slower than Parrot's primitive but exact GC that knows about the internal structure of Parrot objects.

Peter Lobsinger and Kevin Tew continued work in the pmc_freeze_cleanup branch that aims at cleaning up and unifying PMC freeze/thaw serialization and packfile reading/writing. They were already able to eliminate the need for EXTRA_IS_PROP_HASH. The prophash handling is now contained in a single function and plans are to move it to default.pmc.

James Keenan merged the branch for removing Parrot_ex_calc_handler_offset back to trunk.

Vasily Chekalkin applied a patch by Jimmy to use UINTVALs to store the number of Parrot registers.

François Perrad added Forth to smoke_languages.pl.