perl 5: today, tomorrow, and christmas

Post on 10-May-2015

1.104 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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!

top related