ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Perl 5.16 and Beyond



Friday, July 29, 11
Jesse Vincent



Friday, July 29, 11
Pumpking



Friday, July 29, 11
Former Perl 6
                      Project Manager


Friday, July 29, 11
What's a Pumpking?



Friday, July 29, 11
BDFL



Friday, July 29, 11
BDFL



Friday, July 29, 11
BDFL



Friday, July 29, 11
I make decisions



Friday, July 29, 11
I¡¯m a manager



Friday, July 29, 11
I don¡¯t do ¡°real work¡±



Friday, July 29, 11
So, who makes Perl?



Friday, July 29, 11
Many awesome people



Friday, July 29, 11
I just stand around
                        looking pretty...


Friday, July 29, 11
...while other people do
                       awesome stuff


Friday, July 29, 11
Is your name in Perl¡¯s
                         AUTHORS ?le?


Friday, July 29, 11
Are you a
                      CPAN author?


Friday, July 29, 11
You rock
Friday, July 29, 11
You make Perl



Friday, July 29, 11
The Release Process



Friday, July 29, 11
Releases in the last
                       12-or-so months:


Friday, July 29, 11
5.12.2



Friday, July 29, 11
5.12.3



Friday, July 29, 11
5.12.4



Friday, July 29, 11
5.13.2



Friday, July 29, 11
5.13.3



Friday, July 29, 11
5.13.4



Friday, July 29, 11
5.13.5



Friday, July 29, 11
5.13.6



Friday, July 29, 11
5.13.7



Friday, July 29, 11
5.13.8



Friday, July 29, 11
5.13.9



Friday, July 29, 11
5.13.10



Friday, July 29, 11
5.13.11



Friday, July 29, 11
5.14.0



Friday, July 29, 11
5.14.1



Friday, July 29, 11
5.15.0



Friday, July 29, 11
5.15.1



Friday, July 29, 11
Perl 5.14.1 is the
                       current release
                          of Perl 5


Friday, July 29, 11
It came out 6ish
                          weeks ago


Friday, July 29, 11
As did Perl 5.12.4



Friday, July 29, 11
As did Perl 5.15.0



Friday, July 29, 11
It used to take us 3
                       weeks to prepare
                            a release


Friday, July 29, 11
And we made the
                      Pumpking do it


Friday, July 29, 11
Now it takes
                      less than a day


Friday, July 29, 11
The 43 step process is
                         documented


Friday, July 29, 11
Releases are still a
                      chore if you do them
                          every month


Friday, July 29, 11
Now we have rotating
                       release engineers


Friday, July 29, 11
Most of them are
                      new committers


Friday, July 29, 11
Nice side effect:
                       release engineers
                      need commit bits


Friday, July 29, 11
Since the move to git,
                      we¡¯ve nearly doubled
                        our committer list


Friday, July 29, 11
The world hasn¡¯t ended



Friday, July 29, 11
Some of those release
                      engineers have become
                       proli?c contributors


Friday, July 29, 11
I just make decisions



Friday, July 29, 11
I try to get them right



Friday, July 29, 11
Sometimes
                      they¡¯re wrong


Friday, July 29, 11
I have a little
                       bit of cover


Friday, July 29, 11
Rule 1



Friday, July 29, 11
Larry is always right



Friday, July 29, 11
Rule 2



Friday, July 29, 11
Larry is allowed to
                       change his mind


Friday, July 29, 11
I¡¯m not Larry



Friday, July 29, 11
I¡¯m nowhere
                      near as clever


Friday, July 29, 11
My shirts are nowhere
                          near as loud


Friday, July 29, 11
At YAPC::NA, Larry
                       said that the time of
                      hero-pumpkings is over


Friday, July 29, 11
D



Friday, July 29, 11
Dictator



Friday, July 29, 11
Delegator



Friday, July 29, 11
Documenter



Friday, July 29, 11
Thankfully, Larry¡¯s rules
                       set me up to succeed


Friday, July 29, 11
Rule 1 de?nitely
                      doesn¡¯t apply to
                      the Perl 5 runtime


Friday, July 29, 11
However



Friday, July 29, 11
The core needs more
                       support for Rule 2


Friday, July 29, 11
I haven¡¯t heard this
                           in a while:


Friday, July 29, 11
Perl is Dead!



