Re[31]: Мифический Haskell
От: VoidEx  
Дата: 03.04.12 10:18
Оценка:
Здравствуйте, vdimas, Вы писали:

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


VE>>Тогда if-else тоже динамическая типизация.


V>Если при этом проверяется внутреннее устройство данных, то бишь их тип — несомненно.


Т.е. всегда. Ибо в чём фундаментальное отличие нижеприведённых примеров?

if (x < 0)
  foo1(x) // x is (a:int){a<0}
else
  foo2(x) // x is (a:int){a>=0}


if (isChild1(p))
  foo3(p) // x is Child1*
else
  foo4(p) // x is Child2*


Вы могли бы сказать, что в первом случае у нас используется само число, в во втором доступ к членам, но
1. Это далеко не всегда так, может, foo3 и foo4 этот указатель в списки добавляют
2. Разницы всё равно нет, так как foo1 и foo2 могут на основе значения бегать по таблицам, использовать числа как смещения и т.п. Грубо говоря вообще можно написать такой код, что foo1 и foo2 будут через таблицы эмулировать доступы в объектам.

VE>>Во-первых, как это нету?


V>Так что нету. Потому что нет параметризации типов константами и нет compile-time диспетчеризации по этим константам и нет частичного или явного инстанциирования шаблонных типов для конкретных комбинаций аргументов. Есть только такое инстанциирование для ф-ий.


Чой-то нету-то? Там вообще макросы есть, если что.

VE>>Во-вторых, можно пример, когда static_if не является сам по себе костылём?


V>Ха. Тогда любая статическая система типов — это костыль сам по себе, т.к. это способ перенести ограничения прикладной логики на компилятор.


Неверное обобщение. Если static_if используется для диспетчеризации, то для этого есть и другие механизмы. При этом с учётом того, что в Haskell никто не использует static_if, есть основания полагать, что все use-case покрываются другими средствами. Причём тут вся статическая типизация — не ясно.

V>Я могу спросить в ответ привести пример, когда классы типов Хаскеля не являются костылем?

А они костыль.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.