Skip to content

Instantly share code, notes, and snippets.

@jnthn

jnthn/nope.md Secret

Last active January 8, 2016 16:05
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jnthn/040f4502899d39b2cbb4 to your computer and use it in GitHub Desktop.
Save jnthn/040f4502899d39b2cbb4 to your computer and use it in GitHub Desktop.

Things that won't make it into 6.christmas

The design docs are full of good things that we simply can't get done in the next couple of months, and that are simply not worth delaying 6.christmas for. This is an initial attempt to list some things we're going to explicitly put off for a future Perl 6.

Macros, slangs, and the COMPILING pseudo-package

We have a fairly good idea of where we want to go with these, and what needs doing to get there. Getting there will need a good amount of compiler engineering work, with some quite substantial refactors to a few bits of the internals (and avoiding that will likely lead to a whole bunch of "interesting" inconsistencies). We just don't have the resources to do that ahead of Christmas. And, while macros and slangs will be great, they're hardly a blocker for getting lots of useful stuff done in the language.

Jagged arrays

We'll support both fixed-size and multi-dimensional arrays in 6.christmas:

my @weekdays[52;7];
my num @a[3;3;3] @intensity;

But making certain dimensions have an unlimited number of elements is deferred.

User-defined indexing

See S09 for the details, but this is deferred.

The PDL bits of S09

We'll certainly provide multi-dimensional arrays (that work is nearly completed), but the various other bits mentioned in S09 should be explored in module space first. If the results lead us to wanting to add to the core language, than can happen in the future.

The Each type and auto-sorted hashes

Details in S09, if you're curious.

Non-parameter cases of coercion types and definedness types

We'll only support coercion types in signatures:

sub foo(Int() $x) { }

But that's all. Not on variables, not as generic arguments, and so forth. Same goes for definedness types (the :D and :U type modifiers).

goto

Read the design docs to understand why it's non-trivial, but there's all kinds of fun (like being able to jump into any zero-arg block, provided all on the way is also zero arg). We already support labelled loops, and have a rich set of control flow structures. I suspect more people will learn we didn't do goto by reading this post than by actually wanting it and finding it missing, anyway.

Missing regex features

Basically, don't expect anything that isn't in Rakudo already to be there in 6.christmas. (Given what's there is enough to parse Perl 6 itself, that's hardly a disappointing feature set!)

Regexes on things other than Str

Buf and Uni support for regexes is desirable, but we won't get there in time for 6.christmas.

The interaction of temp and wrap

I'm not sure this will survive in the design anyway, but it certainly won't make it for 6.christmas. Details in S06.

Auto-loading through CANDO

See S10 for details. It turns out that the FALLBACK method in objects covers enough interesting use cases for us not to worry too much about this bit of S10.

The oo pragma

S12 speculates about things like:

use oo :closed :final;

We won't be doing anything about this in 6.christmas, and we'll see about beyond that. If it's interesting for semantic reasons, it stands a chance of making it into a future version of the Perl 6 language. If it was just there for performance reasons, we need to know it will actually help (because dynamic optimization that knows how to de-optimize can get plenty of the benefits without such a declaration).

Cat

The lazy/infinite string type for stream matching. Will be valuable, but only really after we wire it into the grammar engine.

Parametric Complex

For 6.christmas, the Complex type will always be a pair of native nums. Being able to type-parameterize it is conjectured in the design docs, and can be provided in a future Perl 6.

Sub-byte numeric types

int1, uint1, int2, uint2, int4, and uint4, along with their aliases (like bit), will not be provided in 6.christmas.

Taint mode

Speculated about in the design docs, but will almost certainly need design work. May, in a post-slang/macro world, be better handled in module space. Either way, given taint mode's low use in Perl 5, this isn't going to really be a significant blocker.

@ap
Copy link

ap commented Oct 2, 2015

You could use the lack of goto as an advertised feature to create a sense of urgency. “It’s a language that doesn’t let you create spaghetti! But we plan to allow that – so get in on it NOW, while the going’s good!”

@zoffixznet
Copy link

Wonderful approach! I'm glad there's a decisive "nope" list to ensure a timely release. I look forward for my Christmas present! :)

@masak
Copy link

masak commented Oct 12, 2015

Re: macros. If you're curious about the latest thinking on these, check out the three types of macros article. This is the closest thing right now to what I imagine will be folded back into spec in the future. (But yeah, post-Christmas.)

Also keep an eye on 007, which is right now moving into the domain of macros, quasis, and Qtrees. Basically field-testing the ideas in the gist above.

@neuhaus
Copy link

neuhaus commented Jan 8, 2016

I used taint mode a lot with Perl 5, it was sometimes tedious because modules didn't support it well but it was a fool-proof way not to accidentally deal with data in a dangerous manner. I'm hoping it will be in Perl6 in some fashion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment