Здравствуйте, VladD2, Вы писали:
VD>Ага. Вот только к динамической типизации это отношения не имеет. Ведь все типы известны во время компиляции.
Какие еще все? Все, входящие в алг. тип? Дык их несколько в общем случае, а конкретный мы определяем в рантайм.
VD>Никто же не называет С++ динамически-типизированным только из того факта, что в нем поддерживаются виртуальные методы которые пиводят к тому, что реальный тип объекта становится известным только во время выполнения?
В случае виртуальных методов, если я правильно понял о чем ты, мы и не должны динамически определять тип реального объекта, такой подход — следствие правила Лисков.
Тут ведь различие очевидное: при динамическом приведении типа мы должны привести к некоему типу (неважно, матчингом или оператором динамического приведения типа) ДО выполнения операций над типом. В условиях открытой группы типов (так можно назвать все доступные типы) — это признанно плохим тоном в программировании. К сожалению, безопасность такого преобразования в CLR провоцирует подобный подход. С другой стороны, на динамическом приведении типов гораздо проще решаются многие задачи (та же обработка AST), т.к. в этих случаях нам доступен более подходящий данной задаче способ декомпозиции функциональности, в сравнении с размазыванием оной по виртуальным ф-иям многих классов. Отсюда я и считаю, что для тех задач, где сегодня мы используем динамическое приведение типов (даже если оно безопасное с т.з. возможной неверной интерпретации памяти), алгебраические типы будут более удобны, и более безопасны, но уже на уровень выше — в алгоритмическом плане, преодолевая то самое правило Лисков в ввиду закрытости группы (но опять же, только в случае контроля компилятором полноты матчинга, иначе та самая "дыра" остаётся в первозданном виде).
... << RSDN@Home 1.2.0 alpha rev. 786>>