Friday, July 29, 11
What I¡¯ve been
                      hearing lately:


Friday, July 29, 11
Where are we going?



Friday, July 29, 11
It¡¯s changing too fast.
                       Can you slow down?


Friday, July 29, 11
You made regexes
                        crazier?$#@!?


Friday, July 29, 11
smartmatch isn¡¯t
                      named correctly...


Friday, July 29, 11
...can we rename it to
                       psychoticmatch?


Friday, July 29, 11
The future



Friday, July 29, 11
I¡¯ve been accused of
                      lacking a vision for Perl


Friday, July 29, 11
What I lack is a
                      ?ame-proof suit.


Friday, July 29, 11
If I¡¯d talked about my
                       vision 2 years ago...


Friday, July 29, 11
You would have
                       laughed at me


Friday, July 29, 11
...now that we can do
                           do releases...


Friday, July 29, 11
A Vision



Friday, July 29, 11
New versions of Perl
                      shouldn¡¯t break your
                        existing software


Friday, July 29, 11
Old syntax and
                      semantics can¡¯t stop
                      Perl 5 from evolving


Friday, July 29, 11
We need to be able to
                          make mistakes
                       as we rebuild Perl 5


Friday, July 29, 11
We will
                         make mistakes
                      as we rebuild Perl 5


Friday, July 29, 11
*coughsmartmatchcough*



Friday, July 29, 11
We have
                         made mistakes
                      as we¡¯ve rebuilt Perl


Friday, July 29, 11
We need to be able to
                      recover from mistakes
                        as we rebuild Perl


Friday, July 29, 11
The runtime footprint
                      is too big and must be
                           slimmed down


Friday, July 29, 11
Perl should have
                      sane defaults


Friday, July 29, 11
It should be possible
                      to build more of Perl
                             in Perl


Friday, July 29, 11
Perl should run
                      everywhere


Friday, July 29, 11
Not just on every kind
                           of hardware


Friday, July 29, 11
or every OS



Friday, July 29, 11
Every VM



Friday, July 29, 11
Every Browser



Friday, July 29, 11
Every Phone



Friday, July 29, 11
How do we get there?



Friday, July 29, 11
New versions of Perl
                        shouldn¡¯t break
                       existing software


Friday, July 29, 11
Old syntax and semantics
               must not stop Perl 5
                   from evolving


Friday, July 29, 11
When your code runs,
                       you have no idea
                      what semantics it¡¯ll see


Friday, July 29, 11
You need to jump
                      through defensive
                           hoops.


Friday, July 29, 11
Lots of defensive hoops



Friday, July 29, 11
use v5.14;



Friday, July 29, 11
¡°Can I have a Perl that¡¯s
                         5.14 or newer?¡±


Friday, July 29, 11
¡°Anything newer than
                      5.14.0 would be great!¡±


Friday, July 29, 11
¡°Ok. I¡¯m 5.30.
                       Have fun!¡±


Friday, July 29, 11
That¡¯s not useful



Friday, July 29, 11
It needs to change



Friday, July 29, 11
Declare the version of
                       Perl 5 you expect


Friday, July 29, 11
use v5.16;



Friday, July 29, 11
¡°I want a Perl that
                       works like 5.16¡±


Friday, July 29, 11
The runtime should
                      honor that request


Friday, July 29, 11
Perl should give you
                      semantics as close as
                      possible to what you
                             request

Friday, July 29, 11
New features
                      should not work
                      under ¡®use v5.$older;¡¯


Friday, July 29, 11
It¡¯s critical that we be
                           able to evolve


Friday, July 29, 11
We need an
                      escape hatch


Friday, July 29, 11
We don¡¯t have one



Friday, July 29, 11
We need
                      Rule 2


Friday, July 29, 11
Changes to syntax or
                        semantics break
                         existing code


Friday, July 29, 11
Why?



Friday, July 29, 11
They con?ict with
                       existing syntax


Friday, July 29, 11
They change the
                      meaning of existing
                          semantics


Friday, July 29, 11
They con?ict with
                       things users do


Friday, July 29, 11
What do we do?



Friday, July 29, 11
If you declare an old
                       version, you get old
                      syntax and semantics


Friday, July 29, 11
...at least to the
                      best of our abilities


Friday, July 29, 11
Perfection isn¡¯t possible



