Slide 1

Slide 1 text

Stevan Little Orlando Perl Workshop 2013 [email protected] Perl is not dead, it is a

Slide 2

Slide 2 text

This will be a circus of profanity, filled with half truths, baseless rumors and bald face lies, any resemblance to reality is purely coincidental I don’t usually rant, and I try to not swear in my talks,.. but this is going to be an exception, so if you are sensitive to swearing or ranting, please leave.

Slide 3

Slide 3 text

40 So, this year I will be turning 40 ...

Slide 4

Slide 4 text

The only issue with this is that I really don’t feel like I am 40, in fact I still feel like I am in my early 20s.

Slide 5

Slide 5 text

But the fact is, I am getting old, just ask my hairline

Slide 6

Slide 6 text

given my rapidly advancing age, I have been prone to thinking too much ...

Slide 7

Slide 7 text

I <3 PERL which brings me back to the topic of my talk ... Let me first say for the record that I totally asshat Perl

Slide 8

Slide 8 text

but I don’t love everything about Perl

Slide 9

Slide 9 text

When I program in other @languages

Slide 10

Slide 10 text

When I program in other @languages • which I try to do this as often as $work/$life allows

Slide 11

Slide 11 text

When I program in other @languages • which I try to do this as often as $work/$life allows • and you should too

Slide 12

Slide 12 text

When I program in other @languages • which I try to do this as often as $work/$life allows • and you should too • if you aren’t you are missing out

Slide 13

Slide 13 text

When I program in other @languages • which I try to do this as often as $work/$life allows • and you should too • if you aren’t you are missing out • and perhaps living in a bubble

Slide 14

Slide 14 text

When I program in other @languages • which I try to do this as often as $work/$life allows • and you should too • if you aren’t you are missing out • and perhaps living in a bubble • sorry, back to my point ...

Slide 15

Slide 15 text

I always find myself mapping everything back to Perl, no matter how insane the mapping

Slide 16

Slide 16 text

Perl I always find myself mapping everything back to Perl, no matter how insane the mapping

Slide 17

Slide 17 text

Syntax is only skin deep because, after all, ...

Slide 18

Slide 18 text

Syntax is only skin deep • If you prick us, do we not bleed? because, after all, ...

Slide 19

Slide 19 text

Syntax is only skin deep • If you prick us, do we not bleed? • If you tickle us, do we not laugh? because, after all, ...

Slide 20

Slide 20 text

Syntax is only skin deep • If you prick us, do we not bleed? • If you tickle us, do we not laugh? • If you poison us, do we not die? because, after all, ...

Slide 21

Slide 21 text

I Perl So everything I am about to say, I say out of love

Slide 22

Slide 22 text

So, perl is a dead end ... let me count the ways ...

Slide 23

Slide 23 text

first lets talk about the community

Slide 24

Slide 24 text

The Community first lets talk about the community

Slide 25

Slide 25 text

Echo Echo Echo Echo Echo The community is a massive ECHO chamber where nothing gets out, seriously, no one cares, they think we are all still writing Perl 4 style sysadmin scripts

Slide 26

Slide 26 text

Perl but even worse ... nothing gets in, we are a desert island, isolated, alone in the sea ... sure there are people like me with Moose and miyagawa with Plack and a few others who pilfer from other languages, but most people who spend time outside in another language, ... they dont come back! THEY HAVE ESCAPED!

Slide 27

Slide 27 text

and what is left is a spectacular array of freeks, geeks and weirdos. And yet even as we drive people away, we remain so proud of some of our acheivements ...

Slide 28

Slide 28 text

perl5-porters But it is not just the user community, it is also the development community. You see p5p, they have this simultaneous fear of change… and this love of bikeshedding. And I believe the combination of these two leads to a culture of obstructionism. Perl is proud not only of the back compat, but also our speed (in certain areas) and our flexibility (in certain areas), and there are groups and factions within p5p which care about one of the other of those things. They will fight for their reasons, which may be contrary to other groups. The result, bikeshedding. ... let it finish, ... let it finish ... and so bikeshedding is bad mkay. It leaves us with lots of old technical debt,.. speaking of technical debt ...

