1. 48
    1. 16

      Raku is actually Perl 6.

      Well, they specifically changed the name to make it not actually Perl 6 anymore :) Maybe “Raku used to be called Perl 6” would be more accurate.

      and maybe to get rid of the negative associations with Perl.

      I don’t think the broad Perl community, including Wall, had negative associations with Perl :) If anything, I’d say the opposite, some people wanted to get rid of negative associations with Perl 6.

      Perl 6 development took ages to the initial release (2000-2015) and by that time Python and Ruby already ate all of its cake. Anyone interested in upgrading their Perl 5 codebase was migrating to those two, instead of Perl 6. Many developers realized that Perl 6 is just not going to gain traction and wanted to continue developing Perl 5. One of the biggest reasons for the name change was to not sabotage their efforts - https://github.com/Raku/problem-solving/issues/81#issue-478241764

      The whole Python 2 -> 3 ordeal probably also played a role in their thinking.

      I tried to find out a little about why Perl was so popular once, but isn’t anymore.

      One could argue that it’s precisely Perl 6 / Raku that killed it. Instead of gradually improving Perl 5, they focused all their efforts on an entirely new language and in the meantime people moved on to Python and Ruby.

      So, Perl is dead, right?

      Not entirely though. Perl 5 had enough momentum that it comes preinstalled with almost every UNIX-like system even today. Looking at GitHub, it’s probably more actively developed than Rakudo. It’s module repository CPAN claims to contain over 200k modules while Raku modules shows around 2k.

      These days I wouldn’t start a new project in neither Perl 5 nor Raku, but if I had to choose, I’d probably bet on Perl, because of its maturity and wider adoption.

      Edit: it’s also worth noting that some time ago they announced Perl 7, based on, and backwards compatible with Perl 5. For now they seem to be extremely careful about when it happens.

      1. 2

        One could argue that it’s precisely Perl 6 / Raku that killed it. Instead of gradually improving Perl 5, they focused all their efforts on an entirely new language and in the meantime people moved on to Python and Ruby.

        “They” didn’t though. That’s where a lot of the shouting came from: Perl 5 development never stopped. The groups of people working on p5 and p6/raku have always been about 90-95% disjoint. There was a bit of a lull in Perl 5 development around 2002-2006 which probably did have a bit to do with p6, but continuous gradual improvement and modernization has been exactly the strategy since 5.10, and there’s been a new release with performance improvements, language additions, and deprecations every single year since 2010, which is not a bad cadence at all, considering.

        What really pissed certain people off was the fact that that effort existed at all! “Hey, why are you wasting your time improving that old thing instead of coming over here and helping us?” If you followed Python 2->3 it’s a very similar story except with a different outcome. Any maintenance effort, and especially any feature improvement, on the old version was seen as a distraction from the development of the new one — and, far worse, it was seen as encouraging people not to migrate. In Python land, the 3 crowd won and the guys with the “2.8” shirts got spat on and publicly denounced in standards-ese. In Perl land… well, arguably no one won. Perl 6 didn’t take over the way Python 3 did, but it succeeded in sowing enough doubt to contribute to Perl 5’s decline in adoption.

        The name change was one of those compromises that made no one happy (least of all Larry), but it served as an acknowledgment of that parallel development. People used to ask “oh, you’re using Perl 5? When are you going to upgrade to 6?” The Raku name makes clear that that’s in the same class of question as “oh, you’re using Lisp? When are you going to upgrade to Scheme?”

      2. 1

        So, Perl is dead, right?

        Not entirely though. Perl 5 had enough momentum that it comes preinstalled with almost every UNIX-like system even today.

        This is a big one, and I’ve wanted to learn Perl 5 for that exact reason. I work with a bunch of really stripped down embedded Linux systems, and the only scripting language runtimes on those systems are usually Busybox’s shell … and Perl 5.

        1. 1

          May I suggest bookmarking this for when you come back to that ambition? It’s a talk I gave about dependency-bundling tools and some other relevant techniques for people in exactly the place you are.

      3. 1

        I just read that entire GitHub issue discussion and it was a wild ride. Strongly reminiscent of a medium-sized Wikipedia internal discussion. The 2019 vintage means it’s long enough ago to feel distinct in terms of tone, but recent enough to feel familiar. Thanks for the link.

        Now I feel tempted to go and try out one or both of Perl 5 and Raku.

    2. 11

      Raku is fun, but ultimately, all of its interesting features fall into one of three categories:

      1. Hopelessly ad-hoc

      2. Stolen from common lisp

      3. Grammars

      That said, there has been a lot of neat work done on optimising dispatch in the implementation, which I very much respect—common lisp by contrast has escape hatches to functionality with weaker guarantees, so implementations have not bothered to optimise the fancy ones. Raku tends to use expressive forms of dispatch more uniformly, and the relaxations it does have are mostly more principled.

      1. 9

        In Raku’s defense, the interesting features of most languages are, in the end, stolen from Common Lisp or Smalltalk. :-P

        1. 5

          Joking aside, I remember being upset when C# started getting some Smalltalk-inspired features around v3 or so, because “they’re stealing those features”! Nowadays I’m like “oh sweet this function even just steals Common Lisp’s function order, that’s one less thing to worry about”.

        2. 2

          I am certainly not upset with the language for including sensible features—to the contrary. I only do not see the point of using it when common lisp is a better, more coherent, more interactible language with better development environments and more implementations and libraries. The parser generator is very good, but was developed before the recent surge of interest in incrementality and good error-handing, so it has no answer to the former and poor answer to the latter; and in any case, I try to do as little parsing as I possibly can.

          1. 2

            So… What is the big drawback of common lisp? If everyone else is playing catch up to common lisp, why are not everyone already using it, instead of putting effort into reinventing the wheel?

            1. 1
              1. Social factors

              2. Ecosystem

              3. Implementation quality (was flaky in the 90s—fine now, and better than some, but not as good as java)

              4. Not ‘everyone’. Some languages are trying to do something else

              1. 1

                Ok, yes not meaning to come off as snarky. Been interested in Lisp for too long time, because many seem to really like it, but also wondered why it is not seen more. Time to get going, I guess.

      2. 1

        If you’re interested in ways of optimising multiple dispatch then you might like to take a look at how Julia does it.

        1. 2

          Julia takes a somewhat heavy-handed approach, which makes sense given its goals (numerics at the expense of all else), but it is not particularly relevant to my interests (numerics and also everything else).

          1. 2

            I think the techniques used for optimising the dispatch system aren’t too tightly coupled with the rest of the design, but whatever :)

    3. 10

      I like [String Literal Lists] so much, that I wonder how this is the first time I ever encountered it.

      These languages had similar features before Raku:

      • Perl has qw syntax. The “qw” stands for “quoted words”.
        • qw(foo bar baz) is equivalent to ("foo", "bar", "baz")
      • Ruby has %w and %W string-array literals.
        • %w[foo bar baz] is equivalent to ["foo", "bar", "baz"]
        • %W[foo #{"bar" * 3} baz] is equivalent to ["foo", "barbarbar", "baz"]
      1. 5

        Elixir also has ~w(unquoted words) I believe

        I forgot to highlight in the latest Oils release notes that we changed the syntax to

        var x = :| unquoted words |

        There is a rough analogy to :symbol which is like an unquoted/interned string in Ruby, Elixir, Clojure.

        It used to be %( unquoted words ) in Oils, but I felt that was too similar to

        var x = $(command sub > out)
        var x = @(split command sub | wc -l)

        Those forms have full commands in them, not just words.

        The old syntax is still valid, and I will remove it at some point …

        1. 1

          Yep, it does. I came here to mention elixir ~w(…)

          It also has my favorite multiple dispatch system and can be used with no imports.

      2. 1

        which did make me wonder how much of a try they gave ruby before dismissing it as too python-like

        1. 1

          Honestly, not too much. Not enough to discover ~w. I’m sorry, Ruby

          1. 2

            yeah, not to say raku isn’t a great language too, but ruby has a significant perl/bash influence (in fact in the early perl6 days one of the perl regulars used to joke about a “ruby-o-meter” that kept increasing as perl6 added rubyish features)

    4. 7

      I think my favorite thing is how raku is secretly listy in a lot of areas,

      Loops that do not want to produce a value for an iteration use Slips, rather than empty Lists to do so, as do if statements that do not run their blocks.

      this allows cool things like, if you want to deal with weird paging in an api:

      my %params = %(
          :after(cursor) if cursor,

      Or allow maps to produce zero, 1, or more, results:

      @arr.map: { $_ if $_ %% 2 }  # Even numbers
      @arr.map: { |($_ * 2, $_ * 3) } # Multiple results


      It reminds me of the ease of doing something like cat * | jq '.id' in shell, painfully non-trivial in Python or the such to have such a pattern

    5. 4

      The mutliple dispatch example is showing single dispatch. Pretty much any language that supports OOP supports. Multiple dispatch is when the method to call is determined by the type of all of its arguments. Which I know Raku supports, but the snippet is not showing

      1. 3

        Hmmm, your right, I guess I’ll fix that. Thanks for catching it.

    6. 2

      I thought the post could be about the Cool Class in Raku :D

    7. 2

      I always wondered what would happen when a discussion lasts for decades, with a fraction giving up on it and the other saying “it’s not over yet”.

      Fascinating to read a fresh opinion on Perl 6 in 2023.

      But I digress. Nothing of what the article points out will move the needle the slightest. It already did, 30 years ago. It was revolutionary and crazy practical. We have since realized that as an early attempt at a quick scripting language, it was useful, but messy and intricate. That is why it lost popularity to other languages.

      It was great. It had its time. Some idioms are still useful for quick oneliners and such. But that’s that. Let it go.

      1. 5

        Directly linking the 23 years ago Raku (much less for the current popular implementation, Rakudo) to the 35 years ago Perl is tempting, but while they share concepts, they are completely distinct code-bases (Raku not being a “usable” program at all, just a specification / test suite). Its not a Python 2/3 situation or the such.

        Raku never lost popularity, it still hasn’t gained it.

      2. 3

        That is why it lost popularity to other languages.

        And that’s why JavaScript is the most popular language in the world, right? Because it’s so clean and simple and has so few footguns?

        The truth is that the rise and fall of languages has almost nothing to do with the stuff that PLT folks care about or even the stuff that average developers care about. It’s driven by management fads and marketing accidents, not “quality”. Perl as a language still has an awful lot to recommend it. Done right it lets you turn out excellent code quickly. It’s one of a very few languages that let you combine the sort of boilerplate-free “code that does exactly what it says” crystalline beauty of FP with raw ability to Just Get Shit Done. But that doesn’t matter in the real world.

        At all times you’re either on the ascendant or you’re in decline, and when you’re in decline, you’re in decline. Less people hiring for it means less people using it, less people using it means less libraries for the latest nifty protocols and techniques and devices, which means less influx of new years, which means people start porting away (because “developers are impossible to find”), which means less hiring, which means… you get the point. New and unknown languages succeed by getting hitched to a hype train. But mature languages’ faults are too widely known to sustain that kind of irrational exuberance. All they can do is try to cast some light on some of their good features that got forgotten in the rush towards the new and shiny, and hope that someone is interested enough to steal them for the N+2nd or N+3rd generation.

        1. 2

          I agree to a great extent with what you say about hypes. I also hate hypes. Whenever I read the word “framework”, my bullshit alarm goes off. But, it sounds to me that you are perhaps still holding on to the very old Perl 6 discussions. I mean no offense here.

          And that’s why JavaScript is the most popular language in the world, right? Because it’s so clean and simple and has so few footguns?

          JavaScript works out of the box on the browser. It is the only language with this enormous privilege. Coffeescript and typescript have been talked about to be included too, although it never materialized. Had one of them been included, JavaScript popularity would quickly eclipse, just like Perls did.

      3. 2

        This is the surprisingly cogent post that I was expecting others to have already made, but didn’t.

        Perl had its place, like PHP did, like BASIC did. It deserves a spot in the computer history museum, and in various memes that only old people would understand, but it doesn’t deserve a spot in a modern work environment.

        Edit: I assumed that at least some of the gushing comments were actually written unironically, but maybe my sarcasm meter is broken, and there are just really witty people here.

    8. 1

      Raku is an evolutionary fork of Perl, right?

      1. 1

        Yeah, more details in the article. ^^

    9. [Comment removed by author]