Re[4]: Какой полиморфизм используется в ФЯ?
От: Nick_ Россия  
Дата: 25.10.04 16:04
Оценка: 3 (1) +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Nick_, Вы писали:


VD>Статический когда выбор конкретного варианта осуществляется компилятором (перегрузка и т.п.) и динамический кодга конкретный вариант выбирается в рантайме на базе динамического выбора.

Я не вижу тут разницы. Если компилятор С++ знает тип объекта у которого вызывается виртуальный метод, то он может подставить сразу вызов необходимого метода в обход таблиц виртуальных функций.
В С++ есть четкое деление на "статический" и "динамический" полиморфизмы только потому, что у них различается синтаксис. Если хочешь рантайм поддержку приходится писать x->foo(y);
В функциональных языках если компилятор знает тип аргумета, то вызывает конкретную функцию, если не знает, то это делает рантайм. В обоих случаях вызов записывается одинаково: foo x y

N_>>Я знаю только ad-hoc и параметрический полиморфизмы.


VD>Не думаю, что этот термин реально прижился. Не все из Википедии нужно брать на вооружении.


Может этот термин и не прижился в рядах web программистов, но в рядах ученых он используется.

N_>>ad-hoc — это перегрузка(overloading) и то, что обычно понимается под полиморфизмом в С++.

N_>>parametric — это то, что в функциональных языках понимается под полиморфизмом.
N_>>Шаблоны в С++ — это подобие параметрического полиморфизма.

VD>Это все не типизация. Это общие разрозненные слова. Реально имет значение смысл полиморфизма: создание универсального кода (процедур, функций, методов) или типов, т.е. так чтобы код и типы можно было абстрагировать от конкретных используемых в них типов.


Сложно формально описать систему типов в функциональных языках. Наверное это проще сделать на примерах.
Я на досуге попробую найти хороший пример на хаскеле.

VD>Ну, а дальше можно выделить два подкласса — это статический полиморфизм и динамический. Динамический требует выбора в рантайме, статический ведет к генерации множества вопложений полиморфного кода и типов.


Вот этого не надо. Это дело компилятора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.