Slide 29

Slide 29 text

perl5-porters But it is not just the user community, it is also the development community. You see p5p, they have this simultaneous fear of change… and this love of bikeshedding. And I believe the combination of these two leads to a culture of obstructionism. Perl is proud not only of the back compat, but also our speed (in certain areas) and our flexibility (in certain areas), and there are groups and factions within p5p which care about one of the other of those things. They will fight for their reasons, which may be contrary to other groups. The result, bikeshedding. ... let it finish, ... let it finish ... and so bikeshedding is bad mkay. It leaves us with lots of old technical debt,.. speaking of technical debt ...

Slide 30

Slide 30 text

CGI Here is a perfect example of our isolation and refusal to accept the real world

Slide 31

Slide 31 text

Really?!?! really!?!?!? are we still caring about CGI?

Slide 32

Slide 32 text

CGI Fucking ^ CG - fucking - I ... other languages, they have moved on

Slide 33

Slide 33 text

Java

Slide 34

Slide 34 text

Java • Problem

Slide 35

Slide 35 text

Java • Problem • JVM is a memory hog

Slide 36

Slide 36 text

Java • Problem • JVM is a memory hog • JVM is slow to start up

Slide 37

Slide 37 text

Java • Problem • JVM is a memory hog • JVM is slow to start up • Solution

Slide 38

Slide 38 text

Java • Problem • JVM is a memory hog • JVM is slow to start up • Solution • Build expensive middleware products

Slide 39

Slide 39 text

Java • Problem • JVM is a memory hog • JVM is slow to start up • Solution • Build expensive middleware products • problem (mostly) solved

Slide 40

Slide 40 text

Ruby

Slide 41

Slide 41 text

Ruby • Problem

Slide 42

Slide 42 text

Ruby • Problem • the interpreter is slow

Slide 43

Slide 43 text

Ruby • Problem • the interpreter is slow • OMG, my RoR app takes forever to load

Slide 44

Slide 44 text

Ruby • Problem • the interpreter is slow • OMG, my RoR app takes forever to load • Solution

Slide 45

Slide 45 text

Ruby • Problem • the interpreter is slow • OMG, my RoR app takes forever to load • Solution • embrace the ancient art of FastCGI

Slide 46

Slide 46 text

Ruby • Problem • the interpreter is slow • OMG, my RoR app takes forever to load • Solution • embrace the ancient art of FastCGI • problem (mostly) solved

Slide 47

Slide 47 text

Node.JS

Slide 48

Slide 48 text

Node.JS • Problem

Slide 49

Slide 49 text

Node.JS • Problem • there is no problem

Slide 50

Slide 50 text

Node.JS • Problem • there is no problem • semicolons

Slide 51

Slide 51 text

Node.JS • Problem • there is no problem • semicolons • Solution

Slide 52

Slide 52 text

Node.JS • Problem • there is no problem • semicolons • Solution • there is no problem

Slide 53

Slide 53 text

Node.JS • Problem • there is no problem • semicolons • Solution • there is no problem • problem (mostly) solved

Slide 54

Slide 54 text

Perl

Slide 55

Slide 55 text

Perl • Problem

Slide 56

Slide 56 text

Perl • Problem • WE MUST SUPPORT CGI

Slide 57

Slide 57 text

Perl • Problem • WE MUST SUPPORT CGI • This is why we can’t have nice things!

Slide 58

Slide 58 text

Perl • Problem • WE MUST SUPPORT CGI • This is why we can’t have nice things! • Solution

Slide 59

Slide 59 text

Perl • Problem • WE MUST SUPPORT CGI • This is why we can’t have nice things! • Solution • move the fuck on!

Slide 60

Slide 60 text

