June 29, 2011

#perl6 2011-06-29


moritz: new idea, after talking about the no-longer-done mailing list summaries, we thought it would be cool if someone, while reading the ir clogs, could just flag important things as a pseudo-summary

TimToady: re http://irclog.perlgeek.de/perl[…]1-06-29#i_4021067 it can certainly be done, though I'm not yet sure if it should include authentication, or just a global (not perl nick) flag per line


moritz: http://www.harmonyware.com/perl/p6numerics/ (second draft)

colomon: that point about the Bridge not specifying the type was a revelation to me.  I hadn't thought much about it before.

TimToady: I added a paragraph about <...> to http://strangelyconsistent.org[…]d-data-structures based on your feedback.

blog post! http://strangelyconsistent.org[…]22-format-strings

TimToady: I've updated the talk with the changes to the mandel sub you suggested and additional comments :)


getc is a stdio function

it doesn't control what goes into the buffer

the compounds of s,m,q, etc are just that letter plus the switch

so ss turns into s:s and sss would turn into s:ss

otoh, if we slurp up a bunch of keywords starting with s, people will hat us

and we proably shouldn't make s:foo -> sfoo a productive mechanism anyway

there is a hypothetical 'quote' declarator

so we could just arbitrary declare some common ones, like qqx

S05 has a few instances of C<s//>, I changed them all to C<s///>: http://laire.fi/t/S05.patch

specs: s// -> s/// from jlaire++

ROODE was pondering how nice it would be if he had $foo ?= 'a' : 'b' in 5.

$foo ?? 'a' !!= 'b' would work, but is specifically forbidden

I don't agree with jnthn/masak's proposal (or some of the details of the resulting specpatch)

I especially don't like the 1=>  stuff.

the only change I would have made personally is to make :x opt-in

well, would it help to say that the :x form uses the names in the proto, but the actual multis can use different names on the same positions?

still would like to see S12:2268 happen


TimToady: what's the best model/code for me to look at to implement full ltm-semantics?

well, my stuff did real LTM but not with a real dfa-ish engine, while it's my understanding that niecza does it in a theoretically purer fashion

AFAIR discarding fates is the main break niecza makes from Cursor

well not so much "discarding" as "I haven't implemented them yet, and with DFAs being <10% of parse time I see no pressing need"

pmichaud: the basic principle of the LTM handling (in niecza and Cursor) is that | is a || that intelligently reorders clauses


pmichaud: start from LTMPushAlts


niecza now passes every substr.t test except the StrPos ones

btw, niecza is now passing over 3000 spectests

niecza: Implement term:<proceed>, Any.{isa,can,does}, we now pass given.t

I predict that by the time of the July release, Rakudo will be the faster one, but Niecza will have the more features

niecza: Implement <-> auto-rwification

it turned out to be very easy


dukeleto, colomon: that's a bit messy. projects.list is for backwards-compatibility only, and should be buried probably. Now module-starter was added to the ecosystem long ago, but it was moritz's module. My version wasn'

tadzik: i gave module-starter some love today


sorear: yes, what I'm doing is changing the automatic trig test generator to get rid of the trigbase tests

roast: Remove the trigbase tests from the trig spectests.

masak: being able to test the REPL would be _so awesome_

mberends: the standard way to test a Perl 6 implementation is prove -e IMP test.pl

Rosetta Code

I think Rat is only *used* in this draft task: http://rosettacode.org/wiki/Co[…]rt_decimal_number

Rationals greatly enhance the awesomeness of http://rosettacode.org/wiki/Re[…]helon_form#Perl_6

We get *exact* output; compare to Ruby, Groovy, and Javascript.

Util: it was http://rosettacode.org/wiki/Va[…]t_sequence#Perl_6 I was thinking of

shows off the Rats

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!


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.

December 28, 2009

Seven Days between the Parrot and the Camel

from Monday, December 21 to Sunday, December 27 in the year 2009

Considering the Language:

The spec remained quiet during Christmas.

Considering Rakudo:

Apart from some core setting work by Solomon Foster and David Romano, the ng branch was silent.

The master branch learned :s for getting file sizes.

Considering Parrot:

Work is going on to make PIRC easier to build. (PIRC is an alternative PIR compiler with a yacc/bison grammar and a flex-generated lexer. It is meant to replace the IMCC compiler.) The pirc_config branch has been created for adding a --pirc configure option. The goal is to make using PIRC an option before Parrot 2.0.

Will Coleda (a.k.a coke) improved the optional automatic testing of make dependencies (tools/dev/checkdepend.pl) and fixed many of the reported errors.

Christoph Otto cleaned up the description of the bytecode format in PDD 13 and made packfiles somewhat smaller and faster by omitting redundant pc → filename mappings.

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.

Geoffrey Broadwell has completed the migration of plumage glue code to nqp-rx. All regexes are written in nqp-rx now, so PGE is no longer required. All plumage-specific code has been removed from Util.nqp in order to prepare the file for possible inclusion as a library in the nqp-rx distribution. However, Util.nqp still needs tests and a ticket has been opened in order to encourage contributors. There is also a document explaining how to add tests to plumage.

[As mistakenly reported for week 51,] Bob Kuo, a.k.a. bubaflub, celebrated his new commit bit with a firework of changes, converting many further tests to PIR among other things.