python improvements (Was: Re: New Language)
Steven D. Arnold
stevena at permanent.cc
Fri May 12 17:34:30 EDT 2000
At 02:41 PM 5/12/2000 +0000, pohanl at my-deja.com wrote:
>Ok, here are some ideas for the new language...
[...]
>This new language would have components with no constraints on values
>passed to it.
First let me say that I love Python. It's a dazzlingly good
language. When I started programming perl, I marvelled that there was a
language that went so far out of its way to make the programmer's life easy
and enjoyable; I still owe perl a debt of gratitude for being the first in
that category, at least the first I was exposed to. Perl wasn't a
theoretical purist's language; it was a language intended to help the
programmer, period.
However, putting sentimentality aside, python is both theoretically
brilliant and extremely helpful to the programmer, as much or more than
perl in every regard I care about. From the work I have done already in
python, I can say without the slightest hesitation that manipulating
complex data structures, using and writing complex class hierarchies, etc,
is far easier in python than perl. Python is definitely more pleasant to
read, more pleasant to write, syntactically far clearer....etc. I would
far rather maintain a complex python project than a complex perl project.
Having said that, I feel python can use some improvements. (So could any
world-class Olympic athlete.) I will allow that this point of view may be
a misperception on my part due to an incomplete understanding of the
langauge; and I invite anyone with more knowledge than I to show me how the
following goals can be cleanly attained in python.
1. I'd like an equivalent to perl's "use strict" pragma. It's annoying to
have to be so paranoid about making a typo in a variable name. I'd like
the compiler to be able to catch those errors for me.
2. I'd like the ability to specify that a certain parameter or variable is
of a given type. This can help prevent a class of runtime errors (though
of course we could use introspection and try/except blocks, but that adds
code that, with a type declaration, could be avoided). Furthermore, I
would find it very useful when I'm trying to understand a method or
function. Often I see a parameter and I have no idea what type the
parameter is supposed to be. What class do I look in to find the method
this var is supposed to be using? I have to guess. If I had a
sophisticated class browser for python, this task would be easier, but it
could still involve guessing.
One addendum to the above: If I declare a variable to be of a given class,
I should also be able to pass any subclass.
3. I'd like to allow for the formal declaration of protocols a la
Objective-C. A protocol is a set of method calls that an object can claim
to support or not. Protocols can be defined to support a variety of useful
behaviors. For example, drag 'n' drop might be implemented as a protocol,
where you accept a given data stream as part of a protocol::drop
method. This also prompts an extension to suggestion (2) above: I should
be able to declare that a given parameter requires an object that conforms
to a given protocol. Then, instead of being a specific type, the object is
guaranteed to support the protocol (actually, its class has registered
support for the protocol and implements the required methods and perhaps
the optional methods).
Don't misunderstand the intent of these suggestions: I do not want to make
python more like C++ in the sense of imposing a bunch of annoying
strictures. I merely want to give the programmer the option of being more
restrictive, especially if it helps ferret out bugs early. Let's give
python programmers the option of using some of the features of C++ that
find bugs early in the development process, even if we don't require
programmers to use those facilities.
Nuff said. Python kicks ass. I'm a convert!
--
Steven D. Arnold Que quiero sera stevena at permanent.cc
"We choose to go to the moon in this decade and do the other things, not
because they are easy, but because they are hard." -- John F. Kennedy
More information about the Python-list
mailing list