Perl • Problem • WE MUST SUPPORT CGI • This is why we can’t have nice things! • Solution • move the fuck on! • really!

Slide 61

Slide 61 text

Perl • Problem • WE MUST SUPPORT CGI • This is why we can’t have nice things! • Solution • move the fuck on! • really! • no seriously, move on!

Slide 62

Slide 62 text

To: Perl From: PHP Subject: re: CGI on Cheap Web Host (was: LOLZ) Don’t worry brah, we got this covered!! - KTHNXBYE Only valid use for CGI is simple deployments on low cost servers, and know what, PHP has us beat by a mile here

Slide 63

Slide 63 text

Seriously People!

Slide 64

Slide 64 text

Aim Higher Perl is a great language, it can be used to build big systems. People are doing it with Ruby, with Python, shit there are a bunch of hipsters out there doing it in Node.JS (see also: meteor). Perl has a bad rap on this which in some ways is undeserved, but ... it is not entirely undeserved. Which brings me to my next set of slides ...

Slide 65

Slide 65 text

Threads Any serious “enterprise” scale application will need to do some kind of mulitprogramming. Unfortunately for us, the history of Perl and threading is pretty bad, iThreads were a complete mess.

Slide 66

Slide 66 text

Processes We got by with processes for a while, and since OS procs improved, we were okay

Slide 67

Slide 67 text

We are behind but at this point we are behind, really behind, ...

Slide 68

Slide 68 text

We are behind • really behind but at this point we are behind, really behind, ...

Slide 69

Slide 69 text

We are behind • really behind • really really behind but at this point we are behind, really behind, ...

Slide 70

Slide 70 text

We are behind • really behind • really really behind • really really rea behindlly but at this point we are behind, really behind, ...

Slide 71

Slide 71 text

We are behind • really behind • really really behind • really really rea behindlly • really rebehallyind rrealeally behirellay but at this point we are behind, really behind, ...

Slide 72

Slide 72 text

We are behind • really behind • really really behind • really really rea behindlly • really rebehallyind rrealeally behirellay • oh fuck it, if you don't get the joke but at this point we are behind, really behind, ...

Slide 73

Slide 73 text

We are behind • really behind • really really behind • really really rea behindlly • really rebehallyind rrealeally behirellay • oh fuck it, if you don't get the joke • then you've illustrated my point exactly! but at this point we are behind, really behind, ...

Slide 74

Slide 74 text

Don’t think I am forgetting about events, but the reality is that event based programming is not the same as true threading. POE was great, and in many ways still is, it was nominated the best module of 1999 , it is now 2012 (sorry Rocco, but I don’t think I am telling you anything you don’t already realize yourself).

Slide 75

Slide 75 text

Tonight I'm gonna party like it's 1999 Don’t think I am forgetting about events, but the reality is that event based programming is not the same as true threading. POE was great, and in many ways still is, it was nominated the best module of 1999 , it is now 2012 (sorry Rocco, but I don’t think I am telling you anything you don’t already realize yourself).

Slide 76

Slide 76 text

? So where do we go from here? Cause a lot of thinking and work has been going into this area of programming for a while now. We need to leapfrog ...

Slide 77

Slide 77 text

reflex Well, Rocco has a new project called Reflex. It is pretty cool, all about Functional Reactive programming, I highly recommend you check it out. That said, it is still a work in progress and while being built on POE, it does not yet have the stability of POE. And, it still isn’t true threads ... also, little known fact,.. that is a young Rocco

Slide 78

Slide 78 text

reflex Well, Rocco has a new project called Reflex. It is pretty cool, all about Functional Reactive programming, I highly recommend you check it out. That said, it is still a work in progress and while being built on POE, it does not yet have the stability of POE. And, it still isn’t true threads ... also, little known fact,.. that is a young Rocco

Slide 79

Slide 79 text

