Zope 3.0, and why I won't use it

Josiah Carlson jcarlson at uci.edu
Tue Nov 16 20:50:43 EST 2004


Ian Bicking <ianb at colorstudy.com> wrote:
> 
> Josiah Carlson wrote:
> >>Since the actual need for type-checking is extremely rare, I contend it
> >>should not _at all_ be a candidate for a syntax to facilitate it.  Since
> >>the actual need for adaptation is much wider, I contend it's the one
> >>obvious choice for the "nice syntax" if any.
> > 
> > 
> > Sounds reasonable, but there will be a group of people who will beg and
> > plead for type checking, because they want "static type checking on
> > function call and return".
> 
> Yes, but they've been begging for it for years.  They seem insistant 
> that this Python Thing will never catch on without these important features.

And they can keep insisting.  It hasn't stopped it from catching on yet
*wink*.


> Anyway, a much more general and useful feature would be contracts. 
> Which is just to say, a formal place to put constraints on input and 
> output for a function.  Contracts could include type checking -- 
> sometimes quite validly -- but not necessarily.  There's no type that 
> can indicate "only valid username strings" or "only integers contrained 
> by some global variable".

Certainly not, but an arbitrary 'argument validator' decorator is just
minutes away from someone implementing it (and likely has more than a
few times already).


> > @ multi_dispatch_to_methods
> > class A(object):
> >   dispatch = dispatch_factory()
> >   
> >   @ dispatch(int)
> >   def foo(x): ...
> > 
> >   @ dispatch(float)
> >   def foo(x): ...
> > 
> > 
> > It may have a couple warts, but it is implementable today.
> 
> Phillip Eby just did this, in like the last week.  It's very cool:
> 
>    http://peak.telecommunity.com/DevCenter/VisitorRevisited
>    http://www.eby-sarna.com/pipermail/peak/2004-November/001916.html
> 
> It looks similar to what you were thinking:
> 
> class A(object):
>      @dispatch.on('x')
>      def foo(x):
>          """This is a dummy function, for documentation purposes"""
> 
>      @foo.when(int)
>      def foo(x): ...
> 
>      @foo.when(float)
>      def foo(x): ...
> 
> Of course, you can use interfaces in addition to types, and you can also 
> use arbitrary expressions (e.g., @foo.when("x % 2") and @foo.when("not x 
> % 2") to dispatch odd and even numbers separately).

There goes Phillip Eby going off and doing something reasonable again.

 - Josiah




More information about the Python-list mailing list