[Zope] The Prefect Python

Jean-François Ménard jeanfrancoismenard@msn.com
Wed, 28 Aug 2002 11:31:29 -0400


Just posted this on comp.lang.python.
Maybe Zope developpers could have comments.

**************
First, a warning:
    - I'm very poor in english.
    - I woke up way too early this morning.
    - It's a long post... (Sorry!)
    - I *love* python. This is not a troll, or anything like that.

Ok. Here we go.

I would like to share my impressions and my comments on Python.  At the end,
I will propose what would be for me the *perfect* Python interpreter.

Background:

I'm working on a fairly big Python (Zope) project since a year and a half.
It's a content management system for a big (19 000 employees) entreprise.
At first, I was the sole developper for the project.  My orders were: "Ok,
choose what you want, do what you want.  We just want one thing: results..."
Lucky, hey? ;)

I had experience in Object Pascal (Delphi), Vb (...), C++ and Java.  I was
new in the company, and wanted to impress my bosses.  After some research, I
narrowed my choices to two options: EJB (Java) and Zope (Python).

I gave a serious look at EJB, but in the end, I chose Python.  I took a
risk.  I don't regret it.  After only 2 months, I had already produced a
working system.  Alone... :)

Opinions, impressions:

At first, I was amazed by the simplicity and the clarity of the syntax. I
*love* the indentation style.  It gives clean and standardized source code.
We are now three developpers on the project, and it's easy for anyone of us
to understand the code of the others.

But...

As project grew up, I started to see some of the limitations of the
language.  I understand that Python was not designed for such big projects.
But it's so powerfull, so clean, that I just wonder what Python could become
with just some (ok, not so minors...) improvements.

I understand that backward compatibility is important too, but the latests
extensions to Python begin to seem locked by past decisions.  I don't like
this tendency to __this__ and __that__ everything.  We loose in readability,
accessibility and clarity, in my opinion...

The Perfect Python (c):

What is missing ?  Well, I'm not a language designer, but I can say what *I*
miss.

    - Interfaces.  Behavior checking is not enough.
    - Private and Public scopes.  Explicitly.  No more __name_mangling
    - Design by contract. Pre and Post conditions.  Could save hours of
debugging.
    - Block comments.  """ """ should be for documentation.
    - Class variables.
    - A cleaner Property declaration.  No separate _variable. Saw too many
newbie posts about that.
    - No more self in functions declarations.  In OOP, this *can* be
implicit. (I know, this is controversial stuff)
    - Standard GUI library.  AnyGui seems to be the solution, but
development seems to have stalled recently...

I tried to write an example of what Perfect Python(c) could look like.  It's
not valid code (duh!),  and it does'nt try to do anything unless give a
sample syntax:
********************
from package1.package2 import module1, module2

public interface MyInterface implements (OtherInterface1, OtherInterface2):
    """ Comments """
    private PrivateClassVariable
    public property MyProperty
    public MyFunction(param1, param2)

public class MyClass(Class1, Class2) implements MyInterface, Interface2:
    """ Comments """

    # Instance Variable
    private InstanceVariable = "Default"

    # Class Variable - Public by default
    static PublicClassVariable = "Default"

    # Class Variable - Private
    static private PrivateClassVariable = "Default"

    public initialize(param1, param2="", param3=None):
        """ Comments """
        # OtherInstanceVariable is Public by default
        self.OtherInstanceVariable = "rien"

        # OtherInstanceVariable2 - Private
        private self.OtherInstanceVariable = "rien"

    private MyFunction(MyParameter1, MyParameter1):
        """ Comments """
        return "Result"

    /*
        Block comment

        function Foo():
            pass
    */

    public property MyProperty:
        """ Comments """
        get():
            """ Comments """
            return self.MyProperty
        set(newValue):
            """ Comments """
            self.MyProperty = newValue

    private testInterface(otherObject):
        """ Interface checking  """
        # Check for interface implementation
        if otherObject implements MyInterface:
            return true

        # Check for multiple interface implementation
        if otherObject implements (OtherInterface1 or OtherInterface2):
            return true

        # Check for class inheritance
        if otherObject implements MyInterface:
            return true

        return false

    private testInheritence(otherObject):
        """ Inheritence checking """
        # Check for class inheritance
        if otherObject implements Class1:
            return true

    private propertyCall():
        """ Uniform call """
        return self.MyProperty

    private propertySet(newValue):
        """ Uniform call """
        self.MyProperty = "new value"

    public functionWithAssertion(Param1):
        """ Design by Contract """
        require:
            """ Precondition """
            Param1 < 1000000
        do:
            """ Function body """
            pass
        ensure:
            """ Poscondition """
            Param1 < 1000000

********************
I have no idea how this could be implemented.  Maybe a PerfectPython
interpretor could be developped on top of the standard interpretor?

Any comments?  Anybody interested to start the project? ;)