AnyEvent Then there is AnyEvent, *sigh*, AnyEvent. It is actually not a bad API (not great, but not bad), it doesn’t provide real threads, but with Coro is gets fairly close. But I can’t honestly recommend it, because as a project, it is so surrounded by controversy and bitterness that its stability is questionable at best.

Slide 80

Slide 80 text

AnyEvent  Then there is AnyEvent, *sigh*, AnyEvent. It is actually not a bad API (not great, but not bad), it doesn’t provide real threads, but with Coro is gets fairly close. But I can’t honestly recommend it, because as a project, it is so surrounded by controversy and bitterness that its stability is questionable at best.

Slide 81

Slide 81 text

Now there are some other modules out there, IO::Async is a popular choice of late, and there is a secret cabal working on what they called “the Plack of Event Programming”. But the reality of the situation is that we are not addressing a base need ... which is decent language level support for multiprogramming

Slide 82

Slide 82 text

What do we want? Now there are some other modules out there, IO::Async is a popular choice of late, and there is a secret cabal working on what they called “the Plack of Event Programming”. But the reality of the situation is that we are not addressing a base need ... which is decent language level support for multiprogramming

Slide 83

Slide 83 text

What do we want? Interpreter level threading! Now there are some other modules out there, IO::Async is a popular choice of late, and there is a secret cabal working on what they called “the Plack of Event Programming”. But the reality of the situation is that we are not addressing a base need ... which is decent language level support for multiprogramming

Slide 84

Slide 84 text

What do we want? Interpreter level threading! When do we want it? Now there are some other modules out there, IO::Async is a popular choice of late, and there is a secret cabal working on what they called “the Plack of Event Programming”. But the reality of the situation is that we are not addressing a base need ... which is decent language level support for multiprogramming

Slide 85

Slide 85 text

What do we want? Interpreter level threading! When do we want it? hmm, like 5-10 years ago actually, but at this point really I would take anything, what have you got? Now there are some other modules out there, IO::Async is a popular choice of late, and there is a secret cabal working on what they called “the Plack of Event Programming”. But the reality of the situation is that we are not addressing a base need ... which is decent language level support for multiprogramming

Slide 86

Slide 86 text

@_ speaking of being behind the times, lets talk about @_ and subroutine signatures, ... do you know any other language that doesn’t have proper subroutine signatures? Lets stop for a second and examine the 3 oldest programming languages out there.

Slide 87

Slide 87 text

FORTRAN FORTRAN has had them since at least the the late 60s (FORTRAN 66), hell they didn’t even have keyboards, but they had subroutine signatures.

Slide 88

Slide 88 text

COBOL COBOL, the people who gave us the year 19100 had parameters, they were clunky and awkward, but it had parameters.

Slide 89

Slide 89 text

Of course LISP had them, its lambdas all the way down.

Slide 90

Slide 90 text

PURL, Y U NO HAZ REAL SUBROUTINE SIGNATURES?!WTF

Slide 91

Slide 91 text

Oh yeah, backwards compatibility and speed concerns... ain’t that a bitch

Slide 92

Slide 92 text

OOP Now lets talk about OOP

Slide 93

Slide 93 text

Larry 5.000beta3 1994-Sep-?? Andy 5.000b3a 1994-Sep-18 5.000b3b 1994-Sep-22 5.000b3c 1994-Sep-23 5.000b3d 1994-Sep-27 5.000b3e 1994-Sep-28 5.000b3f 1994-Sep-30 5.000b3g 1994-Oct-04 Andy 5.000b3h 1994-Oct-07 Larry? 5.000gamma 1994-Oct-13? Larry 5.000 1994-Oct-17 Andy 5.000a 1994-Dec-19 5.000b 1995-Jan-18 5.000c 1995-Jan-18 lets take a quick look here at the history of OOP in Perl. Perl 5 is when we got objects, that was in Oct of 1994. That is almost almost 18 years ago ...

Slide 94

Slide 94 text

