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

Perl is not Dead, it is a Dead End

Perl is not Dead, it is a Dead End

This is a talk I just gave at Perl Oasis 2013 about the future of Perl 5.

Stevan Little

January 12, 2013
Tweet

More Decks by Stevan Little

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. but I don’t love everything about Perl

    View full-size slide

  9. When I program in
    other @languages

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  20. 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, ...

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. first lets talk about the community

    View full-size slide

  24. The Community
    first lets talk about the community

    View full-size slide

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

    View full-size slide

  26. 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!

    View full-size slide


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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  33. Java
    • Problem

    View full-size slide

  34. Java
    • Problem
    • JVM is a memory hog

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  39. Ruby
    • Problem

    View full-size slide

  40. Ruby
    • Problem
    • the interpreter is slow

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  45. Node.JS
    • Problem

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  51. Perl
    • Problem

    View full-size slide

  52. Perl
    • Problem
    • WE MUST SUPPORT CGI

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  57. 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!

    View full-size slide

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

    View full-size slide

  59. Seriously
    People!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  67. 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, ...

    View full-size slide

  68. 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, ...

    View full-size slide

  69. 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, ...

    View full-size slide

  70. 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).

    View full-size slide

  71. 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).

    View full-size slide

  72. ?
    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 ...

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  82. @_
    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.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  88. OOP
    Now lets talk about OOP

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  100. 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.)

    View full-size slide

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

    View full-size slide

  102. But we have CPAN!!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  105. 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"

    View full-size slide

  106. 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"

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  109. So, is there no hope?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  117. 6?
    So is 6 our only hope?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  120. fork of perl

    View full-size slide

  121. fork of perl

    View full-size slide

  122. rewrite of perl

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  134. moe
    Which brings me to ... moe

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  138. 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)

    View full-size slide

  139. 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)

    View full-size slide

  140. 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)

    View full-size slide

  141. 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)

    View full-size slide

  142. 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)

    View full-size slide

  143. 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)

    View full-size slide

  144. 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)

    View full-size slide

  145. 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)

    View full-size slide

  146. 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)

    View full-size slide

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

    View full-size slide

  148. 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)

    View full-size slide

  149. 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)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  156. 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).

    View full-size slide

  157. 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).

    View full-size slide

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

    View full-size slide

  159. 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)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  165. Really?!???1?!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  171. 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)

    View full-size slide

  172. 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!

    View full-size slide