Friday, July 29, 11
We can get far closer
                       than we do now


Friday, July 29, 11
Breaking existing code
                      should be a last resort


Friday, July 29, 11
We will break
                   backward compatibility
                  in limited circumstances


Friday, July 29, 11
Some craziness can¡¯t be
                       ?xed in an ¡°optional¡±
                          or lexical way


Friday, July 29, 11
This is going to be
                        hard work


Friday, July 29, 11
A lot of hard work



Friday, July 29, 11
It¡¯s not impossible



Friday, July 29, 11
I have proof



Friday, July 29, 11
Deprecation



Friday, July 29, 11
Our current
                      deprecation cycle
                         is 1 year


Friday, July 29, 11
¡°It warns in 5.16.0¡±



Friday, July 29, 11
¡°It¡¯s gone in 5.18.0¡±



Friday, July 29, 11
That¡¯s turning out
                       to be too short


Friday, July 29, 11
Very few operating
                      systems release that
                           frequently


Friday, July 29, 11
¡°Declare by default¡±
                       means we can make
                      some changes sooner


Friday, July 29, 11
If it still works in old
             code, we can change it
            with no deprecation cycle


Friday, July 29, 11
Some old misfeatures
                      need to come out lest
                       they block signi?cant
                          improvements

Friday, July 29, 11
If we can¡¯t emulate the
                         old feature for old
                      code, we need a longer
                         deprecation cycle

Friday, July 29, 11
¡°It dies in code that
                      declares ¡®use v5.16¡¯¡±


Friday, July 29, 11
¡°It warns in older
                        code on 5.16.0¡±


Friday, July 29, 11
¡°It still warns in old
                         code on 5.18.0¡±


Friday, July 29, 11
¡°It¡¯s gone in 5.20.0¡±



Friday, July 29, 11
Old Modules



Friday, July 29, 11
We haven¡¯t just been
                      deprecating and yanking
                        broken old features


Friday, July 29, 11
We¡¯ve been doing the
                      same to old modules


Friday, July 29, 11
They all end up
                        on CPAN


Friday, July 29, 11
This has started to hurt
                 users who wrote code
                with ¡°no non-core deps¡±


Friday, July 29, 11
We need to make it
                      easier to ship two
                       ?avors of Perl 5


Friday, July 29, 11
Hotel California



Friday, July 29, 11
aka Traditional Perl



Friday, July 29, 11
The Times,They
                      Are A-Changin¡¯


Friday, July 29, 11
aka Bootstrappable Perl



Friday, July 29, 11
There¡¯s work going on
                       to make this easier


Friday, July 29, 11
Cleaning up
                      the language


Friday, July 29, 11
The runtime footprint
                      is too big and must be
                           slimmed down


Friday, July 29, 11
One of the points of
                        doing this is to
                       clean up the core


Friday, July 29, 11
How does this
                      clean up the core?


Friday, July 29, 11
Perl is a big language



Friday, July 29, 11
There are bigger
                         languages


Friday, July 29, 11
It's harder to manage
                           a big language


Friday, July 29, 11
It¡¯s harder to learn
                          a big language


Friday, July 29, 11
It¡¯s harder to ?x bugs in
                            a big language


Friday, July 29, 11
We¡¯re ok, but not
                      amazing at core
                       language dev


Friday, July 29, 11
As a community, we¡¯re
                      awesome at modules


Friday, July 29, 11
How do we make Perl
                       a smaller language?


Friday, July 29, 11
It¡¯s possible to load
                      modules that inject
                           new builtins


Friday, July 29, 11
It¡¯s possible to load
                      modules that inject
                            old builtins


Friday, July 29, 11
Time to start...



Friday, July 29, 11
...refactoring



Friday, July 29, 11
Lots of stuff in perl isn't
                         necessarily part of
                        Perl 5 the Language


Friday, July 29, 11
This stuff is part of
                      Perl 5 the chainsaw


Friday, July 29, 11
I like our chainsaw



Friday, July 29, 11
I¡¯m not talking about
                       deprecating this stuff


Friday, July 29, 11
...just about
                      decoupling it


Friday, July 29, 11
SysV IPC functions



Friday, July 29, 11
Socket IO functions



Friday, July 29, 11
Unix user & group
                      information functions


