OSCON 2011 - Perl 5.16 and beyond

Post on 12-May-2015

9.900 views 0 download

Tags:

Transcript of OSCON 2011 - Perl 5.16 and beyond

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 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 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