Now I want to put some perspective in place here, in 1994, Java was not yet in Alpha. It wasn’t until 1996 (little over one year later) that the JDK hit 1.0, and then not until 1997 (about 2.5 years) before the JDK 1.1 came out (which is largely considered the first usable one). Keep this in mind, I will come back to this ...

Slide 95

Slide 95 text

JDK Alpha and Beta (1995) Now I want to put some perspective in place here, in 1994, Java was not yet in Alpha. It wasn’t until 1996 (little over one year later) that the JDK hit 1.0, and then not until 1997 (about 2.5 years) before the JDK 1.1 came out (which is largely considered the first usable one). Keep this in mind, I will come back to this ...

Slide 96

Slide 96 text

JDK Alpha and Beta (1995) JDK 1.0 (January 23, 1996) Now I want to put some perspective in place here, in 1994, Java was not yet in Alpha. It wasn’t until 1996 (little over one year later) that the JDK hit 1.0, and then not until 1997 (about 2.5 years) before the JDK 1.1 came out (which is largely considered the first usable one). Keep this in mind, I will come back to this ...

Slide 97

Slide 97 text

JDK Alpha and Beta (1995) JDK 1.0 (January 23, 1996) JDK 1.1 (February 19, 1997) Now I want to put some perspective in place here, in 1994, Java was not yet in Alpha. It wasn’t until 1996 (little over one year later) that the JDK hit 1.0, and then not until 1997 (about 2.5 years) before the JDK 1.1 came out (which is largely considered the first usable one). Keep this in mind, I will come back to this ...

Slide 98

Slide 98 text

Perl OOP feature additions Now you would think, given that we were there early on, we would be innovating and evolving and really pushing the boundaries of OOP. So I have compiled a list of new OOP releated features that Perl has gotten since 1994.

Slide 99

Slide 99 text

Perl OOP feature additions • mro Now you would think, given that we were there early on, we would be innovating and evolving and really pushing the boundaries of OOP. So I have compiled a list of new OOP releated features that Perl has gotten since 1994.

Slide 100

Slide 100 text

Perl OOP feature additions • mro • fieldhashes Now you would think, given that we were there early on, we would be innovating and evolving and really pushing the boundaries of OOP. So I have compiled a list of new OOP releated features that Perl has gotten since 1994.

Slide 101

Slide 101 text

Java OOP feature additions • inner classes • reflection API • RMI (remote method invocation) • generics (type parameterization) • annotations • autoboxing • enumerations Now in contrast, here is Java. Keep in mind that Java is not even that dynamic a language in terms of new features and changes, its pretty slow to move, but here are some of the new features that came out since the initial release that specifically enhance the OOP experience. And keep in mind that many other releases built on and improved these features over the years as well.

Slide 102

Slide 102 text

Perl OOP on the CPAN Now, wait a second you say, we do our OOP innovation on the CPAN, ... yup, yup we do ...

Slide 103

Slide 103 text

Perl OOP on the CPAN Class::Accessor Class::MakeMethods base.pm Spiffy Class::HPLOO Class::Base Object::Tiny Object::Lexical EO Class::Accessor::Fast Class::Closure Class::Meta Class::Simple Class::Gomor Rose::Object Class::Builder Class::InsideOut Object::LocalVars Oak::Object OOP Object::InsideOut Class::Dot Class::NamedParms Myco Class::Structured Class::Classless parent.pm Eobj Class::Prototyped Class::Init Class::Maker Class::Object Fukurama::Class Class::Declare Class::Std Object::Declare Class::Struct Class::AutoClass Class::Root Badger Oryx Object::Prototype Basset Object::Accessor Class::Lego Class::Container Tangram OO::Closures Class::Trait MOP Object::MultiType SLOOPS Class::TOM Class::PObject Moose MooseX::Declare Mouse Moo Mo Moos Mousse Now, wait a second you say, we do our OOP innovation on the CPAN, ... yup, yup we do ...

Slide 104

Slide 104 text

