perl 5: today, tomorrow, and christmas
TRANSCRIPT
Perl 5Today, Tomorrow, and Christmas
The Perl Dev That Was
The Perl Dev That Was
- between perl 5.10 and perl 5.12, we changed how the release cycle works
The Perl Dev That Was
- between perl 5.10 and perl 5.12, we changed how the release cycle works
- that was three years ago (!!)
The Perl Dev That Was
- between perl 5.10 and perl 5.12, we changed how the release cycle works
- that was three years ago (!!)
- hopefully this is the last time we need to talk about the old ways
The Old Days
blead
maint5.8.0 5.8.1
5.9.0 5.9.1 5.9.2
5.8.2
5.10.0
The Old Days
The Old Days
- what merits a new dev release?
The Old Days
- what merits a new dev release?
- when is a new major release done?
The Old Days
- what merits a new dev release?
- when is a new major release done?
- what can get backported?
The Old Days
- what merits a new dev release?
- when is a new major release done?
- what can get backported?
- i.e., how stable is a stable release?
When I say so is when!
When I say so is when!
- not a terrible idea in theory
When I say so is when!
- not a terrible idea in theory
- but in practice, it led to very long waits for new features to be usable
When I say so is when!
- not a terrible idea in theory
- but in practice, it led to very long waits for new features to be usable
- ...which led to bad designs surviving
- worse, the pumpking is now busy doing
- worse, the pumpking is now busy doing
- "cherrymaint"
- worse, the pumpking is now busy doing
- "cherrymaint"
- release planning
- worse, the pumpking is now busy doing
- "cherrymaint"
- release planning
- release "paperwork"
- worse, the pumpking is now busy doing
- "cherrymaint"
- release planning
- release "paperwork"
- cat herding (read: arguing with angries)
- worse, the pumpking is now busy doing
- "cherrymaint"
- release planning
- release "paperwork"
- cat herding (read: arguing with angries)
- ...but is actually a hugely valuable coder
The Interregnum
The Interregnum
- the 5.10 crisis
The Interregnum
- the 5.10 crisis
- the San Diego call
The Interregnum
- the 5.10 crisis
- the San Diego call
- 5.11 and the release engineers corps
The Interregnum
- the 5.10 crisis
- the San Diego call
- 5.11 and the release engineers corps
- any idiot can do it!
New Blead
blead
2011-065.15.0
New Blead
blead
2011-065.15.0
2011-075.15.1
New Blead
blead
2011-065.15.0
2011-075.15.1
2011-085.15.2
New Blead
blead
2011-065.15.0
2011-075.15.1
2011-085.15.2
2011-095.15.3
New Blead
blead
2011-065.15.0
2011-075.15.1
2011-085.15.2
2011-095.15.3
2012-055.15.9
New Blead
blead
2011-065.15.0
2011-075.15.1
2011-085.15.2
2011-095.15.3
2012-055.15.9
maint2012-065.16.0
New Blead
blead
2011-065.15.0
2011-075.15.1
2011-085.15.2
2011-095.15.3
2012-055.15.9
maint2012-065.16.0
2012-065.17.0
New Blead
blead
2011-065.15.0
2011-075.15.1
2011-085.15.2
2011-095.15.3
2012-055.15.9
maint2012-065.16.0
2012-065.17.0
David G. Zefram Rik Stevan Abigail Zefram
Rik
New Maint
blead
maint2012-065.16.0
2012-065.17.0
Zefram
Rik
New Maint
blead
maint2012-065.16.0
2012-065.17.0
Zefram
Rik
2012-075.16.1
?
New Maint
blead
maint2012-065.16.0
2012-065.17.0
Zefram
Rik
2012-075.16.1
?
2012-095.16.2
?
New Maint
blead
maint2012-065.16.0
2012-065.17.0
Zefram
Rik
2012-075.16.1
?
2012-095.16.2
2013-??5.16.2
? ?
Minimal Maint
- almost all dev. burden is kept in blead
Minimal Maint
- almost all dev. burden is kept in blead
- the rules about changing maint are strict
Minimal Maint
- almost all dev. burden is kept in blead
- the rules about changing maint are strict
- must be critical bug fix
Minimal Maint
- almost all dev. burden is kept in blead
- the rules about changing maint are strict
- must be critical bug fix
- (which includes security)
Minimal Maint
- almost all dev. burden is kept in blead
- the rules about changing maint are strict
- must be critical bug fix
- (which includes security)
- very effective! in fact, so effective that...
Minimal Maint
Multimaint
blead
2012-065.16.0
2012-065.17.0
Zefram
Rik
2012-075.16.1
?
2012-095.16.2
2013-??5.16.2
? ?
maint-5.16
2011-055.14.0
Jesse
maint-5.14
New Cherrymaint
blead
maint2012-055.16.0
2012-055.17.0
Zefram
Rik
2012-075.16.1
?
2012-095.16.2
2013-??5.16.2
? ?
New Cherrymaint
blead
maint2012-065.16.0
2012-065.17.0
Zefram
Rik
2012-075.16.1
?
2012-095.16.2
2013-??5.16.2
? ?
Pumpking?
What is the Pumpking?
What is the Pumpking?
- the patch pumpkin
What is the Pumpking?
- the patch pumpkin
- the person with the conch
What is the Pumpking?
- the patch pumpkin
- the person with the conch
- the benevolent dictator for now
What is the Pumpking?
- the patch pumpkin
- the person with the conch
- the benevolent dictator for now
- was: the one who could do everything
What is the Pumpking?
- the patch pumpkin
- the person with the conch
- the benevolent dictator for now
- was: the one who could do everything
- now: the one who manages
Jesse and Rik
Jesse and Rik
- we get along well
Jesse and Rik
- we get along well
- we both want what is good for Perl 5
Jesse and Rik
- we get along well
- we both want what is good for Perl 5
- but we see the future very differently
Rik and Jesse
Rik and Jesse
- Jesse's "5.16 and Beyond" was inspired by his hopes and dreams
Rik and Jesse
- Jesse's "5.16 and Beyond" was inspired by his hopes and dreams
- This talk is inspired by my fears and anxieties
The Pumpking's Job
The Pumpking's Job
- ...is not to make sure perl gets better.
- It's to make sure perl doesn't get worse.
Designing Perl
Designing Perl
- So, does that mean that the pumpking is Perl's designer?
Designing Perl
- So, does that mean that the pumpking is Perl's designer?
- Only to the extent that the designs he offers are carried out.
Designing Perl
- So, does that mean that the pumpking is Perl's designer?
- Only to the extent that the designs he offers are carried out.
- Saying "make it so" depends on having a crew who will make it so.
Designing Perl
- So, does that mean that the pumpking is Perl's designer?
- Only to the extent that the designs he offers are carried out.
- Saying "make it so" depends on having a crew who will make it so.
- Instead, he or she is the decider.
How a Bill Becomes a Law
Mailing List Judo
Mailing List Judo
- how do you get your change applied?
Mailing List Judo
- how do you get your change applied?
- by avoiding controversy
Mailing List Judo
- how do you get your change applied?
- by avoiding controversy
- ...at least on the list
Syntax
Syntax
- perl programmers obsess over it
Syntax
- perl programmers obsess over it
- even when the semantics are the real problem
Syntax
- perl programmers obsess over it
- even when the semantics are the real problem
- ?->
Syntax
- perl programmers obsess over it
- even when the semantics are the real problem
- ?->- letting a syntax discussion start can be fatal
Changing Anything
Changing Anything
- some argue that change itself is bad
Changing Anything
- some argue that change itself is bad
- "someone might be relying on this error"
Other Lunacy
Other Lunacy
- "Your patch is nice, but why don't we do fifteen other things along with it?"
Other Lunacy
- "Your patch is nice, but why don't we do fifteen other things along with it?"
- "There are serious problems with this patch, too large to fit in the margin of this email."
...and in reality...
...and in reality...
- These observations are true.
...and in reality...
- These observations are true.
- So the advice to "lobby in private" seems promising.
...and in reality...
- These observations are true.
- So the advice to "lobby in private" seems promising.
- Everybody wants to avoid a long p5p thread
...and in reality...
- These observations are true.
- So the advice to "lobby in private" seems promising.
- Everybody wants to avoid a long p5p thread
- …because p5p can be a horrible place.
U+1F4A9
U+1F4A9
- In most cases, everything I've just said is true.
U+1F4A9
- In most cases, everything I've just said is true.
- …and also crap.
U+1F4A9
- In most cases, everything I've just said is true.
- …and also crap.
- p5p has, in part, a culture of fear
U+1F4A9
- In most cases, everything I've just said is true.
- …and also crap.
- p5p has, in part, a culture of fear
- …of endless, horrible argument
Improving p5p
Improving p5p
- if discussion on p5p was not only reliably civil…
Improving p5p
- if discussion on p5p was not only reliably civil…
- …but also technically on point…
Improving p5p
- if discussion on p5p was not only reliably civil…
- …but also technically on point…
- contributors would want to engage in it
Improving p5p
Improving p5p
- we would still try to avoid controversy
Improving p5p
- we would still try to avoid controversy
- …but by reaching consensus, not with tricks
Improving p5p
- we would still try to avoid controversy
- …but by reaching consensus, not with tricks
- so the pumpking never needs to decide!
The Pumpking's Job
The Pumpking's Job
- What will I do with all that free time?
The Pumpking's Job
- What will I do with all that free time?
- I will try to improve the list's culture.
The Pumpking's Job
- What will I do with all that free time?
- I will try to improve the list's culture.
- My promise:
The Pumpking's Job
- What will I do with all that free time?
- I will try to improve the list's culture.
- My promise:
- I will call out unreasonable arguments and, even more, unreasonable behavior.
The Pumpking's Job
The Pumpking's Job
- ...is to make sure p5p culture gets better.
The Final Decision
The Final Decision
- sometimes, controversy is unavoidable
The Final Decision
- sometimes, controversy is unavoidable
- there is no consensus on whether a new feature is a good idea
The Final Decision
- sometimes, controversy is unavoidable
- there is no consensus on whether a new feature is a good idea
- how can Rik still avoid having to decide?
CPAN, not perl
CPAN, not perl
- can the feature be implemented on CPAN?
CPAN, not perl
- can the feature be implemented on CPAN?
- if not, why not? can that be fixed?
CPAN, not perl
- can the feature be implemented on CPAN?
- if not, why not? can that be fixed?
- can its semantics be simulated for testing?
feature
feature
- can the feature be lexically hidden behind feature.pm?
feature
- can the feature be lexically hidden behind feature.pm?
- (remember, not every feature needs to be in a version bundle)
feature
- can the feature be lexically hidden behind feature.pm?
- (remember, not every feature needs to be in a version bundle)
- use experimental
use experimental ‘bind_op’;
my $y = “Foo bar”;my $x := $y;
:=
use experimental ‘bind_op’;
my $y = “Foo bar”;my $x := $y;
:=
Feature “experimental_bind_op” is not supported by Perl 5.22.0
Strategy of Last Resort
Strategy of Last Resort
- the change is controversial
Strategy of Last Resort
- the change is controversial
- and can't be prototyped on CPAN
Strategy of Last Resort
- the change is controversial
- and can't be prototyped on CPAN
- and can or can't go into feature.pm
Strategy of Last Resort
- the change is controversial
- and can't be prototyped on CPAN
- and can or can't go into feature.pm
- how do we decide?
The Final Decision
The Final Decision
- is the feature small and specific?
The Final Decision
- is the feature small and specific?
- is the feature generic and unsurprising?
The Final Decision
- is the feature small and specific?
- is the feature generic and unsurprising?
- is the feature teachable?
The Final Decision
- is the feature small and specific?
- is the feature generic and unsurprising?
- is the feature teachable?
- what's the maintenance burden?
The Final Decision
- is the feature small and specific?
- is the feature generic and unsurprising?
- is the feature teachable?
- what's the maintenance burden?
- does it feel like it makes Perl more Perlish?
Perlishness
Perlishness
- I know it when I see it.
Perlishness
- I know it when I see it.
- "gets us further along our road map"
The Road Map
The Road Map
- I don't make one.
The Road Map
- I don't make one.
- I don't see the point. I don't implement perl.
The Road Map
- I don't make one.
- I don't see the point. I don't implement perl.
- Submitted patches are the roads
Pathfinding
Pathfinding
- Backward compatibility
Pathfinding
- Backward compatibility
- POLS
Pathfinding
- Backward compatibility
- POLS
- Utility
Pathfinding
- Backward compatibility
- POLS
- Utility
- Conceptual simplicity
Pathfinding
- Backward compatibility
- POLS
- Utility
- Conceptual simplicity
- Readability
Intelligent Design
Intelligent Design
- always the best way to build something
Intelligent Design
- always the best way to build something
- assuming sufficient intelligence
Intelligent Design
- always the best way to build something
- assuming sufficient intelligence
- and omnipotence
Intelligent Design
- always the best way to build something
- assuming sufficient intelligence
- and omnipotence
- i.e., great if you're God
Evolution
Evolution
- seems to have worked pretty well
Evolution
- seems to have worked pretty well
- except for the billions of required deaths
Evolution
- seems to have worked pretty well
- except for the billions of required deaths
- and millions of years
Evolution
- seems to have worked pretty well
- except for the billions of required deaths
- and millions of years
- and all those extinct species
Evolution
- seems to have worked pretty well
- except for the billions of required deaths
- and millions of years
- and all those extinct species
- and I still ended up with an appendix
Intelligent Evolution
Intelligent Evolution
- mutations are designed, not random
Intelligent Evolution
- mutations are designed, not random
- then further mutated in captivity
Intelligent Evolution
- mutations are designed, not random
- then further mutated in captivity
- and possibly slaughtered before reaching the wild
Recovering from Error
Oops
Oops
- so, Rik had to decide something
Oops
- so, Rik had to decide something
- and he made the wrong choice
Oops
- so, Rik had to decide something
- and he made the wrong choice
- and everybody can tell
Oops
- so, Rik had to decide something
- and he made the wrong choice
- and everybody can tell
- and he wants to fix it up so the new smartassign operator is not legacy
Experimental?
Experimental?
- was it marked experimental?
Experimental?
- was it marked experimental?
- if so, we can just remove the thing
Experimental?
- was it marked experimental?
- if so, we can just remove the thing
- ...in theory
Current Experiments
Current Experiments
- fork emulation
Current Experiments
- fork emulation
- lvalue subroutines
Current Experiments
- fork emulation
- lvalue subroutines
- weak references (!?)
Experimental?
Experimental?
- was it marked experimental?
Experimental?
- was it marked experimental?
- if so, we can just remove the thing
Experimental?
- was it marked experimental?
- if so, we can just remove the thing
- ...in theory
Experimental?
- was it marked experimental?
- if so, we can just remove the thing
- ...in theory
- if not, we'll do a deprecation
Deprecation Cycle
Deprecation Cycle
1. (optional) announce in 5.16 delta that we'll probably deprecate a behavior next time
Deprecation Cycle
1. (optional) announce in 5.16 delta that we'll probably deprecate a behavior next time
2. start issuing warnings in 5.18
Deprecation Cycle
1. (optional) announce in 5.16 delta that we'll probably deprecate a behavior next time
2. start issuing warnings in 5.18
3. keep issuing them in 5.20
Deprecation Cycle
1. (optional) announce in 5.16 delta that we'll probably deprecate a behavior next time
2. start issuing warnings in 5.18
3. keep issuing them in 5.20
4. remove the behavior in 5.22
The Eternal Bug
The Eternal Bug
- some behaviors can't be detected and made fatal practically
The Eternal Bug
- some behaviors can't be detected and made fatal practically
- arybase feature: we could remove it
The Eternal Bug
- some behaviors can't be detected and made fatal practically
- arybase feature: we could remove it
- The Unicode Bug...
The Unicode Bug
my $x = acquire_input;
The Unicode Bug
my $x = acquire_input;
$x .= “Á”; # <-- that’s an A-acute
The Unicode Bug
my $x = acquire_input;
$x .= “Á”; # <-- that’s an A-acute
print $x =~ /á/i ? ‘match’ : ‘no match’;
The Unicode Bug
Features in Flight
pluggable syntax
(the MOP)
regexp class sets
$str = /\A (?[a-z] - [aeiou])\z/x
regex class sets
casemod escapes
casemod escapes
$input = <STDIN>;
casemod escapes
$input = <STDIN>;# ricardo
casemod escapes
$input = <STDIN>;# ricardo# RICARDO
casemod escapes
$input = <STDIN>;# ricardo# RICARDO# Ricardo
casemod escapes
$input = <STDIN>;# ricardo# RICARDO# Ricardo
$str = “\u\L$input”; # Ricardo
casemod escapes
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
$let =~ /\L\N{LATIN CAPITAL LETTER A}/;
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
$let =~ /\L\N{LATIN CAPITAL LETTER A}/;# fails!!
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
$let =~ /\L\N{LATIN CAPITAL LETTER A}/;# fails!!
qr<\N{LATIN CAPITAL LETTER A}>
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
$let =~ /\L\N{LATIN CAPITAL LETTER A}/;# fails!!
qr<\N{LATIN CAPITAL LETTER A}># (?^u:\N{U+41})
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
$let =~ /\L\N{LATIN CAPITAL LETTER A}/;# fails!!
qr<\N{LATIN CAPITAL LETTER A}># (?^u:\N{U+41})
qr<\L\N{LATIN CAPITAL LETTER A}>
casemod escapes
$let = “\L\N{LATIN CAPITAL LETTER A}”;# $let is now ‘a’
$let =~ /\L\N{LATIN CAPITAL LETTER A}/;# fails!!
qr<\N{LATIN CAPITAL LETTER A}># (?^u:\N{U+41})
qr<\L\N{LATIN CAPITAL LETTER A}># (?^u:\n{u+41})
casemod escapes
ÅÂÃÄÉÃ
EBCDIC
smartmatch
The Future of ~~
The Future of ~~
- deprecate and remove?
The Future of ~~
- deprecate and remove?
- make pluggable with simple replacement?
The Future of ~~
- deprecate and remove?
- make pluggable with simple replacement?
- leave as is with giant warning sign?
The Future of ~~
- deprecate and remove?
- make pluggable with simple replacement?
- leave as is with giant warning sign?
- and then what about given/when?
magic flags
utf8 strictness
(??{{ ... }})
The Secret Roadmap
slim core
multiple cores
fatal implicit close()
fatal implicit close()
{
fatal implicit close()
{ use autodie;
fatal implicit close()
{ use autodie; open my $fh, ‘>’, $filename;
fatal implicit close()
{ use autodie; open my $fh, ‘>’, $filename; $fh->print( ... );
fatal implicit close()
{ use autodie; open my $fh, ‘>’, $filename; $fh->print( ... );} # should die if close fails!
fatal implicit close()
better exceptions
my $x = try { $y / $z} catch { return $Infinity if $_->tagged(‘divbyzero’); die $_;}
better exceptions
MOP and pluggable OO
chars v. bytes
chars v. bytes
my $buf = $fh->readline;
chars v. bytes
my $buf = $fh->readline;
my $str = decode_utf8($buf);
chars v. bytes
my $buf = $fh->readline;
my $str = decode_utf8($buf);
STDOUT->print( $str );
chars v. bytes
my $buf = $fh->readline;
my $str = decode_utf8($buf);
STDOUT->print( $str );# fatal or autoencode
chars v. bytes
autoboxing
autoboxing
@array->push(@list);
autoboxing
@array->push(@list);
$arrayref->push(@list);
autoboxing
@array->push(@list);
$arrayref->push(@list);
for ($x->values) { ... }
autoboxing
Any questions?
Thank you!