Господа, такой вопрос:
1. корректно ли сказать, что динамическая типизация по сравнению со статической — это замена отношения "is-a" отношением "can"?
Т.е., очень обобщенно говоря, два значения вступают между собой в некоторые отношения, скажем:
a.function(b);
Для статической типизации — нужно отношение is-a:
class A
{
void function(B _b)//чтобы установить отношения a.function(b), должно выполняться соотношение b is-a B
{
_b.foo();
}
}
Для динамической — нужно отношение can:
class A
def function(b) //чтобы установить отношения a.function(b), не должно выполняться никаких соотношений, но...
b.foo; //...вот здесь потребуется соотношение b can foo
Это единственное отличие динамической типизации от статической?
Если да, то вопрос:
2. Если среда (компилятор, IDE) проверяет отношения can в design-time — это какая типизация — динамическая или статическая?