Здравствуйте, Курилка, Вы писали:
К>Вот возник вопрос:
К>в ФЯ есть полиморфизм типов, что имхо есть очень близко к шаблонам C++. Наряду с шаблонами C++ есть generics Java и C#, но там используются несколько иные механизмы. Так вот — какой из подходов будет ближе к тому, как это работает в ФЯ?
К>Заранее сенкс за любую инфу!
В смысле статический или динамический?
Думаю, оба варианта. Тот же патер-матчинг — это по сути динамический полиморфизм. Ведь вариант функции для пустого списка может быть подобран только в рантайме. С другой стороны работать с известными типами можно и статически (если они известны во время компиляции).
И вообще, если подумать по лучше, то вопрос необходиомсти "динамичности" в полиморфизме — это вопрос достаточноности информации. Если инфомрации достаточно еще при компиляции, то можно спокойно принять решение и жетсно закодировать алгоритм.
Если же информация доступна при компиляции не вся, и полный ее объем становится доступен программе только на этапе выполнения, то без динамических проверок не обойтись, а стало быть статического полиморфизма недостаточно.
Кстати, забавно, что очень часто динамический полиморфизм применяется исключительно для увучшения модульности приложения. Так КОМ не мыслим без виртуальных вызовов. А тот же АТЛ использу применяет забавные методы эмуляции полиморфизма на базе шаблонов.
И еще забавно, что среды вроде дотнета (обладающие средствами JIT-компиляции) потенциально способны превращать динамический полиморфизм в статический. Ведь на самом деле ложки (тфу-ты, компонентов) на самом деле не существует. Реальное приложение монолитно. Оно загружает все модули превращая их в один исполняемый файл. И в момент когда становятся извесны все входящие в приложение модули (это может быть момент когда все они загружены в процесс или даже момент инсталляции приложения на машину клиента) теоритически нет препятствий для преобразования динамического полиморфизма в статический.
В общем, думаю что через несколько лет (возможно десятков) у разработчиков компиляторов/рантаймов и т.п. руки дойдут и до этого. Тогда вопрос статичности или динамичности полиморфизма станет таким же важным как сейчас вопросы автоматического инлайнинга методов, т.е. будут интересовать только разработчиков компиляторов.
... << RSDN@Home 1.1.4 beta 3 rev. 206>>