Front page | perl.perl6.language |
Postings from October 2002
Re: Indeterminate math
From: Mark J. Reed
October 14, 2002 19:54
Re: Indeterminate math
Message ID: 20021015025408.GF9619@charm.turner.com
On 2002-10-14 at 20:49:52, Michael G Schwern wrote:
> > It is also, as an example, the behavior required by the ECMAScript
> > specification.
a lot of (IMHO) undeserved criticism. The name is a blatant marketing
ploy, and abuses abound in web pages, but there's really not much wrong
with the core language, and there are even a couple things I wouldn't
mind seeing Perl6 borrow from it.
I'm going to continue my train of thought as it wanders directly off
the rails of Perl6, so feel free to stop reading this now. :)
prototype-based inheritance. (I think that term is a misnomer, btw -
if you create an object using a prototype, then change the prototype,
that later change is visible through the earlier-created object.
That doesn't sound like the behavior of what we normally mean by
the word "prototype" in English. But it's the standard term.)
Since it is prototype-based, the syntax for defining (or faking)
classes, and subclasses thereof, is a little clunky; and it has no
data hiding - everything is effectively a public associative array,
But both of those things could be said about Perl5, as well, although
Perl5's syntax is less clunky.
On the single axis of O-O purity - which I am by no means advocating as
Python (which is itself above Perl5) and below Ruby.
It has the usual stuff - inheritance (albeit prototype-based);
automatic type coercion among strings and numbers and Objects; regular
expressions (syntax stolen from Perl5, of course); dynamic arrays
(with a variety of manipulation methods that were also stolen from
Perl5: splice, slice, shift, unshift, push, pop); and associative
arrays (every object is one, really). It also has some a couple
nice features regarding functions:
They have prototypes, but they're not enforced by the
language. A function definition may specify a set of named
parameters, but any function may be called with fewer (in
which case the unspecified ones have the undefined value),
or more (which may be accessed via an array analogous to @_).
An anonymous function/closure may call itself recursively
despite not having a name by which to do so. This in particular
is something I would like to see in Perl6.
There are some oddly confusing things. We were talking about what
to return for "failure" in the context of 1/0. Well, as I said,
has *three* different nil values:
1. undefined (like Perl undef; true of variables that have
been declared but not yet assigned any
2. null (for use when an Object reference is expected)
3. NaN (for use when a number is expected)
Additionally, an attempt to access a variable that hasn't even been
declared yet throws an exception, so that could be considered a fourth
case, although it pertains to variables rather than their values.
in which it runs - the interface to the outside world - is not defined
by the language spec. You can't even write "Hello, world!"
without specifying more information. (Running in a web browser?
Use document.write(). Running under the Windows Script Host?
Use WScript.stdOut.writeLine(). Running under the Mozilla project's
rhino interpreter? Use print().)
sysadmin scripting language "market". For Windows administrators, it has
some advantages: it's already there on modern versions of the OS, and
it's a huge improvement over the previous scripting language for which
that was true, namely DOS batch files. But Windows administrators who
were brought up in the Windows world will probably use VBScript instead of
JScript to access the WSH, and those who were brought up in the UNIX
world will just download ActiveState Perl. :)
Anyway, I'll shut up now. Just don't knock it 'til you've really tried it.
Mark REED | CNN Internet Technology
1 CNN Center Rm SW0831G | firstname.lastname@example.org
Atlanta, GA 30348 USA | +1 404 827 4754