Friday, July 29, 11
Unix network
                      information functions


Friday, July 29, 11
Process and process
                        group functions


Friday, July 29, 11
Formats



Friday, July 29, 11
smartmatch



Friday, July 29, 11
...and probably a bunch
                            of other stuff


Friday, July 29, 11
That bit about ¡°forcing
                      a version declaration¡±


Friday, July 29, 11
If you don¡¯t, you¡¯ll get
                      whatever was in 5.14.


Friday, July 29, 11
The implementation of
                  SysV might be a module


Friday, July 29, 11
As a developer writing
                          code in Perl 5,
                      you won¡¯t need to care


Friday, July 29, 11
..and shouldn¡¯t
                       be able to tell


Friday, July 29, 11
In the future we might
                      ?x a bug or two in the
                         modularized code


Friday, July 29, 11
You could take the
                      update without having
                      to upgrade all of Perl 5


Friday, July 29, 11
Someday we might
                      remove things from the
                         default runtime


Friday, July 29, 11
Every feature we
                      externalize reclaims
                       precious memory


Friday, July 29, 11
Every feature we
                      externalize reclaims
                        precious sanity


Friday, July 29, 11
That just means you¡¯ll
                       need to declare you
                      want an older feature


Friday, July 29, 11
...but only if you ask for
                                v5.16


Friday, July 29, 11
...but only if you ask for
                                v5.18


Friday, July 29, 11
...but only if you ask for
                                v5.20


Friday, July 29, 11
Existing code
                       won¡¯t break


Friday, July 29, 11
There are many, many
                      unanswered questions


Friday, July 29, 11
But it¡¯s doable



Friday, July 29, 11
I have proof!



Friday, July 29, 11
Case study:
                      Smartmatch


Friday, July 29, 11
After YAPC::NA rjbs
                      (and others) raised the
                        issue of smartmatch


Friday, July 29, 11
Perl has a history of
                       theft from other
                            languages


Friday, July 29, 11
Perl has a history of
                      borrowing from other
                             languages


Friday, July 29, 11
We stole
                      smartmatch
                      from Perl 6


Friday, July 29, 11
It¡¯s very clever



Friday, July 29, 11
It¡¯s nearly
                      impossible
                       to explain


Friday, July 29, 11
It¡¯s nearly
                        impossible
                      to understand


Friday, July 29, 11
RJBS (the previous
                       speaker) proposed a
                      saner, much less clever,
                           smart match

Friday, July 29, 11
I don¡¯t want to break
                      existing code that uses
                            smartmatch


Friday, July 29, 11
Jesse Luehrs (DOY)
                      was sitting in the back
                         of my YAPC talk


Friday, July 29, 11
He...



Friday, July 29, 11
...threw himself
                      at the problem


Friday, July 29, 11
He extracted
                      smartmatch into
                       an XS module


Friday, July 29, 11
He reimplemented it
                      entirely in pure perl


Friday, July 29, 11
It¡¯s slower, but it¡¯s
                      understandable and
                             hackable


Friday, July 29, 11
He implemented
                      Ricardo¡¯s saner smart
                      match as an alternative


Friday, July 29, 11
I¡¯m hoping that 5.16
                          ships DOY¡¯s
                          smartmatch
                        implementations

Friday, July 29, 11
'use v5.16;' should load
                        the new one in your
                               scope


Friday, July 29, 11
'use v5.14;' should load
                        the old one in your
                               scope


Friday, July 29, 11
no ¡°use v5.x;¡± line
                      should load the old one
                          in your scope.


Friday, July 29, 11
We need a module
                      hierarchy for such
                        things in core


Friday, July 29, 11
The Test Suite



Friday, July 29, 11
(Keeping us honest)



Friday, July 29, 11
We have an
                      amazing
                       test suite


Friday, July 29, 11
Over time, we need to
                       tease apart (at least)
                          3 kinds of tests


Friday, July 29, 11
Language tests



Friday, July 29, 11
Bug-?x tests



Friday, July 29, 11
Implementation tests



Friday, July 29, 11
To hold us to the
                      compatibility promises
                       we make, we need a
                        new test harness

Friday, July 29, 11
¡°Run the test suites we
                       shipped with previous
                            releases...¡±


Friday, July 29, 11
...all of em



Friday, July 29, 11
We've been moving
                          pretty fast


