Exegesis 7 Released (Perl 6 Text Formatting)
chromatic writes "Perl.com has just published Exegesis 7, Damian Conway's explanation of how text formatting will work Perl 6 (and now, Perl 5, thanks to his Perl6::Form module) will work. Think of it as Perl 1 for the 21st century. Also, Parrot 0.1.0, the virtual machine for Perl 6 and several other dynamic languages, released on Leap Day -- ever wanted to program in an object oriented assembly language?"
This was an excellent read.. glad to see perl is keeping up with the times!
Just because you disagree doesn't make it offtopic or flamebait.
One thing that you really have to love about the people who write Perl is that they have a sense of humor. This kind of document could be extremely boring and bland, but Damian had the good sense to liven it up by using humorous examples, mostly drawn from Shakespeare. He's doing some great work, but he's also obviously having fun doing it.
There's no point in questioning authority if you aren't going to listen to the answers.
I just couldn't wrap my brain around Perl.
I ended up giving up and learning Python instead.
Background: 28/M/Bi-Sexual; Owner of a Linux company; MBA Harvard 2003; B.S. Comp Sci MIT 2000
"ever wanted to program in an object oriented assembly language?"
Uh... I gotta say... No.
"For years, I struggled with reality... but I'm happy to say I finally won out over it." -- Elwood P. Dowd
lots of lame jokes about Perl code being incomprehensible despite the fact it can be the most readable.
The screen is covered with what looks like a still shot
of a copy of "The Matrix" screen saver.
He looks at it a minute, and realizes that the coworker
is reading it, so it can't be a screen saver.
He thinks about it a second, and then asks "Do you always
ready your email fully encrypted with PGP like that?
Decoding PGP in you head like that is _really_ impressive!".
"No," says the coworker, "that's just a Perl script I'm
working on".
Y'know, that couldn't be ANY MORE WRONG than an HTML rendering of a .GIF of a psychotic nun in a bondage outfit clubbing a baby seal to death with an Al Gore doll.
(With apologies to the denizen of the Monastery, from whom I stole the idea.)
I'm sure Perl 6 will just be the bee's knees, but I have long since switched to Ruby (or Python if I need certain libraries). As I get older, the philosophy behind Perl (more than one way to do it) really gets on my nerves.
So, I'm interested to see Perl 6 when it comes out, but I sure as hell won't be using it for anything.
Also I'm looking forward to a common runtime between the three languages so I can use Perl modules from Ruby. Now *that's* the best of all possible worlds, eh?
I have been using Perl for years now, and I have to say, its not been the best language to use.
/me nods his hat to Perl6.
Being one who's never gone along with the best methods of coding, I've stuck with Perl for the past few years. I deem myself pretty proficient in it, and I find a new plethora of exploration available to me now that Perl6 is out.
The fact that Perl6 is now a subroutine rather than hardcoded allows me to directly stream the formatting through the test. This is immensely helpful, for it allows me to organize the code more efficiently and get more out of my hard worked code.
Sure, some parts may seem like a step back, but this new versions is much simpler to use, and has some huge advantages that all coders should get use from.
Programming in assembler allows the programmer to create machine instructions tailored to a specific processor. This allows her to do things that are beyond the capabilities of any JIT optimizer or bytecode interpreter. If it assembles to VM bytecode, it's not assembler.
I have always thought of C as high level assembler, and C++ as object oriented high level assembler.
Virtual Machines really seem to be the way of the future. But I am really not sure how I feel about them yet.. Parrot will have to prove itself yet, especially with the aftertaste .net and java have left in my mouth.
Sounds like an interesting idea though even if only for a neatly compiling language
One of the reasons I love Perl (cut my teeth with Perl 4, now write a lot of Perl 5 code) is that it is a virtual swiss army knife of programming languages. There is a lot of power in there, but you can choose to use only as much as you might need. The "TMTOWTDI" ethos also appeals to me. And, in reading the updates on Perl.com, I see that this exact same spirit is going into the creation of Perl 6.
.NET announcements and said, "Hmmm...multiple programming languages that all compile down to the same bytecode and execute in the same virtual machine...sounds like a reasonable idea to me!" The Parrot VM is a neat idea, that goes even further than .NET since it's multi-platform, and definitely will be very nice when it's finished. But I feel like it's going to delay Perl 6. And as nice as Perl 5 is, languages like Python and PHP are beginning to surpass it in feature set and ease of use. I don't want Perl 6 to be irrelevant when it finally shows up.
So why am I worried? Well, it feels like Larry saw Microsoft's
Also, like a very impatient, immature kid on December 23, I want my Perl 6 now, damnit!
But, I trust the Perl 6 team. They're smart people. Read the newsgroups and the forums, and you'll agree. When Perl 6 and Parrot are ready for prime-time, I am pretty sure that I won't be looking over at Python and PHP and feeling guilty anymore.
Ah well, back to coding...
Blogging Weight Loss, Distance Education, and more at verlin.com
#!/usr/bin/perl
,1,0,0);unshift@s,$_,$_ for 1..$e-1;unshift@s,$e;= shift@m;push@p,$a=shift@p;$d?$a?++$x:++$y:$a?--$x: --$$ e<10?$v<10?0:'':'').$v++,for 1..$_}
($e,$x,$y,$v,@m)=(shift,0,0,1,1
@p=(1,0);for(@s){push@m,$d
y,$l[$y][$x]=($e=>10?$v<10?'00':$v<100?0:'':
warn"@$_\n"for@l
Next time, you might want to try reading the article a little bit closer next time. ;P
Perl6 does not assemble to VM bytecode anymore.
Perl6 now assembles to assembly.
ever wanted to program in an object oriented assembly language?
Yes. However, some nights when I drive home from work I eye a bridge abutment thinking I'd like to bury my car in it at 140mph. So I'm not certain that whether I'd like to do something is a great way to evaluate it. What's your point?
BTW, is there a simple way to disable an airbag? Isn't there supposed to be a switch someplace? Thanks.
Maw! Fire up the karma burner!
I am sure something is coming down the pike, but making a huge announcement like a major rearchitect puts a lot of developers in suspended animation - unwilling to invest more time mastering and extending the "end-of-life'd" perl 5. Many of those people are now looking at other options.
As an aside, I'm not sure where the consensus is coming from for the new language proposals - the code samples in Larry and Damian's writings are becoming more and more cryptic. I wonder if they are making perl 6 to unapproachable by new coders.
It's too bad that the teams had been only joking about joining forces. If the teams had worked together to create a conceptual clone of .NET wherein Python and PERL could be used interchangeably in the same runtime, the OSS developer base would be very well off right now.
Think about the possibility. First port PyQT and wxPython to parrot. You write your GUI code with Python and byte compile it to a neutral Parrot format. You need to do complex substring matching so you write some good reusable functions that take advantage of PERL's string handling capabilities and then byte compile them. Load them into the event handling code and you've got a great hybrid.
What would be really cool would be to see Java and a form of OO BASIC ported to Parrot.
Click here or a puppy gets stomped!
Not once did I ever say I had Perl6, which I assume you're implying.
Being an experienced coder, I was able to determine what this update would allow me to do, and I listed those. I don't need the program to know what it means for my coding.
So,please, hold your tongue before calling "troll" on my posts. =P
Then there are the practical issues - will Parrot be fast enough and mostly bugless in time for Perl 6 to sit on top of it? I am concerned that we will need eighteen months of point releases and we haven't even had an alpha yet. Meanwhile people are looking at Ruby, Python, Mono/C# etc.
I recommend they just wrap up whatever concepts they have now and start moving toward an alpha. If we don't see one in 2004 I think most people will have moved on.
... ever wanted to program in an object oriented assembly language? ...
God no. It's bad enough when a high level compiler attemps to guess what you want (C++, etc)... it'd be horrid if ya had to have something supposedly machine level guess...
and I can say I love the new stuff. No less powerful than regex, and no less obscure, easy to learn, use and abuse. Slightly easier to read and understand, though still tricky. Eh, if we had that in the pre-ncurses times! :)
And for those who hate Perl, it's still worth reading, for great texts used in the "text formatting examples" like a recipe for 2 doomed souls or 10 reasons why you didn't do your English Lit. homework.
45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
but Parrot is really starting to excite me.
The main reason being it's potential use as a generic high level "ABI" of sorts. Look at GTK/GNOME for example. The developers choose to use C as the base language, largely because it was the easiest language to create bindings for - everything can link to C. But the problem is that C only implements procedural concepts. Anything else must be crafted from hand, like gObject. So you end up reimplementing all the features of a high-level object oriented language, in C, and often this implementation isn't even as efficent as the high level language's implementation. On top of that, when create bindings for a high level language, you wrap all of these gObjects inside of a native language object, and end up with double the overhead. So what it comes down to is that you worked four times as hard, and came up with something twice as slow, just to be able to have an object oriented library that many languages can link to.
Parrot has the oportunity to be for object oriented languages, what the C ABI has become for procudural languages - a common interface for programs of different languages to communicate. Imagine having high level libraries, that can be efficiently used by python, perl, ruby, befunge. Or having scriptable applications that are not just scriptable by one language, but by anything that targets parrot.
When you add to that they fact that it will be cross-platform, and more efficent then most of these high level languages were to begin with, it's hard not to get excited.
And I just started learning Perl 5...
I don't expect to make much sense of these writings just yet. Sure, they're fun to read, so that I have some idea of all the new things they're doing, but beyond that *shrug*
:]
I intend to buy the new camel book from O'Reilly (just like I did for Perl 5), which will surely help me learn all the new bits (and, quite probably, help me relearn the bits I only thought I knew).
I wonder if they'll do anything new with regular expressions? (I haven't RTFA just yet, and I don't remember anything from the past exegesises just now.) They always were my favorite bit of Perl for some reason...
get Parrot. Perl6 is there. Alpha, not beta. Good riddance.
It's better to be the foot on the boot than the face on the pavement. ~~ tkx Kadin2048
Perl is the most beautiful language I've had the pleasure of learning. Lots of folks complain that perl must be ugly since it's so easy to write really butt-ugly code in it; but it's also very easy to write mindblowingly powerful, clear code. Enough thought has been put into the language design that you can abuse most aspects of the language and still get what you wanted.
It's easy to forget, when using perl, just how, well, tedious, it is to work in C (let alone C++) or shell or Java or even, yes, Python.
The exegeses so far have been full of fabulous goodies to use and abuse. The main problem, as others have pointed out, is that perl6 is still largely vaporware.
No, but if I wanted to, I could already, thanks.
Ceterum censeo subscriptionem esse delendam.
After reading through a lot of this article and being blown away by the genuinely powerful and, dare I say it, awesome abilities that have been given to the form function, I'm left asking myself:
... that's all it is, some geek's personal project that doesn't really seem to have much relevance to the real world.
"Who gives a crap?"
Most the projects I've worked on for the last few years have predominately displayed text in web pages. Almost all the reports produced have been generated as HTML and then printed as necessary. The only text output done has been generally into log files, where you really don't need a lot of formatting.
While this is obviously a really great, well thought out piece of coding,
Maybe I'm just missing a huge community of people who spend most of their time looking at command lines and printing out reports in fixed width fonts.
"ever wanted to program in an object oriented assembly language?"
No.
Last.fm - join the social music revolution
The new Perl "form" stuff sure seemed familiar for some reason, but I couldn't figure out why. Then I figured it out .... anyone else remember the "print using" statement in BASIC ????
See more.
Not quite. Weak is not the opposite of dynamic, but the opposite of strong. Type systems may be either weak or strong, and may be either dynamic or static.
A weak type system will allow implicit type conversions, even those that are 'lossy' or improper. For example, converting a float to an int without requiring a cast. Or, more importantly, treating memory references (pointers) identically to integers. Pointer arithmetic is an abuse of a weak typing system.
Strong typing requires explicit casts and will throw errors where casts do not appear. Java, Lisp, Python are all strongly typed. Haskell is _really_ strongly typed. When you cast a object to type Object in Java, you are losing type information, but you are doing it _explicitly_.
C, Pascal, and Java are statically typed. Variables are created with a specific type in the code, not on demand. Python and Lisp are dynamically typed -- a variable's type is determined at run-time.
For example, in C:
int foo( int a, int b );
declares a function that returns type 'int' and takes two arguments a, b, both of types 'int'.
In Python:
def foo( a, b ):
declares a function that may or may not return a value (and whose type is known only at run-time) and takes two arguments, which may be of any type (although, internally, the program likely assumes a type).
There are some quirks in the type systems of many languages. In Java, for example, "str" + 3 doesn't have any normal meaning, but the developers have defined any operation using a string as concatenation. In Python, and in most languages, such an expression will either return an error on compilation (static) or when running (dynamic).
However, all combinations are possible and type systems are a fertile area of research.
(missing a huge community etc.) many, many projects need the ability to write in fixed-width fonts to a printer, p.ex. the output of your supermarket cashier ticket / credit card ticket. This is a real world-class application to formats (because those little printers are best suited to the job and they write in monospaced). There are others, many, many others.
It's better to be the foot on the boot than the face on the pavement. ~~ tkx Kadin2048
There's this CPU that has clearly been designed by a complete bunch of morons... can you believe the documentation listing the opcodes is 566 pages long?
Obviously this x86 thing will perpetually be 6 months from doing anything useful.
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
Where oh where do you get that? Perl 5 is a live and well, and has seen quite a large boost in support and development in the last several years. Right on the heels of the overdue perl 5.8, we've got 5.10 coming down the pike(still a ways off).
There have been nice improvements in the perl 5 core, stable threading support, more useful core modules, major updates for unicode support, etc.
Then there's POE (poe.perl.org), and other stuff.
Perl 5 is far from being "end-of-life'd".
Sticking feathers up your butt does not make you a chicken - Tyler Durden
Check out Amazon. The net's largest retail site seems to put a heavy emphasis on Perl. You don't see a whole lot a php in the job requirements there do you? There may not be big growth in Perl but it's still in big demand.
Judging by the number of sites that depend heavily on Perl I can assure you that it's not going to be sidelined soon.
It's true that PHP is a fantastic language for small sites. Mod_perl is a hog when it comes to memory but memory is cheap and mod_perl is tried and tested. There's a reason slashdot uses mod_perl to power its site.
Don't ever write "PERL" in correspondence with a diehard Perl programmer.
Only perl can parse Perl.
Sticking feathers up your butt does not make you a chicken - Tyler Durden
You are comparing a specialized tool to a general one. I wouldn't use PHP to parse my log files and do heavy file comparisons. I believe that web professionals using Perl are a minority of the total user base.
use Parrot::BuildUtil;
there's no file with 'BuildUtil*' name in the source distro.
Conclusion: not ready for prime time.
No electrons were harmed creating this post, though some may have been subjected to electrical and/or magnetic fields.
An object-oriented assembly language -- what, you mean like zasm?
Cut that out, or I will ship you to Norilsk in a box.
How does Perl templating mechanism to other templating implementation like Velocity? I would like to know what pro/cons has each one or others that /.ers may have used.
"I think this line is mostly filler"
It's intriguing how the social significance of assembler programming has drifted over the decades.
When I met my first computer, an IBM 1440, Assembler was the only thing they taught us and we developed some very useful application software to run within its 12,000 characters of decimally addressed magnetic core memory.
Even through the transition to System/360, assembler was it, though there was Fortran on the 7044 at uni and PL/1 was coming as a promised advance on both Fortran and Cobol which others had started to use but our place did not touch.
Then Ed Dijkstra came to town and I was an immediate convert. Nowadays we would call in "professional development". But still we programmed in assembler, and I could not see any reason that my assembler code would not benefit from following the principles of structured programming.
Years later, a job interview became quite confused when the interviewer did not understand that assembler programming and systems programming had not always been synonymous and that there were application programmers who had also used assembler, especially back when any of the functionality we might now expect to find in an operating system was basically hard wired.
Now, I do know that "structured programming" is not strictly synonymous with "object oriented" but they are also the major then and now approached to encapsulation, which remains a good thing. I also know that Parrot is "byte code" rather than a true assembler language, and don't expect any of this will convince me to take Parrot up in preference to the real thing (Perl of course) at this late stage of my programming life.
-- Our systemic servants do not good masters make.
Is it just my imagination or are the two tops of this article linking perls extended new plain text rendering capabilities with perl 6 and the parrot vm? Is that what Larry has been working towards all this time? Better faster plain text reports?
Ouch. (-:
You know whats worse than object oriented assember? A large PHP project. Dont you love global() and lack of scope?
Perl is more maintainable, and faster than PHP when comparing apples to apples. Perl has more available modules, and they actually work! PEAR had admirable goals but fails miserably because of the terrible code quality and documentation.
mod_perl lets you write apache modules in perl, thats an unbelievable win over writing PAGES in php. Then again, most web professionals dont seem to understand that distinction.
I think PHP is a dying language, almost everyone I know that worked with PHP when version 3 came out has moved on to other languages. The language is broken by design and everyone realizes it sooner or later.
Perl made us productive and inspired new languages like Ruby which took some great features from Perl and made a language actually a pure joy to use. http://www.ruby-lang.org
Perl6 will finally cleanup a lot of baggage to make it more competitive with newer/cleaner/easier languages (like Ruby). If done right, it will recapture the former Perl users who migrated to Python and/or Ruby.
Parrot will give us an alternative to the single-language Java VM and the multi-language Microsoft CLR. We can only hope that it leverages the mistakes and successes of both JVM and CLR to provide something that is better than both.
While it shouldn't be limited in a particular CPU, it should take reality into consideration and make it easy to aggressively optimize for AMD/Intel (98% of desktops) and IBM PPC97x (Macs, XBox 2, Playstation 3, future IBM Linux workstations).
Actually, IIRC, slashdot's coding started before PHP was ever a contender. I'm not sure if mod_perl was out before PHP3, but I do remember rob singing the praises of mod_perl way, way, way back in the day.
I agree with you though - I wouldn't want to write slashdot in PHP - perl's much more flexible (by itself anyway - never ran mod_perl myself).
Those who can't do, teach. Those who can't teach either, do tech support.
and at least, you can write *short* code that is well formated too - unlike programing languages like java who force you to write long code - but long doesn't mean "clean"...
...is exactly that: Perl supports ten ways of doing X, so you're free to choose #3 for your code.
And your coworker is free to choose way #7, and the sourceforge project whose code you're extending chose way #2, and they're all incomoatible.
So even though you're free to choose which way you want to do something, you still have to learn and understand all ten ways if you plan on completing the project and getting paid. And then maintaining it.
Yeah, you could pick one way and enforce it with corporate coding standards (and hope you pick the right one), but then there goes the advantage of ten different ways. Or the sourceforge project could document the choice in its HACKING.README file, but then the coders who only know six of the ten ways are locked out.
All the coders I know at big companies tell me that this is exactly why Perl is banned -- at each of those companies -- for official work. There's too much variance between each way of doing X for large scripts to remain maintainable across multiple serial coders.
(I suspect most of the people who are going to post followups flaming me have only ever had to maintain their own Perl scripts, without ever inheriting a pile of mission-critical scripts from somebody whose choices were all different from yours, and who's not available for questioning.)
You cannot apply a technological solution to a sociological problem. (Edwards' Law)
I wish I had something inciteful to say, but I don't. However, I have to jump at the chance to type, "exegesis". It's just such a cool word. I wonder how long it will be before Fox News claims they own it.
You couldn't pick a better name for such a utility.
Turbo Assembler (later versions) from Borland did support a level of object orientation. It actually shipped with examples of object oriented assembly code.
OOPs in TASM
Sure, lets add operators that can't even by !@#$% typed. Yes, you can add :is ASCII(!@#$%) but that kind of misses the point.
Not only does Larry get the colon, he gets the entire unicode set!
I just read an article about this,
the x86 design was all based on minimizing chip real estate and not in on providing the best way to do every function. RISC and now IA-64 is a consequence of this philosophy where all tough problems and complexity is pushed onto higher level compilers. On the higher level it becomes to complicated to take care of the problems and it is pushed further up to the operating systems and script languages of today.
Four principles that will inevitably lead to a failed project:
PRINCIPLE 1. If you can't solve a problem, give it to someone else.
PRINCIPLE 2. If you can't choose an alternative, let the user get access to all.
PRINCIPLE 3. If there's an adaptable tool, use it rather than developing a new one.
PRINCIPLE 4. If a bug is found during implementation, try to get around it instead of solving it.
These were formulated in 1976 and translated from the article in Swedish
Not knowing anything about Parrot, there seems to be some support for identifying what programs really does and solve the problems at a really low level. Redundant OP's was a bad thing by the same principles, but an underlying hardware implementation might be able to divide the problem even further.
Other work by Bud Lawson Proper function distribution in computer system architectures, Open complex based systems, (I might even read them some time...)
Yeah, and you're probably one of those idiots who thought I was attempting an analogy.
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
I don't get it, since I have never worked with Perl, so I am asking the perl programmers out there: what is so special about plain-text reporting ? there are fine tools out there that can produce beautiful html reports that plain text will never be comparable to. I understand that text reports may have their uses in the back office, but that accounts for a small percentage of overall reporting.
Furthermore, 'reporting' is a not a feature of a programming language. The same report package could be done with C++, for example. Will Perl 6 bring something *really new* in the programming languages department ?
"now that Perl6 is out". It isn't.
"Perl6 is now a subroutine" Beg pardon? Do you mean form is a subroutine in Perl6? Or what?
"stream the formatting through the test" What???
Mods, clue up!
Maybe they all go off and become Perl programmers instead of going to grad school?
But seriously: academia has very little room for people with interests like Damian's. Academia does not encourage the kind of research that would make professors better teachers, instead the research should be as esoteric and far from undergrad subjects as possible. And grad students who like to "hack" are told to get over that impulse despite the fact that it would probably make them better teachers.
..and it doesn't actually look that bad. =)
No matter how fast light travels it finds the darkness has always got there first, and is waiting for it. (T. Pratchett)
Maybe so, I can't say. But from the way I understand the design of the system, getting Perl6 to run on Parrot is "only" going to be a matter of writing an interface wrapper to bootstrap it. They have a reasonable idea of what the basic functionality needs to be, so Parrot has been written to meet those needs -- and the needs of other languages (esp. Python) as well. [1]
From what I understand, the Parrot group wanted to wait for a reasonably complete Perl6 before they started, but when it became obvious that this was going to take a while, they decided to just get started. Surprisingly, work ended up happening very fast, and we've ended up in the strange but possibly useful situation of having a roughly complete Parrot engine available today, two or three years after development started, even though the Perl6 design is still evolving.
This isn't necessarily a bad thing though. No one wants to throw out the expertise that thousands of people have built up in learning Perl5, so even when Perl6 is available, Perl5 is still going to be around -- if only to run the huge number of Perl5 scripts that will never be rewritten for the new version of the language.
With that in mind, one of the design criteria for the Perl6 project is robust Perl5 support, and with Parrot at the level it's at now, it should be possible to write a Perl5 interface to the VM without waiting for Perl6 to be finished. Because the design of Parrot is so much cleaner -- and faster -- than Perl5's current internals, this might actually speed up existing code, and could even make the painful process of developing with XS a thing of the past. It could be a benefit to Perl5 in the near future separate & apart from Perl6's progress, if & when this interface comes to fruition (which, according to the last plans I took a look at, it definitely will).
So yeah, this is probably the reverse of how things "should" have been developed, but there are some positive things about the current situation... *shrug*
******
[1] Python needs support for certain things -- I think co-routines was the example Dan Sugalski used in his talk -- that Perl doesn't currently care about, so they've gone in to Parrot. If anyone wanted to expose this functionality to Perl, it would be easy enough to do so, and sooner or later someone probably will.
DO NOT LEAVE IT IS NOT REAL