Wow, Perl 6 [video]
youtube.com
youtube.com
Never would've thought my slides I used for a presentation to 20-something people would make it to front page of HN...
You can watch the actual presentation here: https://www.youtube.com/watch?v=paa3niF72Nw I also wrote down the answers for questions that came up during the presentation here: http://blogs.perl.org/users/zoffix_znet/2016/03/wow-perl-6-t... (I now updated to include these in the slides too)
And to respond to some commenters, yes, some features (like the shrug operator) were presented in a humorous fashion. No one's advocating you actually make your code look like an orgy of emoticons. I didn't use PPT for the slides, because I like the freedom of needing only a browser to display the slides. They weren't really meant for public consumption, thus the UI is not entirely obvious.
I'm unsure why the person who posted this on HN posted only the slides and not the recording or the blog post. But I have no control over that.
And if anyone has any more questions, you can join us on IRC at irc://irc.freenode.net/#perl6
Cheers.
What did you use to make the presentation? Custom HTML/JS?
I understand that the video was not meant for public consumption, but I'll still say this, as a general note: It's way more easier to follow when the questions are at the end, and the presentation is not interrupted. I see many speakers saying "Hey, I'd like this to be an interactive thing, interrupt me if you have a question", and although this is nice for offline events, for a talk that'll be published, a more old-school interaction makes the things easier for the guy who watches the video.
Perl code has many things to discover, and the way you assemble larger things relies on unique features of these smaller things. While in the end both approaches have you building a larger thing out of smaller things, the former approach is more likely to be built out of all of the same small thing, while the latter is more likely to be built out of a bunch of different small things. I think that's why some people can find Perl code to be "dense" and others find it "expressive".
I think Perl 6 was built with a much more consistent philosophy behind it than Perl 5, so this analogy breaks down a bit. But the user experience, the "Perlishness" of it, still remains. To the extent that people pick sides in language wars, I hope this analogy can help people appreciate the other side.
Since I only do this less then full time my brain can't hold everything in it for Perl or similar languages. I can sit down with a Lisp and just work it out with the parts I know and have to look up things far less.
Perl 6 may have a theoretically more consistent philosophy behind it than Perl 5, but as that philosophy would likely lead to even more complicated code than Perl 5 already does, I would live in fear of anyone at work adopting it for code I then have to maintain. Except that there doesn't seem to be any chance of that, precisely because everyone else around me feels the same way.
I'm not a lover of Scala, in fact I tried it and gave up on it because I didn't like its ratio of cleverness to simplicity (again, a personal opinion). But that said, and also being reasonably familiar with Perl, I would say that Scala is still much cleaner, more consistent, less idiosyncratic than Perl. I've seen some beautiful, expressive, masterful Perl code but I find that Perl really doesn't encourage me to write that way, while Scala works a bit harder to nudge you to write elegant code.
But isn't Perl 6 a full superset of Perl 5? That would mean the full clutter is still underneath, and some people will continue to code Perl 5 in Perl 6.
Nope, it's a new language but with a similar look & feel. Interoperability is currently supported through embedding a Perl5 interpreter.
That depends on what you mean.
Perl 6 is carefully designed to be able to smoothly use other programming languages and their compilers and/or libraries. The most advanced implementation of this concept is (re)use of Perl 5:
use Inline::Perl5;
use DBI:from<Perl5>;
my $dbh = DBI.connect('dbi:Pg:database=test');
# etc.
The first line happens to be valid Perl 5 syntax as well as valid Perl 6. But the next two are Perl 6 code that calls Perl 5 code behind the scenes. In principle those who write such Perl 6 code don't need to know any Perl 5 whatsoever. (In practice current API docs assume use of Perl 5 so there's that.)The same is true for Python code etc. (though the sugar isn't yet as sweet):
use Inline::Python;
my $py = Inline::Python.new();
$py.run('print "hello world"');
So Perl 6 is either a superset of Perl 5, Pythons, Java, Lua, etc. or it's not a superset of any of them, just good at working with them, depending on how you look at things.That said, may I observe that the hype seems to have died down for Scala. Everyone I personally know who was into it has dropped it. None of them would have shipped anything into production. Anecdotal, sure, but that's all we ever really have. My guess is that its own complexity is indeed strangling it. Only time will tell, but I'm not sure Scala is really that great an argument.
And, also, for consistency, yes, absolutely, I wouldn't want to suddenly be handed a Scala system to professionally maintain either.
> There are some people who appreciate games that are very abstract and with
> simple rules from which complex behavior emerges, such as a game like Go.
I love Go, but I despise perl. Perl is not built on "very abstract and simple rules. For instance, this code is quite hard to reason about: 1: my @to-infinity-and-beyond = 0, 2 … ∞;
2: say @to-infinity-and-beyond[1008];
# OUTPUT:
# 2016
This is self-indulgent mucking around. An inference procedure which goes from "0, 2 … ∞" to "the even-nonnegative integers" is bound to lead to unpleasant and hard-to-debug surprises.> These people tend to be drawn towards programming languages that are built out of small pieces with a consistent philosophy from the ground up, such as lisp or Haskell.
If you like go and dislike perl its to his point.
A TLDR (because apparently); People who like games that are complex because of complex rules like perl. People who like complex games with simple rules dislike it.
(Though I'd probably use an asterisk instead of the infinity symbol)
It's a bit like saying some people only like minimalist writers and some people only like maximalist writers. But a discerning reader is interested in quality over the style. That is, they recognize that there is good maximalism and good minimalism, and appreciate both.
http://modernperlbooks.com/books/modern_perl_2016/01-perl-ph...
Many (but not all) of the questionable decisions in Perl come from its origins in Unix philosophy and the desire to provide a comfortable migration path for system administrators away from command-line tools such as awk and shell. Where Perl's struggled in recent years to borrow features from Rakudo, it's because those features assume a different underlying philosophy.
I understand the value of coding in other texts, but I still get a little squicked out seeing the characters for pi, and union, etc in code. I know they have ascii equivalents, but its not saving a keystroke, exactly. Though, it does remind me of some joker Swift posts where the identifiers were all emoji's. I'd keep interns away from it for now.
The built-in grammar parser looks great! C-lib integration looks promising. Multi-methods look nice. Operator overloads look ... safe-ish-er than C++. Simpler profiling. Perl5 module + other language in-lining looks great and terrible. "Whatever" wildcards don't quite seem like full pattern-matching, but better than $_ or endless shift loops.
Overall, seems pretty good! If I can just drop it in for my "perl -lne 'm|($regex)|g&&print$1'" command-line use I might swap it out sooner than later.
But, I find it very easy to type all that fancy stuff with XCompose sequences. My keyboard also has a bunch of media keys I never use, so it's probably possible to map those into the unicode ops.
Perl5 has raw text processing power, but Perl6 kicks that into overdrive with a much cleaner language (clean and powerful OO with a MOP), with cool goodies from a dozen other languages. I think this may be the first decent contender for the 100 year language if it becomes production worthy.
(I wish the fashion part of our industry would disappear and people would use the correct tools appropriately. OOP still has plenty of valid cases in my opinion).
objects are just syntax sugar for a closure or a set of curried functions. As such they are useful. It's inheritance that gave OOP a bad name.
But, while Larry Wall agreed in the sense he put emphasis on features such as roles (cf Haskell type classes) he has also said that there are some important scenarios in which inheritance (and very occasionally multiple inheritance) make coding a solution to a problem more straightforward where use of composition makes it less so, so standard Perl 6 supports both composition (eg roles) and (multiple) inheritance and the compiler (which is written in Perl 6) uses one or the other based on whichever is deemed to work best.
Curious what about Perl 5 OOP makes it not proper. Is is just the required constructor boilerplate, like bless()? Or is it the lack of enforced private methods?
Neither seems like a showstopper to me...honestly curious.
Having said that I got my first job using Perl after learning Java at university. It actually helped me understand OOP and inheritance a lot better because it was so transparent compared to Java's OOP which seemed more of a black box - it worked but I never really knew how.
God I sure hope not. (Only if it's a lot easier to maintain than Perl 5 maybe...)
I have bad feelings about Perl after having to parse and cleanup a bunch of abominably written multi-thousand line pages full of regular expressions and all manner of cleverness. I mean, I actually hated Perl so badly I believed it was the worst invention ever. Then I saw a well written project and was easily able to understand and felt slightly less negative. So it's not entirely the language, but to this day seeing 'Perl' brings negative emotions to the surface. Something like PTSD I guess. It will probably take 100 years for that to go away and me to willingly look at anything called 'Perl'.
a) Many of people writing the code were sysadmins that just needed to get a job done, and didn't have much real development experience.
b) Perl was also easy to get access to in cheap shared hosting environments, so it attracted other people without some development discipline.
c) Perl4 did not have objects, and scoping was limited to local(). Thus, lots of spaghetti code and global vars.
However, none of that would have gotten exposed to developers if their teams had decent interviewing techniques, or code review, etc.
All that to say that Perl 6 shouldn't have the same propensity for bad code to end up in a real project. Any more than any other language that is. I can certainly misuse regexps, lambas and other features and write some hard to maintain Python.
1: Global variables everywhere. Every function call did not pass arguments, but instead they assigned data to global variables in the immediately preceding lines, called the function, and then used those global variables. Copious use of SQL where every query was saved in a variable called $stmtA, $stmtB or $stmtC, depending on how many levels of sub-querying needed to be done in a loop. Obscure variable names in general. Zero comments. No use of modules, everything in one flat text file (for 5-10 or more flat text files), no code reuse. PHP used in the same project, to the same standard (one large sprawling multi-thousand line PHP file). This was an open source project, and to this day I wonder if possibly it was all a purposeful design decision, so they could charge for development requests.
It harks back to Paul Graham's essay where he started off on Arclisp as a 100 year language and better designed lisp. Other priorities came up and it didn't really go anywhere besides maybe being used for this website. Hopefully Perl6 doesn't suffer a similar fate.
http://iaindunning.com/blog/julia-unicode.html (note: 2 years old)
We have been doing that for AGES. Not just in languages like APL, but even in Javascript, Go and tons more...
It does require some mechanism to input Unicode if that's what you want to do but that wil be true for any language -- it's nothing to do with Perl 6.
On another note: I find it quite fascinating that Perl 6 is implemented in Perl 6, that would in theory allow you to implement Perl for .NET or the JVM and retain plenty of Perl as a result if I'm not mistaken.
Edit: fixed up my post
Rakudo already has a JVM backend! It's not used as much as the MoarVM backend, mostly because the startup time of the JVM is horrible, but it's there. A Javascript backend is being worked on.
I assume the JVM would allow you to use Java libraries as well?
That's a wrong way to describe it.
There were some important performance related changes to the spec prior to the Christmas release. The focus was on keeping MoarVM backend up-to-date, that's my understanding.
Perl6 test suite is massive, you can't "break it with a patch", a commit like that would've been reverted.
I haven't heard of anything in PROD yet (there is a QUORA question on this), but I know there are several Perl shops that would jump on this when it's fully ready. You can use it today for most things (assuming hard performance isn't needed). When the optimizations and JIT are complete, you'll have a very fast OO language with optional types. My intended use cases are for pretty much anything that doesn't need a GUI like a .NET desktop app. I have a LOT of data at work and look forward to using the Grammar functionality to build useful and beautiful parsing code.
I believe Perl6 is bootstrapped by a subsection of Perl6 called NQP (not quite perl)which is written in C.
He seemed a bit unhappy with some of the internal mess of the development, but that is not exactly uncommon for big projects.
They stopped running reliably several years ago and I stopped caring.
Note especially this passage:
...the primary deliverable ... is the language specification, known as “roast” (Repository Of All Spec Tests) ...
In other words it's roast, the digital acceptance test for any candidate Perl 6 compiler, that is arguably the only thing that was officially declared, and hence the only thing that could be construed to have been officially declared any particular thing such as "stable".Continuing:
... This Rakudo release targets those tests (over 120 thousand of them), and passes them all on at least some architectures when the moon is in the right phase.
Rakudo is a Perl 6 compiler (so that one can try out the announced language).Note the moon phase comment. While obviously not literal and arguably misleading it is a brilliantly concise and precise explanation of the degree to which Rakudo, the leading Perl 6 compiler, should or could be characterized as officially "stable".
http://rakudo.org/2015/11/28/announce-rakudo-star-release-20...
which describes a beta release. It should probably have the date of 2016-02-03 and link to
http://rakudo.org/2016/02/03/announce-rakudo-star-release-20...
which describes that release as "a useful and usable production distribution of Perl 6."
I recommend a look at a couple of videos to get started too:
https://www.youtube.com/watch?v=S0OGsFmPW2M https://www.youtube.com/watch?v=JpqnNCx7wVY
I was planning to assist but had something else to do.
Brian D. Foy has a WordPress site up for it.
There is a perl6 intro website as well that is awesome.
Texas symbols are two or more ascii characters that replace a single Unicode symbol.
say "Code took {now - INIT now} seconds to run";
# Code took 0.01111143 seconds to run
`INIT now` ... aka COMEFROM.Compare to the rough Perl 5 equiv, for versions of Perl 5 before say existed:
sleep 2;
print "Code took @{[time() - $then]} seconds to run\n";
INIT{$then=time();}[1] http://www.lispworks.com/documentation/HyperSpec/Body/s_ld_t...
It is not exactly selling it ;-)
I'm still undecided on whether Perl 6 takes the TIMTOWTDI motto too far. There seem to be multiple purely cosmetic ways to do something (sigil-less variables), and that's less of a "more tha none way to do it" thing and more of a "more than one way to make it look" thing (colon method call syntax), and I'm not sure how that will work in practice.
Then again, there are lots of things that I think are unequivocally much better, such as method signatures (which you can approximate in Perl 5 with Kavorka[1]) and OOP (which Moops[2] in Perl 5 seems to do a good job of bundling the various Moose family modules together for, with Kavorka).
Learning Perl was a great excercise, after that I could learn JavaScript really easy not only cause they are so similar but cause Perl and its culture teaches you about programming. It is a milestone.
If you cannot read your own code, maybe the issue was your level at the time? no offense intended.
Source?
My experience is about 100 to 1 the opposite. I know tons of programmers that don't know math notation. I know few people at all, even non programmers, that know math notation.
I know 8yrs old that code. They don't know any math.
I understand "sigma notation" and related mathematical symbolism, and can work my way through understanding a formula if I really need to. But given a choice, I let my eyes glaze over and pretend I didn't see the formula. I'm one of those programmers, and I think typically so, who consider math a distant relative whom I give a friendly wave from a distance but not one I like to corner for an intense heart-to-heart.
Increased symbolism front-loads learning to increase expressiveness later. If we've already front-loaded that learning to a small or large part on a large chunk of the population, that can greatly change the equation for how much it slows initial understanding of the code, and thus it's usefulness. As I mentioned elsewhere, we generally use '+' and '-' in programming languages because everyone already knows what they mean. We could just as easily use add(a,b) and subtract(a,b), and in some languages we do so, but in general there's so little friction in using the most basic math notation it's accepted without qualification as a better way to do it.
Every high school graduate that has had a trigonometry course, every college student that has taken any calculus. Tens of millions in the US alone.
> I know 8yrs old that code. They don't know any math.
Sure they do. They know + and -. We use those for the same reason. We could use add(3,4) but we don't (usually).
sub prefix:<∑> { [+] @_ }
would you have liked it more? (I personally find it more "perlish")As you point out, the suggested `∑` is just sugar (for some value of 'sugar') for `[+]`. In Perl 5, one could easily alias subroutines using, for example, `* a = \&b` (space inserted to fool Markdown). Is there any analogue in Perl 6, so that, say, `* ∑ = \&[+]` or its modern variant would automatically inherit the parsing semantics without having to go through the cumbersome process of declaring a new sub just to pass its arguments unchanged to an old one?
It won't take too long before people start checking it out and there are some good real-world use case benchmarks.
It seems like the guiding principle was to create a language that gives you incredible freedom in terms of how you do things. While that is great in theory, in practice mentally modelling that expressiveness reduces the amount of attention I can devote to the specific problems being addressed by the code. Maybe if I put a lot of time in that would change; I don't see a big potential payout though, so I'm not going to bother.
With that being said, grammars look well designed. If all I was doing was parsing/transforming text, I would definitely consider using Perl 6.
Another thing I like about perl is a lot of the standard library functions take an array of inputs, or a single value; and return an array or a single value.
With $1 and so on for each match.
When all you have are regeces, there's a tendency to model a parser as a finite automaton where transitions are labeled with regex matches, but given how frequently programmers deal with extracting information from text, I think there's a solid argument for grammars or parser combinators being readily available in a language. Really, any text processing task more sophisticated than grep calls for tools more sophisticated than regular expressions.
In defense of Perl 6, you could say more or less the same thing about Perl 5 and every Perl that came before it. Perl has always been optimized for cleverness, in the sense that it's much more interested in making it easier for people to write code than it is in making it easier for anyone (even the person who wrote it) to read it.
Java is getting increasingly painful to look at (even without operator overloading), and most of our work is still Java (due to the need to write so much of it???)
As far as heritage, I think Perl's love of magic and concise operators is influenced more by the awk/sed/sh trio that it originally borrowed a lot of its syntax from, rather than by C++.
C++? Ever looked at some "advanced" Haskell code?
Apart from that, there isn't really much problem with Haskell's operators. There are only few in standard library addressing applicative and monad, and the de facto standard Lens library.
Yes, at the end they all are token and one has to learn them. But I miss more exact words for some value of exact. Going a little bit into the ObjC school of naming would do Perl some good.
I'm not super happy about some of the other words chosen (start, race, etc), but I think my/our has a nice symmetry to it.
Which begs my question: If you already have more exact words (”private“, ”shared“) for these concept, why not use them? Yes, ”my“ and “our” have these connotation too, but it works only for humans and their relations.
I guess that's my disquiet with some of these names: Perl mixes the realms of machines and humans. See also `bless` and `say`. And the anthropomorphization of abstract concepts only creates a slightly uncanny valley in my mind.
Maybe because english isn't my mother tongue. Perhaps native speaker is more ok with this mixture of concepts?
It works on items to denote their relationship to people. That Perl expects the code to be written by a person and uses terms people are used to for dealing with ownership doesn't seem weird to me. That you see it as weird and other words as more appropriate I think is more likely related to what words you learned first for those concepts. I don't see them as inherently superior in any way.
> I guess that's my disquiet with some of these names: Perl mixes the realms of machines and humans.
Given that it's creator is a linguist, and there's some very specific things that were attempted, your feeling that it's taking terms you associate with relation and using them somewhere else is probably purposeful. Perl was designed with some very specific ideas, and one of them was to make it usable in a way more like a natural language.
> And the anthropomorphization of abstract concepts only creates a slightly uncanny valley in my mind.
I think you're stretching your analogy too far to make a point. My and our denote ownership of an item. It's used in Perl to denote something very similar, as the core concepts are the same, responsibility and access.
> Maybe because english isn't my mother tongue. Perhaps native speaker is more ok with this mixture of concepts?
Possibly. I'm a native speaker and the concepts aren't mixed in my mind.
say
This function is loosely similar to `print` in the sense it sends a version of its arguments to an output handle (STDOUT by default).But `say` is emphatically casual and human oriented in stark contrast to the formal and computer oriented `print`. For example, `say` uses human friendly gists of its arguments and truncates arguments that are absurdly long. I think `say` fits perfectly.
hyper
Er, yeah. Reasons. Onward: race
A race delivers the first of several competing concurrent computations to successfully complete (or the last to fail if none succeed). What would be clearer? start
`start` starts something that will complete later. Again, what word would you pick?I agree with kbenson about `my` and `our` and note that those were stolen from Perl 5 because they're considered to be spot on.
But following my gut feeling for completeness in bikeshedding:
say → Two things irk me, also in other languages. First is the where of writing out. Which is missing here. So I'd always use it as a method of the corresponding handle, here STDOUT. What to name the method? .write would be used for generalized writing (print in Perl6, I think). .writeLine for writing with Newline. And yes, say seem to write a custom representation of the written objects. STDOUT.writeRepresentation would be to long even for me. ;) So .. Stdout.writeRepr(), maybe.
.hyper, .race → If I understand .race correctly after some googling (the Perl6 docs seem to be very sparse), it doesn't returns the result of a race, e.g. a winner or an ordering from winner to loser. Instead it transforms an Iterable into a parallel processing pipeline with custom map/filter/... methods which do their work on parallel workers. Iterable::inParallel / Iterable::inOrderedParallel would be my compromise.
start → I don't have a Problem with Promise.start but with the corresponding global routine. Start seems so be a too often used concept for different things, most of them custom defined by the user of the language. But I don't know how pervasive usage of promises is in Perl 6, so maybe it is warranted.
Additionally, while there is a definite elegance to its simplicity, most people have built up fairly good understanding of a number of glyphs. Using some of the additional glyphs to make the code more visually distinctive would definitely improve code reading speed.
Ultimately it seems like operator overloading is something that should be possible, but made intentionally difficult to discourage abuse.
I suppose what you said is an "occupational hazard", but not an unavoidable problem.
I do have trouble reading other people's code sometimes, but that's true in any language. It's easy to get thrown for a loop when someone uses a language feature that you've never seen before.
English is an expressive language as well, but I don't become paralyzed writing this comment.
As for English... Writer's block and futile rewriting cycles are real issues that basically every writer grapples with. On the other hand, coder's block isn't really a thing, and refactoring occurs infrequently compared to writing.
It's featured here: https://perl6.org/
"Hi, my name is Camelia. I'm the spokesbug for Perl 6, [...]"
(image: https://perl6.org/camelia-logo.png)
and the link in the image leads to the 2009 rationale by Larry Wall: http://github.com/perl6/mu/raw/master/misc/camelia.txt
Also, some people were not amused: http://www.perlmonks.org/?node_id=1149576
http://www.perlmonks.org/?node_id=1149576
Eek. All work and no play makes Jack a dull boy.
Fun fact, one of the original Perl6 implementations was done in Haskell (the parrot VM I think).
Before all that happened, though, there was Pugs, which is the Perl-6-on-Haskell thingy that you are thinking of. A fair portion of the current Perl 6 test suite comes from the Pugs project, at least originally. And, IIUC, it was the success of Pugs that revived the Perl 6 efforts and led to the Rakudo project (Perl 6 implemented in Perl 6) which is what we still use today.
So yeah, it is definitely the case that Haskell had a big influence on Perl 6 both from a language design and a more raw "inspiration" in the sense that it literally might not have happened without it -- the original wave of Perl 6 development had largely failed and there was some serious burnout happening. Pugs, Haskell, and Audrey Tang managed to put the ship back on course.
A lot of history happens in 16 years, and I make no claim to know the truth of any of it. There are more than a few rants floating around out there that will give you a picture of what happened when, albeit from a ranty perspective. Hopefully one day it will all be collected in a more comprehensive historical document.
Note that depending on your point of view, Rakudo actually predates Pugs: It's just that Parrot and Perl6-on-Parrot used to be developed in a single repository, and it wasn't yet called 'Rakudo'.
edit: However, NQP (the basis for the current Rakudo architecture) does indeed postdate Pugs (according to the ChangeLog, it first appeared in Parrot release 0.4.15 in 2007).
I think this is misleading; one of the original goals for Parrot was language interoperability, especially between Perl and P6.
However, I am talking about the focus shift that made Perl 6 just one among many of "client languages" (for lack of a better word). This was a distinct moment, at least as far as I remember it.
Not only by logical extension! One of Larry's primary goals was to "let any language use the CPAN", through Parrot. Running Perl and P6 on the same VM, in process, without embedding libperl.so was the plan as far back as I can remember.
I am talking about the focus shift that made Perl 6 just one among many of "client languages"
That's been a common, though unrealistic, criticism of Parrot for the past several years. Various contributors never had (or lost) interest in P6 but wanted to work on an multi-language VM. Expecting that all volunteers to a project have the same primary goal in mind is ridiculous and ignores decades of F/OSS contributions; it's easy to look at the Linux kernel and recognize that multiple competing business and personal interests can be shepherded into a technically useful result that meets a lot of those needs despite their competing interests.
People implementing `invokedynamic` didn't somehow make Java a second-class citizen on the JVM, for example.
You can certainly argue that we handled some of those competing interests poorly (I've argued this), but the "focus shift" argument rests on some questionable assumptions and ignores other, more important, concerns.
Now, I think you are also being a bit disingenuous. The Parrot team shifted focus. You can say all you want that the original vision was always all dynamic languages (which I already said, by the way). But to frame the original Parrot efforts as anything less than building a foundation for Perl 6 clashes with my own memory of the timeline.
If the JVM and the Java teams essentially stopped talking to each other, I would definitely consider that to be some form of collective decision making representing an overall shift in focus for the projects. That's more akin to what I remember of the Parrot/P6 split. Even your post hints at it when you say "Various contributors never had (or lost) interest in P6". But again, I was only "involved" from the sidelines and am limited to the available materials, including yours, and synthesizing them from individual rants into some semblance of a balanced picture.
That's the story certain people have been telling for quite a while, but it never happened while I was involved in either project. If you look at the use.perl.org archives, you can see that both Allison and I (as the architect of Parrot and a lead developer, respectively) were collaborating closely with Rakudo developers on the weekly P6 design calls.
I understand that, from the outside, there's a natural tendency to take all of the perspectives and comments and assume that the truth lies somewhere in the middle, but the historical record is out there and available. I've certainly referred to it directly when posting my opinions about what happened and when.
Hacker News takes that excitement and beats it into a nasty pulp on the floor.
Perl was my first language after QBASIC and a failed attempt at C. I thought it was super cool.
I love how it's optimized for being awesome instead of pandering to dumbass lazy coworkers who won't RTFM.
You're as much a part of HN as anyone else is, and tons of people here like Perl 6. That's presumably why stories about it such as this one get upvoted so highly.
Instead of dissing the community and adding to the negativity, it would be better to ignore it (which is hard, I know) and share some things about what you like so much.
Larry Wall gave a state of the onion speech about Perl as a "postmodern" language... which means something like, its guiding principles aren't only classical or modernist... it doesn't just aim for simplicity, purity, elegance, unity, etc... instead, it includes some very different values, like plurality, camp, fun, "just weird enough"-ness, "ha ha only serious"... some quotes:
http://www.wall.org/~larry/pm.html
> I combined these cool features [from all kinds of other languages] in a way that makes sense to me as a postmodern linguist, not in a way that makes sense to the typical Modernistic computer scientist. Recall that the essence of Modernism is to take one cool idea and drive it into the ground.
> Well...Perl does one thing, and does it well. What it does well is to integrate all its features into one language. More importantly, it does this without making them all look like each other. Ducts shouldn't look like girders, and girders shouldn't look like ducts. Neither of those should look like water pipes, and it's really important that water pipes not look like sewer pipes. Or smell like sewer pipes. Modernism says that we should make all these things look the same (and preferably invisible). Postmodernism says it's okay for them to stick out, and to look different, because a duct ought to look like a duct, and a sewer pipe ought to look like a sewer pipe, and hammer ought to look like a hammer, and a telephone ought to look like either a telephone, or a Star Trek communicator.
> How does Perl put the focus onto the creativity of the programmer? Very simple. Perl is humble. It doesn't try to tell the programmer how to program. It lets the programmer decide what rules today, and what sucks. It doesn't have any theoretical axes to grind. And where it has theoretical axes, it doesn't grind them. Perl doesn't have any agenda at all, other than to be maximally useful to the maximal number of people. To be the duct tape of the Internet, and of everything else. You've heard the joke, I'm sure. How is duct tape like the Force? It has a light side, and a dark side, and it holds the universe together.
> Let me state my beliefs about this in the strongest possible way. The very fact that it's possible to write messy programs in Perl is also what makes it possible to write programs that are cleaner in Perl than they could ever be in a language that attempts to enforce cleanliness. The potential for greater good goes right along with the potential for greater evil.
I love this attitude, and I think it's very hackeresque, so yeah, it's nice to see it upvoted and discussed on Hacker News.
I now consider Perl, and in particular Perl 6, as a language to learn ideas and concepts from. This slide deck shows me TIMTOWDI is not dead :) Perl does not shy in taking concepts made popular by other languages (Lazy lists from Haskell, "Hyper operators" from F#, channels from Go...) or inventing its own. It makes it a complicated mess, but also a fantastic source to learn about different paradigms and ideas.
I am eagerly waiting for a Perl 6 version of Programming Perl now, given how influential the third edition has been on me 15 years ago.
say "Code took {now - INIT now} seconds to run";
# Code took 0.01111143 seconds to run
Implicit string interpolation??? What if I just want to print out the string "now"?In case you're interested, that was the inventively named "A Programming Language", APL (https://en.wikipedia.org/wiki/APL_(programming_language) ).
https://en.wikipedia.org/wiki/APL_%28programming_language%29...
https://en.wikipedia.org/wiki/APL_syntax_and_symbols
https://en.wikipedia.org/wiki/APL_%28programming_language%29...
One of the examples there uses the ⍨ character!
I posted an example of hyper operators a little while back, and used the Texas variants because I thought it might be intimidating to show them with Unicode...and, they were just so darned clunky looking, I had to change them back, and included a little note that there was a non-Unicode way to use the feature, as well
Still, I can't imagine having to type those regularly. I don't count keystrokes or anything, but that just seems harsh.
Anyway, I think I'm sympathetic to where you're coming from; Perl 6 is challenging looking. We may disagree about why. But, I think I like the Unicode enough to consider it a net positive for readability, even though I also think it makes for a very broad and deep language that will need ages to properly wrap ones head around. But, then again, if a language isn't big and broad, a big and broad ecosystem develops anyway (see JavaScript and so-called "JavaScript fatigue" for a prime example of that), so there's still a tremendous amount to grok before being really productive and literate in the language.
[1] Not all are the common LaTeX macros. See http://docs.julialang.org/en/latest/manual/unicode-input/
Also, the URL at the bottom is broken (says TPM2016.zoffix.com but links to http://zoffix.com/TMP2016)
How are HNers still confused? The same exact instructions have been given time and again, for almost each and every presentation posted on HN -- and there are always 1-2 comments asking about them for any new presentation posted.
New users? Not technical enough to try the keyboard arrows and/or space?
Swiping left is not my default when visiting a website.
AND yes, pressing arrow-keys on a webpage is definitely not (yet?) intuitive
Space-bar makes sense tho, as it should have scroll down by default
It's not a website. It's a PRESENTATION (given with a projector et al) made available online.
JS on by default, is the default for the modern web in any case.
I'm sitting at my desk... one hand holding a soda, one hand on mouse... and... nothing.
What would I do normally? Mouse 3 (back page) and never return.
Why? As far as it looks like, it's just a simple page with an "presentation coming (soon)" front page.
Horrible UX.
Some species of HTML presentation-creating software have the good sense and courtesy to put a navigation hint on the cover page. I think it would be a good thing for that to happen more universally.
Alternative methods would be another (floating/transparent arrows on the sides... prev/next page area's to click... sliding bar on the bottom to indicate something that can be moved)
My two main gripes are lack of indicators/training... and forced use of keyboard. This is the web. Smart phones, tablets, mice, etc...
But... that's just my not-so-humble non-ux-guy opinion :)
I don't understand the need to 1) be so clever and 2) get mad when people call you for being annoyingly clever.
I mean, first you take away the scroll bar, because it's ugly. Fine. Whatever. Next, you expect me cause the page to transition by moving RIGHT and LEFT. Not UP and DOWN, you know, like web pages have always worked. Finally, you don't bother to mention this fact anywhere on the website?!
What's clever? It's just a link to an online presentation. They don't use links etc because it's not a web page, just a html document -- it's primary use is for seeing it as slides through a projector.
This fact is evident both from the text and from the site's looks, and from that everything else follows (how you navigate, etc).
But confusion would still be OK, if we haven't had the exact same discussion 100s of times before on HN -- and if we weren't 99% devs, supposed to be able to solve much worse "mysteries" on our own...
Hyperbole much? Or am I getting forgetful?
> and if we weren't 99% devs, supposed to be able to solve much worse "mysteries" on our own...
Ok, you get points for this.
Tip: on my mobile at least, swiping works. (Protip to googlers around here: no, stop doing this on default blogger theme)
==> Is this a feature that Perl authors are promoting about the language? If so, I can understand why it's not gaining traction. Coding like this benefits absolutely NO ONE--including the one who wrote the code. The hipster coder who's just excited to learn perl for the first time may try it out, just to come back the next day and wonder "what the hell did I write"
No language makes sense before you learn it. Therefore unfamiliarity should cause us to suspend judgment, not rush to it. Otherwise we end up with what Alan Kay calls pop culture programming, which tragically junks things like the breathtakingly beautiful and powerful APL, and limits us to surface tweaks around the edges.
And well, honestly, more often than not i found that "hard to read" perl code would be just as hard to read if it was written in lisp, python, c, or any other language you care to name; since more often than not that code is hard to read due to variables and functions having names that don't help the reader understand what they're holding or doing, and long blocks of code not having been encapsulated into functions well enough.
And lastly, to tie in to dang's point: Having "used Perl a lot" does not mean much if you have not also "learned Perl a lot". I've known, in the extreme, a Perl dev of 10 years experience, who had started out as a C dev, and yet did not use or trust Perl hashes, instead opting to write his own data structure encoding format. Have you ever read chromatic's Modern Perl?
As long as the definition is clear and it's documented, what's the problem?