p5-mop About a year ago we started a project to try and come up with a MOP for Perl 5 that could be added to the core. (The project is kinda on ice right now, if you want to know why, come buy me a beer and I will tell you.)

Slide 105

Slide 105 text

CPAN Next,... CPAN,... horray!

Slide 106

Slide 106 text

But we have CPAN!!

Slide 107

Slide 107 text

But we have CPAN!! • "Perl’s killer app"

Slide 108

Slide 108 text

But we have CPAN!! • "Perl’s killer app" • "Perl is not dead, just look at CPAN"

Slide 109

Slide 109 text

But we have CPAN!! • "Perl’s killer app" • "Perl is not dead, just look at CPAN" • "Python/Ruby may be cool, but they don't have CPAN"

Slide 110

Slide 110 text

But we have CPAN!! • "Perl’s killer app" • "Perl is not dead, just look at CPAN" • "Python/Ruby may be cool, but they don't have CPAN" • "I will give up Perl when they pry it from my cold dead CPAN prompt"

Slide 111

Slide 111 text

BULLSHIT I call bullshit, ... if you still believe that CPAN is why Perl is still relevant, then you have clearly not played around with other systems.

Slide 112

Slide 112 text

Don’t be fooled • Gems (Ruby) • PyPI (Python) • npm (Node.JS) • Nuget (.NET) • Hackage (Haskell) There are other nice systems out there, sure they might not have the number of modules (although how much of CPAN is pure shit, really), and they might not have the infrastructure (testers, etc), it is only a matter of time until they do. To put it simply, we’ve made plenty of mistakes, so they don’t have to.

Slide 113

Slide 113 text

So, is there no hope?

Slide 114

Slide 114 text

6 For the record, I think Perl 6 is the future of Perl.

Slide 115

Slide 115 text

but, what worries me is the hole that Perl 6 must climb out of

Slide 116

Slide 116 text

but, what worries me is the hole that Perl 6 must climb out of

Slide 117

Slide 117 text

5 but why do I think this? well, ... because of the Perl 5 core

Slide 118

Slide 118 text

Hey, how would you like to maintain a 17 year old pile of very complex C code written by multiple authors and which has to maintain bug for bug compatibility with any random 25 year old codebases? The old code base is just too insane and unwieldy. At this point there are maybe 2 people (Nicholas Clark and Dave Mitchell (perhaps Father C)) who know the whole thing, after that it another maybe 10-15 people who can hack certain portions of the code. But seriously ...

Slide 119

Slide 119 text

Hey, how would you like to maintain a 17 year old pile of very complex C code written by multiple authors and which has to maintain bug for bug compatibility with any random 25 year old codebases? Oh, and did i mention? You won't be getting paid! (at least not very much) The old code base is just too insane and unwieldy. At this point there are maybe 2 people (Nicholas Clark and Dave Mitchell (perhaps Father C)) who know the whole thing, after that it another maybe 10-15 people who can hack certain portions of the code. But seriously ...

Slide 120

Slide 120 text

WHO IN THEIR RIGHT FUCKING MIND WOULD WANT TO MAINTAIN THE PERL 5 CORE ?!!?

Slide 121

Slide 121 text

6? So is 6 our only hope?

Slide 122

Slide 122 text

I believe we are at a crossroads, in one direction, Perl 5 (death and irrelevance), the other is PHP/Ruby/Python/C#/Java/etc. (another job, but no more Perl culture/community), and the third way is Perl 6 (ready by christmas). And I am not alone ...

Slide 123

Slide 123 text

11:44 please could I be encouraging you to get people to fork perl 11:44 and demonstrate how easy it is to do it better :-) 11:45 although I have to assume that this isn't what your talk is about, and I shall have to wait and see 11:45 I, genuinely, would be very curious to see what happened to a(nother) fork of Perl 5 This was a discussion I had with Nicholas Clark earlier this afternoon after he found my talk abstract on the Perl Oasis site.

