[Types-sig] Basic questions

Greg Stein gstein@lyra.org
Tue, 21 Dec 1999 12:37:48 -0800 (PST)


On Tue, 21 Dec 1999, skaller wrote:
>...
> 	If I may: there is an issue here which
> some people may not have realised: recursive types.

These are not possible in Python because definitions are actually
constructed at runtime. The particular name/object must be available at
that point in the execution.

> In an interface file, this can be handled by 
> two passes.
> 
> 	In implementation files, it is much
> harder, since scoping rules are dynamic.
> This is a good argument for interface files.
> Example:
> 
> 	class X:
> 		def f(y:Y): ...

This fails. Y is not defined.

> 	class Y:
> 		def g(x:X): ...
> 
> Resolving this in a single pass requires
> backpatching, which is messy: but using two
> passes leads to difficult ambiguities
> due to renaming:
> 
> 	class X:
> 		def h(): ...
> 
> Ok -- so now, which X does the X in g refer to?

Y.g referred to the X that existed at that point in time.

> In python, names are bound dynamically, which resolves
> the problem. In an interface file, renaming can be banned.
> Can it be banned, for classes, in implementation files?

No need to ban it. Y.g refers to the first X. Simple.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/