Perl 6: Apocalypse 6 Released 247
data64 writes "The latest Apocalypse talks about subroutines. Looks like we finally get type signatures which are way more powerful than the rudimentary prototypes available with Perl5."
WARNING TO ALL PERSONNEL: Firings will continue until morale improves.
Apocalypse Now (Score:3, Funny)
Re:Apocalypse Now (Score:5, Funny)
Re:Apocalypse Now (Score:2)
More Information (Score:3, Informative)
The Previous Apocolypses [perl.org] as well as some more info (who's who, list summaries). Read up!
On another note, is Perl 6 even going to be relevant with next-generation languages like Ruby and Python already fairly mature? ;-)
Re:More Information (Score:3, Insightful)
Python --
Similar to Perl. Tighter syntax, slightly less flexable
Ruby --
Much better OO implementation much smaller library.
So Perl 6 should be way more flesable than either of the other 2. We have to wait another 4/6 apocylopses to see about the comparison of the object orientation.
Re:More Information (Score:2)
o = SomeObject() # with method "method", let's say
def method_wrapper(self, *args, **kwds):
print "I'm a wrapper!"
self.method_orig(*args, **kwds)
o.method_wrapper = o.method
o.method = method_wrapper
Perl wouldn't let me do that. So I went a different route with anonymous subs and it's fine, but this is just an example of a general principle, which is that in the (useful!) tricks department, I'm usually stuck in Perl when in Python it'd be easier. (Metaclasses, anyone? I'm not even certain it could be done correctly in Perl.)
Now, that shouldn't be a shock. There is a price to pay for Perl's flexibility, as well as gains. There is a price to pay for Python's "tighter" syntax, but gains as well. (Python is also much easier to mentally model, for what it's worth; I feel I could re-implement Python in a reasonable amount of time, I don't feel like I could ever quite match Perl's quirks.) Both languages have their place.
Re:More Information (Score:2)
Anyway I'm having a little trouble understanding what you wanted to do. It seems like you wanted to temporarily replace a function with another function with the same name. The easiest way to play these sorts of games in Perl is by using globs.
Re:More Information (Score:2)
As for what it means its the ability to code the way you want, the "there is more than one way to do it" that makes Perl special.
Re:More Information (Score:5, Interesting)
If Perl6 goes according to plan, absolutely. In fact, it'll be particularly relevant to Ruby and Python.
More than any other thing, in my opinion, Perl has CPAN going for it. Other languages have tried similar code sharing projects, and none of them have come close to matching CPAN's breadth and (despite the occasional wonky module) usefulness.
More than any other thing, in my opinion, Java has the JVM going for it. Not that it's the only virtual machine out there, but it's the only one which really has broad distribution. The ability to distribute compiled bytecode, and to run it in a "sandbox", are two of Java's biggest selling points.
If Perl6 succeeds, neither of these languages will keep their greatest advantages. Perl6 is merely to be a Parrot compiler... and where Sun has actively tried to keep other languages off of the JVM, the Parrot developers want to entice other languages onto the Parrot. Any languages rewritten to target the Parrot, then, should (given some hooks, perhaps) be able to take advantage of the CPAN modules which are the wealth of the enormous Perl community.
To the extent that Perl6 succeeds, Python, Ruby, Scheme, O'Caml, and who-knows-what other languages stand to find themselves able to "write once, and run anywhere". Potentially, this could lower the bar for new and interesting languages to compete, since they'd primarily be competing as languages, with the runtime environment issues (more or less) abstracted away. In the same way that Mozilla allowed for today's proliferation of browsers, Parrot could be a very good thing for languages.
But while Perl6's progress will certainly be relevant, in the long term it risks obsolescence by virtue of its own ambitions. Frankly, if that were the case, I don't think it'd bother Larry all that much... however the Perl community doesn't seem to be ready to go gentle into that good night. A lot of Perl6's remarkably ambitious agenda seems to me an effort to stave off the possibility of the danger that Perl will become a victim of its own, and Parrot's, success.
subroutines (Score:2)
Re:subroutines (Score:3, Funny)
Perl is turning into a completely new language (Score:4, Interesting)
Instead if Perl kept on changing then you can't be sure and when you have literally thousands of little perl scripts everywhere this is intolerable.
Perhaps they should have kept Perl 5 as
Re:Perl is turning into a completely new language (Score:5, Interesting)
No, most of these "features" as you call them are not added into perl, they are added in as bundled modules. Perl's core is kept small for this very reason. As for Perl 6, that is going to be radically different but perl5 will be able to live on the same machine as perl 6 and I would imagine that a great deal of people will keep both around and maintain both for a great while.
Re:Perl is turning into a completely new language (Score:4, Informative)
It's open. You can do whatever you want... (Score:3, Informative)
Here's your solution:
[siewsk@hostname siewsk]$ tar zxvf perl-5.0.0.4.tar.gz; cd perl-5.0.0.4; rm -f config.sh Policy.sh /bin/sh Configure --prefix=/usr/bin/perl5.0.0.4
/usr/bin/perl5.0.0.4/bin/perl /usr/bin/perl5
[siewsk@hostname siewsk]$
[siewsk@hostname siewsk]$ make; make test
[siewsk@hostname siewsk]$ sudo make install
[siewsk@hostname siewsk]$ sudo ln -s
You now have /usr/bin/perl5 forever and ever, as long as you use #!/usr/bin/perl5 at the top of your scripts.
-B
Re:Perl is turning into a completely new language (Score:5, Funny)
I'm sorry. I think you are looking for this every-feature-is-in-the-core [php.net] language.
Glad to point you in the right direction!
enoch
Backwards support is a key Perl6 requirement (Score:2)
Re:Perl is turning into a completely new language (Score:3, Informative)
Re:Perl is turning into a completely new language (Score:3, Funny)
I am so looking forward to Microsoft BrainFuck.
It's called Visual Basic ;)
Re:Perl is turning into a completely new language (Score:5, Insightful)
Re:Perl is turning into a completely new language (Score:3, Informative)
Interesting that that quote is Jarkko's sig. Jarkko is the Perl 5.8 pumpking.
Re:Perl is turning into a completely new language (Score:3, Insightful)
Easy Fix (Score:4, Funny)
ughgh (Score:3, Interesting)
multi *caller (?$where = &CALLER::_, Int +$skip = 0, Str +$label)
my brain can't grok that
Re:ughgh (Score:4, Insightful)
When they say theres more than one way to do it, syntax is included in there too.
Re:ughgh (Score:3, Insightful)
Once I was bored and wrote one line of C code that iterated over an array, and printed its elements separating then with commas, and printed an "and" instead of a comma for the last element. The code consisted of a for, a printf, and ?
Now, don't try to tell me it was readable. Every language can be used to write horrible code.
Besides, that doesn't even look as Perl. "?$where" makes no syntactical sense, variables have names like $where and that's it, "Str + $label" makes no sense either, unless Str is a constant, and "Int +$skip = 0" makes about as much sense as in C, because supposing it's comparing an addition with 0 it should be using ==.
Re:ughgh (Score:3, Informative)
Re:ughgh (Score:2, Interesting)
Re:ughgh (Score:2, Insightful)
I can make ANY language look bad if I can break the rules.
Re:ughgh (Score:3, Informative)
There's more than one way to do it.
You can write totally obfuscated/clever crap in any language. Or not. It's up to you.
The perl compiler can't grok that, either (Score:2, Redundant)
It's not the language, it's the programmer. A good coder will make beautiful code in whatever language s/he uses. Remember, There's More Than One Way To Do It.
Re:ughgh (Score:3, Insightful)
It can also make things *harder*. The grammar and syntax of English is very fast and loose, but well known to it's speakers. Most likely the English-based programming language won't be able to mimic every little natural-language nuance, leaving the developer the headache of remember what rules are followed in which and when. When one says "or" in common, everyday conversation, it generally means an exclusive "or." When I say "or" in just about programming language, it means an inclusive "or." In an English language development language do you worry about conjugating verbs? What about tenses? Etc. You get the drift.
Using English keywords is great & helps simplify the problem, but as someone way smarter than me said "Things should be made as simple as possible -- but no simpler."
-Bill
Re:ughgh (Score:2)
-Bill
Re:ughgh (Score:4, Interesting)
No. That's conceptually wrong.
A (programming) language should make it easy to construct solutions for problems it has been designed to solve. Natural languages, such as English, are good for certain sets of problems and quite bad for other sets of problems.
Would you like to replace math notation with sentences in English?
Re:ughgh (Score:2)
I'll go for the one that actually has keys on my keyboard. Until I start seeing Cyrillic on my QWERTY, I'm stuck with "the partial derivative of..."
And the last thing I'm going to do is make up new symbols just because they're not on my keyboard.
Why perl will survive: (Score:4, Informative)
This is what's great about perl 6. Yes, it has so many insane features and rediculous complex rules and bizarre exceptions to its rules that when reading code with someone else's programming style, you may as well be reading a different programming language (Quick! What's the difference between "sub foo will do { something() }" and " { something() } " ?).
But the real strength in perl 6 is that it's just about infinitely configurable. You can redefine the grammar to fit your needs or whims. This is going, naturally, to cause 17 year olds who load their grammars up so much with wierd macros that their programs will become literal line noise that ceases to function if you change one character, but it will also mean that in the "enterprise", you can be completely shielded from the messiness. All it takes is defining a specialized version of "use strict" that reduces the language down to what you need, and suddenly perl 6 is some very simple, simple, easy to understand language. As long as the speed's OK, people enforce standardized coding within an organization and the default -w is really careful to warn you if you say { 1, 2, 3 => "a" } and it looks like what you probably meant was hash { 1, 2, 3 => "a" } , i don't see it being a real problem. And from a compatibility stndpoint, having one language with EVERYTHING and the ability to cut out what you don't need in wide swaths is way better than recurring situations where people go "well.. i want to use java, but i need feature X" and wind up using some funky third-party jvm compiler that produces huge executables and requires funky tricks to incorporate into my build cycle."
Perl 6 is as hairy as you want it to be, and no more.
Perl 6 is going to be the bestest second system ever! ^_^
Re:Why perl will survive: (Score:4, Insightful)
As far as i can tell, perl 6 is supposed to evoke four main reactions:
When did obfuscated code kill a language? Never (Score:5, Interesting)
The original poster simply pulled something similar. There is no requirement that your perl look anything like that, nor is "powerful" perl more obfuscated than plainish looking perl. This is total FUD drummed up by someone who has presented a corner case....which I can assure you can be done for any language. In fact, I wouldn't touch a language for which this didn't hold.
Re:When did obfuscated code kill a language? Never (Score:2)
And the guy who wrote Perl usually wins.
Ever hear of APL? (Score:2, Interesting)
Of course, with all of this power APL also invented the write-only program and the one-liner, both predecessors to the obfuscated C contest... and I must say that those using C and C++ can only dream of approaching the unreadability that was APL. Then again, only APL used its own character set... it used single symbols derived from mathematics as its operators. No constructing multi-character composite operators in that language... just custom terminals, or... a special type-ball for your selectric based 2741 terminal (there's a trip down memory lane).
To return to my point, though.
APL died for a number of reasons, but probably the biggest was how totally undigestible its code became with very little effort. I wrote some fairly simple programs, relatively well written for APL, avoiding the tradition of making everything a one-liner, actually including comments... you know those things written in intelligible English that explains what a program does... oh, yeah, I haven't seen any of those in years in my C/C++ shops... and yet as little as a few months after I wrote those beautiful, elegent APL programs I had no clue how they worked and could only change them by re-writing them. A very good reason for a language to die.
The shame of it all is the APL was probably the best language ever invented for solving hard-core math and arithmetic problems, yet it died before it could even run on its natural platform, the super-pipelined vector processors such as the Cray-1 and its relatives.
Re:Ever hear of APL? (Score:2)
I agree, APL was way cool as a language, or so they say. I could never figure any of it out. Then again, I'm no good at cryptograms either, or the Obfuscated C Contest. It's interesting to learn the origins, though. Didn't APL stand for "A Programming Language"?
Perl 6 is easier than Perl 5. Really. (Score:5, Interesting)
I certainly don't look forward to COBOLScript [csis.ul.ie].
Human languages are an ambigious mess. Computers only want unambigious constructs. Having programmed in COBOL and and a few so called "fourth generation languages", let me say that writing in something that is close to English is really irritating. It's never quire English enough to allow me to express myself. You end up having to learn a specialized language that isn't really quite English. If I'm going to learn a specialized language, I might as well learn something that is easy to type and easy to scan visually.
Perl is a big, complex language, yes. But like real languages, you can learn it with very simple steps. You can get complex, productive things done with a just a quick introduction. If you want more power, it will take more learning, but it's available. Perl 6 aims to accomplish this evem better tham Perl 5.
Yes, the example given in the article are a bit convoluted. The entire point of the article is to explore all of Perl 6, not just the commonly used bits. In fact, one of main goals of Perl 6 is to make the common case and the introductory case less confusing than in Perl 5. Really. And everything revealed so far has supported this, it's just that Larry doesn't make it too clear.
Take for example expressing that a function takes three arguments in Perl 5. The best you can do is:
(The "...." represents spaces because Slashdot's code filter is crap.)
In this example, Perl will not check that callers do the right thing. In Perl 6, you get this:
A clear improvement, and Perl will actually verify that callers do the right thing when calling you, usually catching an error at compile time!
In general Lary's Apocalypses have been a bit obscure. He's focusing on the big picture and the little details. Damien's Exegesis's [perl.com] is generally alot easier to read for people less interested in deep thought and more interested in concrete details. Wait a week or two for Exegesis 6 and give that a read. I think you'll find that the common case is slightly simplier and more obvious than in Perl 5, while the system also allows for more complex expressions that weren't well supported in the Perl 5.
Re:Perl 6 is easier than Perl 5. Really. (Score:3, Informative)
And chances aren't bad that the next Exegesis will be coming soon, and the next Apocalypse will be soon after that. According to Dan Sugalski's use.perl.org journal, the core Perl6 team has been making good progress lately. As he writes in the 20 Feb journal entry:
From the later comments in that entry, it sounds like the next Apocalypse / Exegesis / Synopsis will deal with Perl6's object system. It's not clear how much progress was made there though. It took a long time to get from the last Exegesis to today's Apocalypse (core developers all out of work, etc), but hopefully this means things will get moving again now.
Re:ughgh (Score:3, Interesting)
Actually from a grammer standpoint Perl is far closer to a real human language than almost any other language. For example the use of pronouns (implied variables) in Perl is very much like a human language and very unlike most computer languages.
The inventor of Python agrees with this assessement but since he considers this a bad thing he didn't emulate it in Python.
Re:ughgh (Score:4, Interesting)
To my mind, the best computing language designer would be someone with extensive education and experience in: computer engineering, computer science, linguistics, mathematics, engineering and business processes, maybe psychology, and perhaps some other things I'm forgetting at the moment. My point is that a good designer would have a very strong comprehension of the problem space (the problems this tool is intended to solve), how the tool is likely to actually be used in the real world, how the problem space will evolve over time, all coupled with a very strong comprehension of the most efficient method of implementing this tool in the technology available. That's asking a lot.
In Wall's case, I think that he has a fair amount of experience as a practical coder, which is the impetus for his extremely strong emphasis on pragmatism in his language design. This would be a disaster for most designers, probably, but Wall's education in linguistics probably tempers that pragmatism with some comprehension of higher-level abstraction and some imposition of rigor. You can most clearly see this aspect of Wall's world-view coming through in the Perl 6 design.
However, even though in some sense the scientific view related to linguistics is an abstraction similar to the scientific view of computer science, they're fundamentally dissimilar. Linguistics is an attempt to comprehend and formalize a very complex and exquisitely functional system--human language. In contrast, Computer Science is not a descriptive science; it tends to be proscriptive--looking for the best way to do things, often from an ahistorical almost-Platonic perspective. As a result, it tends to be overly ideological. I chose the word "proscriptive" with some care, as in the realm of human language it identifies a fault line. Linguists tend to be notoriously relativist, asserting that what is "correct" is simple what exists. Proscriptivists, such as one's fourth grade English teacher, insist that there's truly "correct" and "incorrect" usage. In this sense, Wall's background in linguistics clearly has influenced his philosophy of computing language design; and, I think, computing language purists really are psychologically akin to the proscriptivist grammarians like the aforementioned fourth grade teacher.
For my part, in the realm of tools, I prefer aesthetic purity or elegance only when it serves utility (or, at least, doesn't interfere with utility). Perl is well-matched to its problem space, and in this it actually does have, in my opinion, some beauty. I mean, from one perspective a Swiss Army knife is god-awful ugly; but from another, its compact and wide-ranging utility is attractive. Because Perl is intended to operate in such a large problem space, I believe that simplicity, and the form of beauty that is a function of simplicity, is largely denied to it. So? We can't have everything. Ideally, there'd be a wide range of computing languages each perfectly and exquisitely engineered for their respective problem spaces. But, right now, computing isn't even close to being mature enough to support such a thing. In other engineering and science disciplines, there are a variety of tools and methods and specializations each well-suited to the problem domain they serve. And it works because a civil engineer isn't expected to do nuclear engineering work, nor an astrophysicist to do nuclear physics. But programmers are still expected to be jack-of-all-trades, and thus their tools are required to be as versatile--but also as unoptimized--as they are.
Addendum... (Score:3, Insightful)
Yesterday, Perl and Larry Wall came up in, believe it or not, a conversation I had with a friend regarding moviemaking. I had recently watched the director's commentary tracks on the DVDs of Rodriquez's "El Mariachi" and "Desperado", and I was explaining how impressed I was with his pragmatism. One of the most astonishing examples of this, to me, were his repeated admissions of complete disregard for certain kinds of continuity because "this is an action movie, things are happening very fast, and no one is going to notice it anyway." (That's a paraphrase.) He explained that he has x amount of time to get y amount of shots in a day's shooting, and worrying about details that no one is going to notice just doesn't make any sense.
Prior to watching these commentaries, I had rewatched Payne's "Election", which I think is a brilliant film, and after watching it I also watched it with the director's commentary. Payne is clearly a perfectionist, and he went to great lengths to preserve continuity and to create verisimilitude. (For example, two of his pet peeves in movies are cars without windshield mounted rear-view mirrors, and cars that are too clean.) I greatly admired Payne's attention to detail. Similarly, I greatly admire Kubrick's filmaking.
As the rare kind of guy who has both Knuth and Wall on my bookshelf behind me and who esteems both highly[1], and who appreciates both Rodriguez's pragmatic efficiency and Kubrick's auteur obsessiveness, I don't actually believe that there's the conflict there that other people assume there is. To me, it's a question of appropriateness. One approach is "correct" in one situation but "incorrect" in another.
To me, the very best filmmaker would know when to be like Rodriguez and when to be like Kubrick. Similarly, the best programmers would know when to be like Larry Wall and when to be like, say, Wirth. But that kind of versatility is rare. As is the case in so many things, human nature being what it is, most people have a preferred modality of thought and problem-solving, and operate in that mode whether it's effective or not. That's okay, providing that they somehow limit themselves to problems where their preferred method is appropriate. But many don't; and, worse, some proseltyze that their modality is what's "best" for everyone else, in every situation.
[1] Or, another supposed opposition: Tannenbaum and Torvalds. In their debate, Tannenbaum was the purist, Torvalds the pragmatist. If they were actually arguing about the same problem space, one of them would have had to be wrong and the other right. But they really weren't. I think that many of Tannenbaum's points about the superiority of microkernel architecture were correct and have been proven to be correct. On the other hand, you can't really argue with the success of Linux.
Re:ughgh (Score:3, Insightful)
a) highly consistent
b) easy to learn
c) very well fitted to the problem space
assuming the language is succesful the language gets applied to larger and larger problem areas and features get added that were originally considered in the design. The language moves towards becoming
a') inconsistent
b') complex
c') highly versitile over a wide range of problem spaces
If Perl were only still used mainly as a replacement for awk and sed it wouldn't be controversial. But over time Perl became a replacement for shell scripting and finally the "duct tape of computer science". To do this its added a tremendous number of libraries and these were developed independently of one another.
Since computer scientists are more reasearch oriented they tend to use "younger" tools; conversely people in the field are often using older tools for a variety of reasons.
___________
Finally one area I disagree with you is:
Ideally, there'd be a wide range of computing languages each perfectly and exquisitely engineered for their respective problem spaces. But, right now, computing isn't even close to being mature enough to support such a thing.
I actually think there are languages that are highly specialized for individual fields. In practice though the general purpose languages tend to be used much more often because these tools are too specialized. For example in math there are languages for:
-- number theory over finite fields
-- number theory over abstract fields
-- sparse matrix problems
-- crack based pde
-- ring theory
But in practice most people just Maple, Mathematica or Matlab because they don't want to have to learn a wide range of tools and these other languages are missing important features in other areas (like TeX export or GUIs).
Don't forget Parrot (Score:5, Insightful)
Re:Don't forget Parrot (Score:2)
Re:Don't forget Parrot (Score:3, Interesting)
I agree. When parrot comes out, there will essentially be 4 development platforms:
The fourth will be used for applications where speed is really key (real time, database engines, OS's, etc.)
For all other apps, it will be a matter of choosing one of the other 3 environments, and a language.
This choice will be particularly interesting given the fact that some languages (e.g. perl) will work with more than 1 of these environments (.NET and Parrot).
It's going to be an interesting world...
Re:Don't forget Parrot (Score:2)
Even more dramatically think about how few problems use custom hardware anymore. Even the "custom" hardware like graphics chips are pretty generic.
Re:Don't forget Parrot (Score:2)
That also probaby stems from the fact that compilers got much better at generating optimized assembly code. These days the average programmer problably isn't going to be able the beat the compiler, so why take make the implementation much more difficult?
-Bill
Re:Don't forget Parrot (Score:2)
Perl, the new ADA (Score:5, Interesting)
Perhaps the cleverness of the ideas are not being tempered by real use at this point. A language does not become great by adding new syntax and semantics for each feature but by refining it to the essential units needed to express all the rest. We should not celebrate the fact that "will" and "is" are very similar ways to express traits in perl 6. We should ask instead why do we need both? Further, is it possible for me to define a new "wont" statement in perl, or are "will" and "is" special things only language designers can implement?
Re:Perl, the new ADA (Score:2, Informative)
Re:Perl, the new ADA (Score:3, Insightful)
I don't know about you, but I like my languages to be pretty static. You can't really learn a language that's different everyday. Also, I don't like languages that let you do things 80 different ways. There are enough fights over where the curley braces go. Perl is not a team sport. Open source perl scripts are slightly less open than open source programs.
Now, if Parrot has only one instruction for things like "until" and "while", and someone wrote a decompiler that supported each person's own style of programming, then we may be in business
This is kind of like the whole
Re:Perl, the new ADA (Score:3, Insightful)
IME, Ada is exceptionally well-liked by the people who know it (note: use != know). I've seen far fewer complaints about it from Ada programmers than I've seen from, e.g., C++ or Perl programmers about those languages.
ADA's a good language, but no one uses it.
Right, just like how no one uses Linux on the desktop.
Re:Perl, the new ADA (Score:3, Insightful)
I attribute Ada's glorious failure to a few things, and none of them are the language itself:
Perl 6: Replacing old cruft with new cruft! (Score:4, Insightful)
Perl 6 was meant to be a total rewrite. Nothing was meant to be sacred, cruft could disappear, and we'd be left with a mean language, true to its roots, and working on a hot new VM.
Instead we get stuff like this:
sub *print (*@list)
Talk about confusing! * signifies a glob, but in the above example the first * signifies a sort of 'package wildcard' meaning that the subroutine is global! The second *, however, is a glob, as in Perl 5. WTF? Perl 6 looks almost as inconsistent as PHP already, and it's only in draft!
Each page of this Apocalypse presented me with a new piece of cruft to look horrified about. Slurpy arrays!? Oh my god. Wall even goes on about 'psychological reasons' for syntax! 'Default values' and 'Rules' are things that are easily done with existing code.. it's not even as if they result in particularly crufty code in Perl 5.
I'm still looking forward to Perl 6, but it really does seem as if Parrot is where the true action is. Perl 6 really does look as if it is being designed by committee.
Use what you need (Score:5, Insightful)
Perl has always had a lot of esoterica. Don't let it bog you down. You can be amazingly productive in perl without ever knowing what a typeglob is.
Re:Perl 6: Replacing old cruft with new cruft! (Score:4, Interesting)
sub *print (*@list)
Talk about confusing! * signifies a glob, but in the above example the first * signifies a sort of 'package wildcard' meaning that the subroutine is global! The second *, however, is a glob, as in Perl 5. WTF? Perl 6 looks almost as inconsistent as PHP already, and it's only in draft!
Perl is more based in natural languages than in "traditional" programming languages. In natural languages, what you are saying depend on the context, the same words say different things if they are used in diffeerent situations or positions inside a phrase.
Well, in perl that also happens (in perl 5 you'll find a lot more examples of this, starting with the "$" in $a, $a[1] and $a{"red"}).and I think that it was more common in the previous versions (at least in Perl 6 I believe you'll have $a, @a[1] and %a{"red"})
Re:Perl 6: Replacing old cruft with new cruft! (Score:4, Interesting)
I have heared that he explained in his first books how perl works from natual language point of views.
In the Apocalypses I saw also a lot of reasoning about how something is seen by a the human mind.
I can not help myself. But PERL transforms even more into a unreadable language.
I wrote a lot of perl scripts in Perl 4, about 300k LOC. After not looking at them after 1 or 2 years C++ coding, most of the tricks I used I did not understand anymore
Every time when I see a post about a new language I jump on it as I was a language geek when I started programming.
As soon as I see more than one $ or % or # sign in a sinlge line of code, I just trash the language.
I simply can not get why this is needed. I fully agree with the one who said programming languages should approach english. (probably because I learned Pascal as first true programming language, after BASIC and assembler)
I think a programmer should be able to read any program in any language. Or at least should be able to get a clue about what a program does, and how it does it.
Thre are so few constructs: variables, declarations, definitions, statements, structures, arrays.
Around that some programming concepts are woven
Why to make that more complex by silly abreviated keywords? (sub in perl, def in python) By useless and meaningless (for a uneducated reader) $ and # and % signs?
Perl is a language you an not learn by examining perl programs. You need a geek explaining it or time to read ALL docs. Thats a true draw back
Thats basicly why I stopped using perl. When Perl4 emerged I thought, better than C-shell definitly
Well, and I left C++ and went to Java
angel'o'sphere
Designing by committee of one (Score:3, Informative)
So, I wouldn't worry too much about it. Perl 6 will be different from 5. It appears that it should be better when you look at it from certain directions, and worse from others. Paradigm shift? Sure. I think lwall just got bored with where Perl 5 was going, and wanted to do something different.
Anyway "* signifies a glob" is one of those sacred things that was to be examined carefully. I'm guessing that most useful existing Perl 5 code doesn't use "*" that way except for filehandles. Several other 'modern' languages use "*" for type definitions, so it might make sense from the point of making it easier for a new Perl6 programmer to learn.
Will Perl 6 lead to Slashcode 3? (Score:3, Insightful)
Considering all the features available, it seems like this would be the ideal time to freshen up slashcode. Then, maybe we'd see valid HTML 4, CSS support, layout without n-level deep tables, etc.
Seeing the forest through the trees (Score:5, Interesting)
What I think though is important to remember is that if all you look at is the syntax, you won't appreciate the power -- and simplicity -- of the idioms. Taken out of context and put into cooked up examples meant to show off the new syntax, it looks bad... really bad. But once you actually start programming in it, you'll find that most of what you want and need to do will actually come quite simply.
That vast majority of all this new syntax will be applied in the vast minority of programming cases. Much of it will get sucked up into modules, classes, etc., that you'll use without worrying about what's actually going on under the hood. And "the rest of us" will just have an incredibly powerful language that is actually easier to program.
Cheers,
Richard
Re:Seeing the forest through the trees (Score:3, Insightful)
Probably so...though a lot of this is because individual Perl programmers will each learn their preferred subset of Perl6, and will use it. Woe, woe unto the maintenance programmer who has learned a different dialect of Perl6! Woe unto the maintenance programmer when you have redefined the language syntax for your own convenience!
Easier to write, harder to read once written. Languages with a lot of syntax are the Dark Side of the Force.
Write Only Language (Score:2, Flamebait)
Having said that, IMHO:
a) Perl, in the quick-and-dirty sense, is too dirty and not quick enough.
b) Have you ever seen C-obfuscation championship code? Now have you seen a Perl program that does anything more than "Hello World"? Notice the similarities?
Now I know that you can write bad code in any language, but bad-code in Perl is what I call 'job-security encryption' as you will never be able to fire the person who wrote the code, no matter how bad it is, because no one else will be able to read it. Either you re-write completely it or you keep that hacker...
On a side note, speed optimization in Perl tend to create spaghetti code with weird symbols for meat-balls. And I love meat-balls.
The shortest distance to a solution (Score:3, Interesting)
Re:Write Only Language (Score:2)
I've seen job-security code written in quite a number of languages. Even Java, which was clearly put together with the idea that a compiler could force conformance to 'proper' approaches.
If you are worried that somebody is writing crappy, unmaintainable code, the solution doesn't lie in tools. If you want to be sure that code can be maintained by other people, then you should have other people try to maintain it. Extreme Programming's practice of collective code ownership is one great way to do that. Other ways include mandatory rotations, code reviews done by people who will have to maintain the program, and code audits done by trained auditors.
There are also some automated design and code analysis tools that can help (like SmallWorlds [thesmallworlds.com] or the handy copy/paste detector [sourceforge.net]). But tools and audits are never a perfect substitute for the real thing.
GCC Larry.pl -Wall (Score:3, Interesting)
Got about 10 pages into it before the
Question regarding:
my %pet is Hash of Array of Array of Hash of Array of Cat;
why not:
typedef my Hash of Array of Array of Hash of Array of Cat %pet;
IMHO, without typedef, C++ would be lost, particularly when the STL is on the loose...
Larry, your Boss is as good as mine...
Re:GCC Larry.pl -Wall (Score:2)
Forget the interpreter... (Score:3, Insightful)
Self-documenting subs? (Score:2)
I started putting my comments in a particular format, and wrote a Perl script to grab them all and generate an HTML page, which I can print and tape to my wall for reference. When you've got 3,000 lines of code in custom modules, it's nice to have a reference when you forget what order a sub takes its arguments in. I shouldn't have to write my own documentation script. Nor should I have to maintain documentation in a seperate file, and worry about it getting out of date when I make changes.
Can somebody point me in the right direction? If there is no such thing for Perl 5, will there be for Perl 6?
Re:Self-documenting subs? (Score:3, Informative)
$ perldoc perlpod
he's insane (Score:2, Funny)
which might really mean:
my %pet is Hash(keytype => Str,
returns => Array(
returns => Array(
returns => Hash(
keytype => Str,
returns => Array(
returns => Cat)))))
or some such.
Larry's losing it. He's going to snap at any moment. Nobody can keep this up for long. If you're near him, grab a raincoat, he's going to explode at any second.
Seriously though, Larry, you're a genius.
Do not read the paragraph below:
This comment violated the "postercomment" compression filter. Try less whitespace and/or less repetition. Comment aborted. So I did, by adding this paragraph, hoping to throw it off.
A completely different kettle of fish (Score:5, Insightful)
This will make Perl an attractive contender for serious application development; something which it came reasonably close to in late Perl5 but didn't quite get there because while you could do most things in a consensually "proper" way, the roll-your-own methodology just wasn't convincing enough for pointy haired project managers.
The primary difference with Perl6 is that it will have full support for strict(ish) typing and object orientation which makes it suitable for large projects where it's impractical to expect programmer A to know anything about how programmer Z's module is implemented internally and vice versa.
The new feature set (together with Perl's availability on a wide range of platforms and the huge range of freely available interfaces on CPAN) means that Java and .NET will be facing some stiff competition in just about every conceivable application niche.
If the speed improvements are genuine then (assuming that one were in a position to choose) for probably the first time ever we will be in a position where there is hardly any real need to maintain skills in multiple languages as Perl will be at least adequate for the vast majority of implementations. It's not unreasonable to suppose the list of exclusions being limited to CPU bound code in high-performance content servers (eg RDBMS, HTTP) and real-time and embedded apps requiring hand-coded assembler or at least tightly optimised C.
Whether you agree with that or recoil in horror at the thought of your favourite language being marginalised, Perl is clearly not just a "glue" language any more. It's about to become a fully-fledged enterprise application development platform.
I'm sure you've already guessed, but for the record I am very much looking forward to this.
There is one fly in the ointment I guess. Perl, like C, is very free-form in terms of what it lets you do but the flip side of that coin is that such languages also let you write dangerously unstructured and unmaintainable code. They require good training and a degree of self discipline to use well. Self taught programmers who didn't have strict typing and nested scoping enforced on them at the beginning of their coding career almost inevitably tend to grow up writing code that is less secure and harder to read than do those who learned back in their college days to associate variable declaration at the wrong level of scope with lower assignment grades and some stern finger wagging from their tutor.
The new Perl will continue to make the impossible possible and the merely hard very easy, but for the first time it will provide support for a more formal structure where that is considered a good thing.
Remember though that Perl is still very much a grassroots phenomenon. Whether this hits anybody's radar screen out in the real world has to depend on how well and how rapidly it is taken up by the Perl community. i.e. upon the willingness of existing Perl code monkeys to grab the inevitable (presumably three-humped) Camel Book, learn the new features and use them deliberately to adopt a more structured and more scalable coding style.
It's on this point I think that Perl6 will succeed or fail. We will need plenty of real world examples out there so that new users have something from which to learn righteous coding principles, and so that sceptical project managers will see successful implentations from which to draw confidence and inspiration.
Jesus Wept (Score:2)
So, I read through the recent Apocalypse and I come to a sentence a bit like this:
'...but Perl will dwim silently if the context is a list that starts with a pair or hash.'
Admittedly, by that point I'd already seen enough sequences of punctuation marks that I wasn't really feeling very hopeful.
So it seems I will be living with the limitations of Ruby for quite a few years yet! Banzai!
Can someone please make a Ruby that compiles to Parrot code? Pretty please? I volunteer to do the SVG library.
Perl is a Write-Only language (Score:4, Insightful)
One problem with Perl, is that it's very hard to read somebody else's Perl code. Most Perl hackers can write scripts that do amazing things in much less space/time than a traditional compiled language, but their code is indecipherable to even other skilled Perl hackers. If you've ever maintained a large Perl program written by someone other than yourself, you know what I'm talking about.
Adding more features to the language will only make this problem worse. Very few Perl programmers know more than a fraction of Perl's syntax. More syntax means more stuff that your average Perl programmer doesn't understand! This is a huge impediment to writing a large project in Perl.
Languages like C and Java stay alive precisely because they're not very expressive. You can write huge behemoth-sized projects and still have some hope of maintaining them, because there just aren't that many ways to obfuscate the code.
Re:Perl is a Write-Only language (Score:4, Informative)
It will be comparatively simply for a coding team to create a "policy" module (say, Policy/Our/Preferred/Style.pm) that restricts coders to an agreed-upon subset of the language's syntax and features. Thereafter, so long as every module begins with use Policy::Our::Preferred::Style, the rest of the module simply won't compile unless it conforms to the team's coding standards.
And I suspect that enough groups will want to do this that it will make sense for someone to write a front-end module that simplifies the creation of such policies. So all your team will need to write will be something like:
Re:Perl is a Write-Only language (Score:3, Insightful)
Bad idea. Look back at the history of "extensible languages" which allowed dynamic modification of the grammar. It was tried in the 1970s and early 1980s, in forgotten languages like EL1, BALM, and SPEAKEASY. Some dialects of LISP had such extensibility, with painful results.
The proposed solution doesn't deai with maintainability. It only addresses project organization.
A tool that converted existing Perl code into a standard format, changing the syntax without affecting the results, would actually do what the post claims. That would make code much more maintainable, if the tool was smart enough to understand the idioms of the language.
For example, the ugly hack used to do object oriented programming in Perl 5:
my $self = shift;
my $item = shift;
my $index = shift;
my $headercontent = $self->findbefore($item,\%stoptags);
$self->{'headercontent'} = $headercontent;
my $captioncontent = $self->findcaption($item);
$self->{'captioncontent'} = $captioncontent;
Re:Perl is a Write-Only language (Score:3, Insightful)
Huh? The only way to deal with maintainability is via project organization.
Even the most B&D, only-one-way-to-do-it language will permit obfuscated programming. The simplest way is by the (in)judicious use of De Morgan's laws on conditionals. For the more advanced obfuscator, just write a "subtract and branch if negative" function and code the entire algorithm using nothing but that. Every programming language, no matter how strict, provides an unlimited range of choices -- of identifiers, of data structures, of algorithms.
Coding is fundamentally about making such choices, and syntax is just the very lowest level at which they can be made. Human beings make (and disagree on) these choices, which inevitably means that maintainability is a social issue, not a technical one. So technical fixes alone can never solve the problem.
What we're proposing instead is a tool that can support in the necessary social processes by allowing you to reward adherence to, and punish transgressions of, your preferred syntactic style. But that's still ultimately a social solution because you have to convince your team to use the tool in the first place and ensure that they don't quietly turn it off when you're not watching.
And it still won't address the problem of getting them to choose meaningful variable names, or a sane data structure, or an algorithm that mortals can understand. No tool -- except possibly a big stick -- will do that.
Of course, we are also offering a complete parser for Perl, written in Perl. So if you do want to grab the parse tree of a program and reformat it (applying whatever artificially intelligent refactoring you can muster), the necessary support structures for that will be there too.
Re:Perl is a Write-Only language (Score:4, Insightful)
Concede the likelyhood that this is due to one of two things:
1. "Most Perl hackers" are incapable of reliably writing readable, maintainable Perl code.
2. "other skilled Perl hackers" are not very good at reading Perl code.
Try reading through some of the modules in the Perl core some time. More often than not, they are exceptionally well-written, documented very nicely and easily maintained.
In my experience, given a pool of developers in any language, it is usually very rare to find one that can write truly elegant, readable code. Perl's flexibility just makes it so that those that write unreadable code can write some really unreadable Perl. Perl's low barrier of entry is part of the problem, and generally companies don't know what to look for when selecting a Perl developer, so you get a lot of novices out there in these positions pumping out utter shit, but it runs, so it must be OK.
Sand (Score:3, Interesting)
Sand is a programming language I've been planning for a long time, but its timetable has picked up as I'm more and more convinced that Perl 6 is going to fill a niche that I don't work in. Plus, I've really never been comfortable with bytecode interpreters.
That's not to slight Perl 6. I'm sure it will be a fine language, but I'm looking at moving on to a design that focuses on maintainability and compilability (that is: to machine code). Since none of the languages out there satisfy my desire for these attributes plus the flexibilty that I've come to love in Perl, I have to write it myself.
Type declarations already in perl5? (Score:3, Interesting)
You can?
Why didn't anyone say so before? I've never seen this in Perl code until now.
Re:20-odd pages... (Score:2, Informative)
So long as we get a foreach() mechanism with in-built index into the array it's looping over, I'll be happy. That's my biggest problem at the moment.
You mean something like:
foreach my $elem (@list ) {print "$elem\n"
}
This works in Perl5.
Re:20-odd pages... (Score:3, Interesting)
No no no no no. I know that :) I mean:
foreach (@list) { $list[$i] = 'No jam today!' if ($_ =~ /jam/);
}
... where $i is an index into the array. Like a for() loop, but without the gatepost error possibility. Yes, you can do it yourself with my $i=0 and $i++ in the loop, but it's a mess, especially if you next or last anywhere in there - it means you have to put the $i++ at the top, and start at $i = -1, which is bizarre.
Re:20-odd pages... (Score:3, Informative)
Re:20-odd pages... (Score:2)
Re:20-odd pages... (Score:2)
Re:20-odd pages... (Score:2, Informative)
Re:20-odd pages... (Score:2)
for i in list:
do something with i
Re:20-odd pages... (Score:2)
Re:20-odd pages... (Score:2)
Re:20-odd pages... (Score:2, Informative)
Re:20-odd pages... (Score:2)
perldocs already far beyond php.net docs (Score:4, Informative)
Does php provide anything like this?
What I typically hear and feel myself is that the php site documentation is sparse to a fault, with a great deal of useful information simply left out. Check out how many holes are filled in by contributors at the bottom of each page of the php.net site docs. These are glaring ommissions.
Re:perldocs already far beyond php.net docs (Score:2)
While perldoc (especially perldoc -f functionname) is keen, for those of us who like scroll bars, proportionally spaced fonts, and links, check out perldoc.com [perldoc.com]. It has documentation for multiple versions and a solid search engine. It also documents almost everything in the insanely useful CPAN.
Re:perldocs already far beyond php.net docs (Score:2)
What I typically hear and feel myself is that the php site documentation is sparse to a fault, with a great deal of useful information simply left out. Check out how many holes are filled in by contributors at the bottom of each page of the php.net site docs. These are glaring ommissions.
$your_comment =~ s/omm/subm/;
Those are glaring submissions! And a very integral part of said PHP documentation!
Re:This kind of subroutine? (Score:2, Funny)
while (1) {fork ? `cat
Re:Perl obit? (Score:2, Informative)
$x = 1;
Will still work. These three paragraphs should be reread:
The important thing is that we're adding a generalized type system to Perl. Let us begin by admitting that it is the height of madness to add a type system to a language that is well-loved for being typeless.
But mad or not, there are some good reasons to do just that. First, it makes it possible to write interfaces to other languages in Perl. Second, it gives the optimizer more information to think about. Third, it allows the S&M folks to inflict strongly typed compile-time semantics on each other. (Which is fine, as long as they don't inflict those semantics on the rest of us.) Fourth, a type system can be viewed as a pattern matching system for multi-method dispatch.
Which basically boils down to the notion that it's fine for Perl to have a type system as long as it's optional. It's just another area where Perl 6 will try to have its cake and eat it too.
(Bold added by me.)