Slide 124

Slide 124 text

fork of perl

Slide 125

Slide 125 text

fork of perl

Slide 126

Slide 126 text

rewrite of perl

Slide 127

Slide 127 text

My Perl Wishlist Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 128

Slide 128 text

My Perl Wishlist • A more consistent syntax and sane grammar Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 129

Slide 129 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 130

Slide 130 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 131

Slide 131 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 132

Slide 132 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 133

Slide 133 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 134

Slide 134 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 135

Slide 135 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism • On a modern VM platform Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 136

Slide 136 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism • On a modern VM platform • JVM / CLR / LLVM / V8 Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 137

Slide 137 text

My Perl Wishlist • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism • On a modern VM platform • JVM / CLR / LLVM / V8 • cross language sharing Note that this is pretty much what Perl 6 is promising, the difference is that I want to do it for Perl 5. Perl 6 is a space age language from the future, I want (we as a community need) an upgrade for our existing language.

Slide 138

Slide 138 text

moe Which brings me to ... moe

Slide 139

Slide 139 text

WTF!?!?! Well, I originally was gonna call it Larry, ... after... well, Larry, ... but when I asked him if he felt that was okay, he was not so sure (I don’t blame him) and he suggested either Curly or maybe Moe. And since Moe sounds so much like Mo and Ingy released at least two modules that sound like Moose, I felt this was a pretty good trollback.

Slide 140

Slide 140 text

What (the fuck) is Moe? What is Moe you ask, let me tell you ... (sound familiar)

Slide 141

Slide 141 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar What is Moe you ask, let me tell you ... (sound familiar)

Slide 142

Slide 142 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST What is Moe you ask, let me tell you ... (sound familiar)

Slide 143

Slide 143 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support What is Moe you ask, let me tell you ... (sound familiar)

Slide 144

Slide 144 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime What is Moe you ask, let me tell you ... (sound familiar)

Slide 145

Slide 145 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) What is Moe you ask, let me tell you ... (sound familiar)

Slide 146

Slide 146 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core What is Moe you ask, let me tell you ... (sound familiar)

Slide 147

Slide 147 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism What is Moe you ask, let me tell you ... (sound familiar)

Slide 148

Slide 148 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism • On a modern VM platform What is Moe you ask, let me tell you ... (sound familiar)

Slide 149

Slide 149 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism • On a modern VM platform • JVM / CLR / LLVM / V8 What is Moe you ask, let me tell you ... (sound familiar)

Slide 150

Slide 150 text

What (the fuck) is Moe? • A more consistent syntax and sane grammar • with a real AST • and better tooling support • A less insane runtime • proper MOP (everything is an object) • slimmer core • easy (non-XS) extension mechanism • On a modern VM platform • JVM / CLR / LLVM / V8 • cross language sharing What is Moe you ask, let me tell you ... (sound familiar)

Slide 151

Slide 151 text

Wait, WTF?!!?!? yes, thats right, I want to prototype a new version of Perl 5

Slide 152

Slide 152 text

Perl 5 My first thought was to try and write it in Perl 5, but I don’t know if you’ve heard, its a dead language. Also, it doesn’t have all the features I want (see also: this talk)

Slide 153

Slide 153 text

Perl 5 My first thought was to try and write it in Perl 5, but I don’t know if you’ve heard, its a dead language. Also, it doesn’t have all the features I want (see also: this talk)

Slide 154

Slide 154 text

OCaml / SML My next thought was to use a nice FP language since they are so nice to write compilers in, like OCaml or Standard ML, but I think on some level that was a mistake that was made in the Pugs project. Haskell was just not accessible enough as a language.

Slide 155

Slide 155 text

OCaml / SML My next thought was to use a nice FP language since they are so nice to write compilers in, like OCaml or Standard ML, but I think on some level that was a mistake that was made in the Pugs project. Haskell was just not accessible enough as a language.

Slide 156

Slide 156 text

