PEP 3107 and stronger typing (note: probably a newbie question)
Diez B. Roggisch
deets at nospam.web.de
Thu Jun 21 03:01:47 EDT 2007
kaens schrieb:
> On 6/20/07, Diez B. Roggisch <deets at nospam.web.de> wrote:
>
>> That is exactly the problem - there is no "some more" static typing.
>> There is static typing - or not. You can't have it "just a bit".
>
> Couldn't a language be made so that if you declared a variable like, say:
>
> string foo = "I'm a string"
>
> it would be a string, and always a string, and if you declared a
> variable like
>
> foo = "i'm a dynamic variable"
>
> it would be considered dynamic?
>
> This doesn't seem like it would be too hard to add in to a language
> that already had dynamic typing (But then again, I am inexperienced -
> although interested in - language design).
It isn't too hard. All it needs is a bucket at a name that contains a
type reference.
But what you DO with that is the hard thing. Just enforcing types at
runtime is easy. Making JIT-compilation for such code and then put
guarding statements around it - somewhat harder, but easier than full
type inference.
But the OP wanted compile-time static typing checks. And _thats_
virtually impossible unless _everything_ is statically typed. And even
if it is, the ClassCastExceptions of Java prove that.
Take this classic example from the java-world that is statically
correct, but will fail at runtime
class A
class B extends A
B[] bs = new B[100];
A[] as = bs;
as[0] = new A();
The problem here is that the as-array has less type information, and
because of polymorphism rules is allowed to actually hold an B-array.
But that can't allow mere A-objects to be assigned to it!
So the JVM introduces a runtime type check here.
Mixing static and dynamic type information like proposed will only make
this problem more severe, as you know even less about your types. Thus
the whole purpose of static checking vanishes, and the whole thing
shifts to a purely runtime checking.
> It seems to me like this could be really useful, but I'm not aware of
> any language implementing something like this.
Which _might_ be a hint... :)
Diez
More information about the Python-list
mailing list