Friday, July 29, 11
We¡¯ve done some
                          things I...


Friday, July 29, 11
...wouldn¡¯t do again



Friday, July 29, 11
I¡¯m going to be a lot
                      more skeptical about
                          new features


Friday, July 29, 11
...at least ones that
                      don¡¯t make it easier to
                       have fewer features


Friday, July 29, 11
We should have sane
                           defaults


Friday, July 29, 11
There¡¯s lots of crazy
                            in Perl 5


Friday, July 29, 11
Syntactic Crazy



Friday, July 29, 11
Semantic Crazy



Friday, July 29, 11
Internal Crazy



Friday, July 29, 11
Module Crazy



Friday, July 29, 11
It may be time to
                      consider doing away
                       with some of that


Friday, July 29, 11
But ONLY if you
                      declare ¡°use v5.16¡±


Friday, July 29, 11
But ONLY if you
                      declare ¡°use v5.18¡±


Friday, July 29, 11
But ONLY if you
                      declare ¡°use v5.20¡±


Friday, July 29, 11
We¡¯ve started down
                           this road


Friday, July 29, 11
¡°use v5.12¡± includes
                          ¡°use strict;¡±


Friday, July 29, 11
Where do we go next?



Friday, July 29, 11
warnings on by default



Friday, July 29, 11
autodie-esque defaults



Friday, July 29, 11
autodie does good for
                            your code


Friday, July 29, 11
using deep, scary evil



Friday, July 29, 11
I will not show
                        you the evil


Friday, July 29, 11
Ask Paul Fenwick



Friday, July 29, 11
The guy with the
                           accent


Friday, July 29, 11
In the hat



Friday, July 29, 11
We should throw
                      exceptions rather than
                       just return on failure


Friday, July 29, 11
I don¡¯t want us to
                      bikeshed an exception
                            hierarchy


Friday, July 29, 11
Heck, I¡¯d be happy if we
                      started with dying with
                        well-de?ned strings


Friday, July 29, 11
(I¡¯d love an exception hierarchy)




Friday, July 29, 11
2-arg open()
                      gone by default


Friday, July 29, 11
1-arg open()
                      gone by default?


Friday, July 29, 11
Latin-1 autopromote
                          off by default


Friday, July 29, 11
utf-8 everything
                         by default


Friday, July 29, 11
A clean, simple
                      meta-model with basic
                       classes and methods


Friday, July 29, 11
No indirect object syntax
                             by default


Friday, July 29, 11
But only if you declare
                           ¡°use v5.16¡±


Friday, July 29, 11
But only if you declare
                           ¡°use v5.18¡±


Friday, July 29, 11
But only if you declare
                           ¡°use v5.20¡±


Friday, July 29, 11
So, Why?



Friday, July 29, 11
Perl needs to be
                      cleaner, simpler and
                      easier to work with


Friday, July 29, 11
For users...



Friday, July 29, 11
...and for implementers



Friday, July 29, 11
Perl should run
                      everywhere


Friday, July 29, 11
Why isn¡¯t Perl 5 on
                       other Runtimes?


Friday, July 29, 11
¡°There¡¯s no spec¡±



Friday, July 29, 11
That didn¡¯t stop Ruby



Friday, July 29, 11
¡°Only Perl 5 can
                        parse Perl 5¡±


Friday, July 29, 11
That didn't stop PPI



Friday, July 29, 11
To survive, a desperate
                      hacker needs to be able
                       to reimplement Perl 5


Friday, July 29, 11
Thanks!



Friday, July 29, 11
How do we make this
                        happen faster?


Friday, July 29, 11
Perl 5 Maint Fund



Friday, July 29, 11
perlfoundation.org



Friday, July 29, 11
Questions/Tomatoes?
                      http://blog.fsck.com
                      jesse@perl.org
                      @obra



Friday, July 29, 11
About the name



Friday, July 29, 11
Our language is called
                             Perl 5


Friday, July 29, 11
Perl 6 is our
                       precocious
                        kid sister


Friday, July 29, 11
I¡¯m happy to talk about
                         renaming Perl 5...


Friday, July 29, 11
...if you write me a
                second implementation
               that passes the test suite


Friday, July 29, 11

More Related Content

OSCON 2011 - Perl 5.16 and beyond