oscon 2011 - perl 5.16 and beyond
TRANSCRIPT
Perl 5.16 and Beyond
Friday, July 29, 11
Jesse Vincent
Friday, July 29, 11
Pumpking
Friday, July 29, 11
Former Perl 6Project 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 file?
Friday, July 29, 11
Are you aCPAN 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 takesless 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 arenew 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
prolific 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 littlebit 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 definitely doesn’t apply tothe 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 thisin a while:
Friday, July 29, 11
Perl is Dead!
Friday, July 29, 11
What I’ve beenhearing 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 aflame-proof suit.
Friday, July 29, 11
If I’d talked about my vision 2 years ago...
Friday, July 29, 11
You would havelaughed 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 willmake 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 havesane 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 anescape hatch
Friday, July 29, 11
We don’t have one
Friday, July 29, 11
We needRule 2
Friday, July 29, 11
Changes to syntax or semantics break
existing code
Friday, July 29, 11
Why?
Friday, July 29, 11
They conflict with existing syntax
Friday, July 29, 11
They change the meaning of existing
semantics
Friday, July 29, 11
They conflict 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 thebest 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 fixed in an “optional”
or lexical way
Friday, July 29, 11
This is going to behard 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 significant
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 upon 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 flavors 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 upthe 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 managea big language
Friday, July 29, 11
It’s harder to learna big language
Friday, July 29, 11
It’s harder to fix 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 aboutdecoupling 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’tbe able to tell
Friday, July 29, 11
In the future we might fix 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 codewon’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 smartmatchfrom Perl 6
Friday, July 29, 11
It’s very clever
Friday, July 29, 11
It’s nearlyimpossibleto 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 himselfat the problem
Friday, July 29, 11
He extracted smartmatch intoan 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 anamazingtest 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-fix 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 crazyin 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-defined 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 onother 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 [email protected]@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 ourprecociouskid 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