> node perl.js -e 'print join " " => "Hello", "World";' Then I thought, hey, Javascript is all the rage for runtimes ... but honestly, I wanted to write this in something strongly typed

Slide 157

Slide 157 text

> node perl.js -e 'print join " " => "Hello", "World";' throws JShirleyUnimpressedException at line 0 Then I thought, hey, Javascript is all the rage for runtimes ... but honestly, I wanted to write this in something strongly typed

Slide 158

Slide 158 text

Java Then I thought about Java, which has it’s pros and its cons. And I actually made some headway on a version in Java. It had a grammar in Antlr and a semi complete runtime, but ultimately I ran into a wall on this one ...

Slide 159

Slide 159 text

Java Yo Dawg, I heard you like dead languages so I implemented your dead language in a dead language so you can program a dead language while you program your dead language. Then I thought about Java, which has it’s pros and its cons. And I actually made some headway on a version in Java. It had a grammar in Antlr and a semi complete runtime, but ultimately I ran into a wall on this one ...

Slide 160

Slide 160 text

Scala : auuh fuck it, I am gonna write this shit in Scala : Java's type system is just a bitch : somewhere, a gphat just got its wings And you know what, Scala is actually pretty Perlish (in that it allows you to shoot off your entire leg if you are not careful).

Slide 161

Slide 161 text

Scala : auuh fuck it, I am gonna write this shit in Scala : Java's type system is just a bitch : somewhere, a gphat just got its wings And you know what, Scala is actually pretty Perlish (in that it allows you to shoot off your entire leg if you are not careful).

Slide 162

Slide 162 text

seriously?!?! so yeah, seems a little crazy, but hey, it just might work. If nothing more it might produce some kind of spec/test-suite/fire-under-our-collective-asses. And this is not something new,.. in fact, I’ve been talking about this with a number of people for a while now ...

Slide 163

Slide 163 text

I’ve been discussing something like this with Matt Trout for years ... though he might not remember (you know, short term memory loss and all)

Slide 164

Slide 164 text

And I know I’ve been talking with Yuval Kogman about this for even longer then that ...

Slide 165

Slide 165 text

Jesse Luehrs, while doing his best to be un-impressed, has (if given enough beers) been known to listen to my rant on the subject ...

Slide 166

Slide 166 text

And I know Shawn Moore, if given a pair of sunglasses and enough cider, would also agree with me ...

Slide 167

Slide 167 text

-Ofun and so, I want your help too, ... Moe is -Ofun, very much taking inspiration from Pugs, Moe is a place to experiment with what a Modern Perl 5 might look like.

Slide 168

Slide 168 text

http://github.com/stevan/moe and, if you go to ... wait one second (actually go push code),... you will see ...

Slide 169

Slide 169 text

Really?!???1?!

Slide 170

Slide 170 text

Really?!???1?! • Yes, seriously!

Slide 171

Slide 171 text

Really?!???1?! • Yes, seriously! • Come hack!!

Slide 172

Slide 172 text

Really?!???1?! • Yes, seriously! • Come hack!! • this is all about -OFun

Slide 173

Slide 173 text

Really?!???1?! • Yes, seriously! • Come hack!! • this is all about -OFun • Pugs Inspired

Slide 174

Slide 174 text

Really?!???1?! • Yes, seriously! • Come hack!! • this is all about -OFun • Pugs Inspired • Learn a useful skill (Scala)

Slide 175

Slide 175 text

Really?!???1?! • Yes, seriously! • Come hack!! • this is all about -OFun • Pugs Inspired • Learn a useful skill (Scala) • Twitter is hiring (I think, ask gphat)

Slide 176

Slide 176 text

Really?!???1?! • Yes, seriously! • Come hack!! • this is all about -OFun • Pugs Inspired • Learn a useful skill (Scala) • Twitter is hiring (I think, ask gphat) • Lets build the new foundation!

Slide 177

Slide 177 text

The End