Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Perl: Today, Tomorrow, and Christmas

Perl: Today, Tomorrow, and Christmas

Year after year, Perl continues its steady march towards greater and greater Perlishness. Ancient mistakes are slowly sloughed off and long dreamed-of features are added. If Perl is evolving, toward what? Is it just a random collection of mutations, as desperate Perl hackers struggle to remain fit enough to survive, or is there an intelligent design behind the way Perl is changing?

In this session, Ricardo Signes (rjbs), the Perl 5 project lead, will discuss the future of the Perl language, the guiding principles of its ongoing design, and the specific changes toward which the Perl 5 Porters are working. It will also describe the way Perl 5 development really happens, how that is changing, and what we might want it to become.

Ricardo Signes

June 20, 2012
Tweet

More Decks by Ricardo Signes

Other Decks in Programming

Transcript

  1. The Perl Dev That Was - between perl 5.10 and

    perl 5.12, we changed how the release cycle works
  2. 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 (!!)
  3. 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
  4. The Old Days - what merits a new dev release?

    - when is a new major release done?
  5. The Old Days - what merits a new dev release?

    - when is a new major release done? - what can get backported?
  6. 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?
  7. 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
  8. 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
  9. - worse, the pumpking is now busy doing - "cherrymaint"

    - release planning - release "paperwork"
  10. - worse, the pumpking is now busy doing - "cherrymaint"

    - release planning - release "paperwork" - cat herding (read: arguing with angries)
  11. - 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
  12. The Interregnum - the 5.10 crisis - the San Diego

    call - 5.11 and the release engineers corps
  13. The Interregnum - the 5.10 crisis - the San Diego

    call - 5.11 and the release engineers corps - any idiot can do it!
  14. New Blead blead 2011-06 5.15.0 2011-07 5.15.1 2011-08 5.15.2 2011-09

    5.15.3 2012-05 5.15.9 maint 2012-06 5.16.0 2012-06 5.17.0
  15. New Blead blead 2011-06 5.15.0 2011-07 5.15.1 2011-08 5.15.2 2011-09

    5.15.3 2012-05 5.15.9 maint 2012-06 5.16.0 2012-06 5.17.0 David G. Zefram Rik Stevan Abigail Zefram Rik
  16. New Maint blead maint 2012-06 5.16.0 2012-06 5.17.0 Zefram Rik

    2012-07 5.16.1 ? 2012-09 5.16.2 2013-?? 5.16.2 ? ?
  17. - almost all dev. burden is kept in blead -

    the rules about changing maint are strict Minimal Maint
  18. - almost all dev. burden is kept in blead -

    the rules about changing maint are strict - must be critical bug fix Minimal Maint
  19. - 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
  20. - 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
  21. Multimaint blead 2012-06 5.16.0 2012-06 5.17.0 Zefram Rik 2012-07 5.16.1

    ? 2012-09 5.16.2 2013-?? 5.16.2 ? ? maint-5.16 2011-05 5.14.0 Jesse maint-5.14
  22. New Cherrymaint blead maint 2012-05 5.16.0 2012-05 5.17.0 Zefram Rik

    2012-07 5.16.1 ? 2012-09 5.16.2 2013-?? 5.16.2 ? ?
  23. New Cherrymaint blead maint 2012-06 5.16.0 2012-06 5.17.0 Zefram Rik

    2012-07 5.16.1 ? 2012-09 5.16.2 2013-?? 5.16.2 ? ?
  24. What is the Pumpking? - the patch pumpkin - the

    person with the conch - the benevolent dictator for now
  25. What is the Pumpking? - the patch pumpkin - the

    person with the conch - the benevolent dictator for now - was: the one who could do everything
  26. 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
  27. Jesse and Rik - we get along well - we

    both want what is good for Perl 5
  28. Jesse and Rik - we get along well - we

    both want what is good for Perl 5 - but we see the future very differently
  29. 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
  30. The Pumpking's Job - ...is not to make sure perl

    gets better. - It's to make sure perl doesn't get worse.
  31. 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.
  32. 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.
  33. 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.
  34. Mailing List Judo - how do you get your change

    applied? - by avoiding controversy
  35. Mailing List Judo - how do you get your change

    applied? - by avoiding controversy - ...at least on the list
  36. Syntax - perl programmers obsess over it - even when

    the semantics are the real problem
  37. Syntax - perl programmers obsess over it - even when

    the semantics are the real problem - ?->
  38. Syntax - perl programmers obsess over it - even when

    the semantics are the real problem - ?-> - letting a syntax discussion start can be fatal
  39. Changing Anything - some argue that change itself is bad

    - "someone might be relying on this error"
  40. Other Lunacy - "Your patch is nice, but why don't

    we do fifteen other things along with it?"
  41. 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."
  42. ...and in reality... - These observations are true. - So

    the advice to "lobby in private" seems promising.
  43. ...and in reality... - These observations are true. - So

    the advice to "lobby in private" seems promising. - Everybody wants to avoid a long p5p thread
  44. ...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.
  45. U+1F4A9 - In most cases, everything I've just said is

    true. - …and also crap. - p5p has, in part, a culture of fear
  46. 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
  47. Improving p5p - if discussion on p5p was not only

    reliably civil… - …but also technically on point…
  48. Improving p5p - if discussion on p5p was not only

    reliably civil… - …but also technically on point… - contributors would want to engage in it
  49. Improving p5p - we would still try to avoid controversy

    - …but by reaching consensus, not with tricks
  50. Improving p5p - we would still try to avoid controversy

    - …but by reaching consensus, not with tricks - so the pumpking never needs to decide!
  51. The Pumpking's Job - What will I do with all

    that free time? - I will try to improve the list's culture.
  52. The Pumpking's Job - What will I do with all

    that free time? - I will try to improve the list's culture. - My promise:
  53. 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.
  54. The Final Decision - sometimes, controversy is unavoidable - there

    is no consensus on whether a new feature is a good idea
  55. 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?
  56. CPAN, not perl - can the feature be implemented on

    CPAN? - if not, why not? can that be fixed?
  57. 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?
  58. feature - can the feature be lexically hidden behind feature.pm?

    - (remember, not every feature needs to be in a version bundle)
  59. feature - can the feature be lexically hidden behind feature.pm?

    - (remember, not every feature needs to be in a version bundle) - use experimental
  60. use experimental ‘bind_op’; my $y = “Foo bar”; my $x

    := $y; := Feature “experimental_bind_op” is not supported by Perl 5.22.0
  61. Strategy of Last Resort - the change is controversial -

    and can't be prototyped on CPAN - and can or can't go into feature.pm
  62. 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?
  63. The Final Decision - is the feature small and specific?

    - is the feature generic and unsurprising?
  64. The Final Decision - is the feature small and specific?

    - is the feature generic and unsurprising? - is the feature teachable?
  65. The Final Decision - is the feature small and specific?

    - is the feature generic and unsurprising? - is the feature teachable? - what's the maintenance burden?
  66. 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?
  67. Perlishness - I know it when I see it. -

    "gets us further along our road map"
  68. The Road Map - I don't make one. - I

    don't see the point. I don't implement perl.
  69. The Road Map - I don't make one. - I

    don't see the point. I don't implement perl. - Submitted patches are the roads
  70. Intelligent Design - always the best way to build something

    - assuming sufficient intelligence - and omnipotence
  71. Intelligent Design - always the best way to build something

    - assuming sufficient intelligence - and omnipotence - i.e., great if you're God
  72. Evolution - seems to have worked pretty well - except

    for the billions of required deaths
  73. Evolution - seems to have worked pretty well - except

    for the billions of required deaths - and millions of years
  74. Evolution - seems to have worked pretty well - except

    for the billions of required deaths - and millions of years - and all those extinct species
  75. 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
  76. Intelligent Evolution - mutations are designed, not random - then

    further mutated in captivity - and possibly slaughtered before reaching the wild
  77. Oops - so, Rik had to decide something - and

    he made the wrong choice - and everybody can tell
  78. 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
  79. Experimental? - was it marked experimental? - if so, we

    can just remove the thing - ...in theory
  80. Experimental? - was it marked experimental? - if so, we

    can just remove the thing - ...in theory
  81. Experimental? - was it marked experimental? - if so, we

    can just remove the thing - ...in theory - if not, we'll do a deprecation
  82. 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
  83. 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
  84. 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
  85. The Eternal Bug - some behaviors can't be detected and

    made fatal practically - arybase feature: we could remove it
  86. The Eternal Bug - some behaviors can't be detected and

    made fatal practically - arybase feature: we could remove it - The Unicode Bug...
  87. my $x = acquire_input; $x .= “Á”; # <-- that’s

    an A-acute print $x =~ /á/i ? ‘match’ : ‘no match’; The Unicode Bug
  88. $input = <STDIN>; # ricardo # RICARDO # Ricardo $str

    = “\u\L$input”; # Ricardo casemod escapes
  89. $let = “\L\N{LATIN CAPITAL LETTER A}”; # $let is now

    ‘a’ $let =~ /\L\N{LATIN CAPITAL LETTER A}/; casemod escapes
  90. $let = “\L\N{LATIN CAPITAL LETTER A}”; # $let is now

    ‘a’ $let =~ /\L\N{LATIN CAPITAL LETTER A}/; # fails!! casemod escapes
  91. $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
  92. $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
  93. $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
  94. $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
  95. The Future of ~~ - deprecate and remove? - make

    pluggable with simple replacement?
  96. The Future of ~~ - deprecate and remove? - make

    pluggable with simple replacement? - leave as is with giant warning sign?
  97. The Future of ~~ - deprecate and remove? - make

    pluggable with simple replacement? - leave as is with giant warning sign? - and then what about given/when?
  98. { use autodie; open my $fh, ‘>’, $filename; $fh->print( ...

    ); } # should die if close fails! fatal implicit close()
  99. my $x = try { $y / $z } catch

    { return $Infinity if $_->tagged(‘divbyzero’); die $_; } better exceptions