Tue, 06 Jul 2010
Parsing Perl 3: Perl and Minimalism
One ring to rule them all, one ring to find them,
One ring to bring them all and in the darkness bind them.
One Idea to Rule Them All
Ever since the 50's,
the fashion in language design
has been minimalism.
Languages were designed around paradigms,
and paradigms were judged on elegance.
If your choice of paradigm was lists, the result was LISP.
If you decided on strings, you invented SNOBOL.
Arrays, you wound up with APL.
If your reasoning led you to logic, you ended up with Prolog.
If you thought that descriptions of algorithms
must be the basis of programming,
then your fate was Algol.
If assembly language
stayed at the core of your world view,
what you created would be an imperative lanugage
and might look like any of C, BASIC or FORTRAN.
If stacks were your thing,
you created a language that looked like Forth.
And who knows if
the belief in objects as the one paradigm
will ever again see Orodruin and
feel the heat of the flames
in which it was forged.
Some of these languages were totalitarian -- they insisted everything
be shoehorned into their central concept.
I recall some very unpleasant struggles with early dialects of
SNOBOL, LISP and Prolog.
Imperative languages tended to be more elastic.
But, while the strictness of adherence varies,
every language invented over the past 50 years
bears the clear stamp of minimalism.
Minimalism is not without its triumphs.
Scientists, acting in the spirit of minimalism,
ruthlessly brushed aside long-held ideas
when they could not prove their worth,
and much of 20th century science is a result of this.
In our field,
Unix operating system
is a very successful example of the application of minimalist
Minimalism and its Discontents
But, over time, it has become clear that the less strictly
a language adheres to its central paradigm,
the more useful it is.
For the totalitarian languages, success came more
in the form of influence on other systems
than in direct application.
People discussed pure LISP, APL and Prolog.
They used C, BASIC and FORTRAN.
Unfortunately, principles tend to guide thinking,
and not vice versa.
Established principles become established
precisely because, first and foremost,
they make sure they have the last word
when it comes to judging their own value.
When our principles fail us, our first reaction,
typically, is not to abandon those principles.
minimalism remains the dominant ideology in computer language design.
When dissatisfaction with minimalism emerges,
it tends to take the form of "more minimalism".
The early history of programming languages is to a large
a record of attempts
to use minimalism
to solve the problems of minimalism.
The Principle of Plenitude
[ Orthogonality is ]
"all very well if you're trying to define a position in a space.
But that's not how people think.
It's not how natural languages work.
Natural languages are not orthogonal, they're diagonal.
They give you hypotenuses."
-- Larry Wall, from a Dr. Dobbs interview
On December 18, 1987, I was waiting for the
release of Perl 1.0 to comp.sources.misc.
I downloaded it and started programming.
It was a paid project, one which I had bid fixed price.
I had planned to use mixed shell and C for this
But among those in the know,
the advance buzz for Perl 1.0 was good.
Larry Wall was not the name he is now,
but he already had
a very solid rep from rn and patch.
I decided to take a chance,
and the result was profitable.
To my knowledge,
Perl was the first language to actively embrace plenitude.
Bourne shell tightly followed a "shell command" paradigm,
Anyone who tries to use Bourne shell as a general-purpose language
(and many do)
has experienced what it is to fight line-by-line
against a paradigm.
AWK easily could have been the first non-minimalist language.
But while AWK followed its script-editor paradigm
loosely, it never actually broke away from it.
Perl borrowed liberally from Bourne shell and AWK, but
above all it embraced plenitude.
If there is one sure sign that minimalism
is at work
in a language design,
it is when those controlling the evolution of a language
refuse to add a useful feature solely on ideological grounds --
because the new feature does not fit a core design concept.
From day zero,
Perl has given cool new hacks the priority over ideology.
I'd hesitate to call either AWK and or Bourne shell "minimalist",
but even over their evolutions,
the heavy hand of minimalism
This is part of a series which explores
the technical details of Perl parsing.
Since this post is devoted to matters of history and philosophy,
it might seem to be a digression.
It is not.
Working code is never just code.
As we will see,
perly.y is one of the better examples of that fact.
posted at: 14:56 |
direct link to this entry