Raku / old-design-docs

Raku language design documents
https://design.raku.org/
Artistic License 2.0
124 stars 36 forks source link

Meta-ticket for S07 and update of List implementation details #70

Open pmichaud opened 10 years ago

pmichaud commented 10 years ago

tl;dr: This is a meta-ticket collecting references to outstanding issues related to Perl 6's aggregate list types.

Full version: Next week at the 2014 Austrian Perl Workshop I'm planning to focus heavily on updating Synopsis 7 and resolving a large number of issues surrounding Lists in Perl 6.

Having done at least three or four separate List implementations in Rakudo, I can tell you that it has never been easy to isolate -- small changes to the design of List (and its related classes) often have huge impacts to large segments of the codebase. Lists seem to be incredibly fundamental to Perl 6 design, and it's vital to get the underlying structures "just right" . (By way of analogy: Perl 6 OO design required getting the underlying metamodel details "just right", as it affects the entire implementation.)

To prepare for the update, I'd like to collect as many unresolved issues and details regarding S07 and lists into this single "metaticket". These can be references to existing bug reports, IRC discussions, and the like. Code examples illustrating undesirable behaviors can also be added here.

Note: If a code example illustrates a bug or issue, find/file a separate ticket for it and then reference it here, please. Also, this ticket is simply for collecting references to issues -- discussion of issues should take place elsewhere (either in separate tickets or on #perl6, which can then be linked to here).

Topics that I know are intimately involved in Perl 6 list design include (watch this section for updates):

So, any unresolved items relating to any of the above are fair game here.

Thanks.

pmichaud commented 10 years ago

Existing open synopsis tickets:

18 - How to lazily combine elements of two lists?

#7    - List.munch specification
#6    - .perl for self-referent structures
FROGGS commented 10 years ago

Legalize *..* - http://irclog.perlgeek.de/perl6/2014-08-30#i_9271389

peschwa commented 10 years ago

Hacking on m:g// (PR here) brought this discussion with it. The gist of it is that some objects want to have e.g. for iterate over .list, while others might not. The example in this case is $/ as a Match object from a multi-match, e.g. with :g, :ex, :ov, which S05 states behaves different from a Match returned from a match without those modifiers. A notable motivation is to preserve the for m:g/$pat/ { ... } idiom.

pmichaud commented 10 years ago

https://rt.perl.org/Public/Bug/Display.html?id=77738 - "is rw" on slurpy parameters

pmichaud commented 10 years ago

On #perl6 (http://irclog.perlgeek.de/perl6/2014-10-09#i_9479570), TimToady speculated on a variety of API policies:

08:07 TimToady my current list api poliices are: lazy, batch, silo, all, sink, hyper and race 08:08 the difference betwen batch and silo basically being sync vs async

pmichaud commented 10 years ago

More RT tickets related to lists and unresolved issues surrounding the current implementation:

Particularly relevant: 77746 - »,« doesn't produce a structure of parcels 113026 - array iterator does not track a growing array 112716 - lines() isn't lazy in Rakudo (actually map) 113870 - infix:«Z^..» doesn't produce sub-parcels 111848 - storage strategy for arrays is weird in Rakudo 122715 - Returning lazy list from start { } block results in empty list 80574 - Sequence operator not flattening when generator returns parcels 120861 - list repeated once not truncating 111732 - infix:«xx» doesn't flatten per default in Rakudo 117109 - .pick doesn't flatten in Rakudo 116525 - .reverse doesn't flatten in Rakudo 122895 - list assignment to a constant doesn't flatten 117403 - .first on an infinite list generated with gather is slow 120973 - Cross product with a .map in RHS yields empty list 122306 - List non-comprehension on jvm, moar 118717 - Nil is not supposed to be an iterator anymore 121327 - Array shift in loop in loop in loop shifts from an outdated array 120992 - Nil disappears in junction lists

Other related issues: 113802 - something wrong with .tree of the result of infix: 114100 - Capture.perl flattens out elements it shouldn't 116002 - Capture.perl flattens array arguments 82812 - Rakudo doesn't do list assignment for ops with sufficiently loose precedence 121994 - Array receives an empty itemized list 122230 - Zip operator doesn't extend lists ending in a Whatever

FROGGS commented 9 years ago

Would be interesting to know how this microbenchmark will improve due to GLR: https://p6weekly.wordpress.com/2015/02/17/2015-07-i-like-trains-fast-trains-that-is/comment-page-1/#comment-293

perl -wnl -E ‘say $1 if /\b(\w{5})\b/’ logs.txt (19Mb) / 1 sec
ruby -wnl -e ‘puts $1 if /\b(\w{5})\b/’ logs.txt (19Mb) / 1.8 secs
perl6 -n -e ‘say $0 if m/(<<\w**5>>)/’ logs.txt (19Mb) / 88 secs
skids commented 9 years ago

FWIW, the return value of a while/until/loop statement is a longstanding NYI. And feeds have lost most of whatever laziness they may have had a while back.