Re[20]: Мифический Haskell
От: vdimas Россия  
Дата: 21.03.12 11:10
Оценка:
Здравствуйте, Klapaucius, Вы писали:

T>>Я не поленился и перепёр haskell в шаблоны один в один:

K>Ох. Лучше бы вы не поленились читать то, что писал МигМит в том треде и что сейчас пишу я.
K>Вот смотрите:

K>Видите, этот код принимает число как аргумент командной строки. Он компилируется. НЕ интерпретируется.




Неправда, он интерпретируется в этом месте:
ScalarProduct a => ScalarProduct (Cons a) where


В отличие от Haskel, подобное преобразование типов (распаковка) для кода Tonal- выполняется в compile-time.


K>И типы проверяет статически.


Тоже неправда. Для АлгТД статически проверяется только м-но допустимых запакованных типов, то бишь статически проверяется лишь некое ограничение на возможный тип, но не сам запакованный тип. Конкретный тип распаковывается исключительно в рантайм, а сама техника распаковки тождественна технике dynamic_cast (с точностью до деталей, то бишь с точностью до способа кодирования/представления токена типа для целей рантайма).


K>Закомментированная строчка вызовет ошибку. Потому, что проверяются не абсолютные размеры списков, а то, что списки одинакового размера. А это известно на этапе компиляции, завит только от написанного кода, а не входных данных.


И опять неправда и непонимание происходящего. Это зависит от реализованной системы типов. Там, где ML-яык работает с боксированными значениями в рантайм, там мы имеем классическую эмуляцию динамики/интерпретации, хоть и со статическими проверками допустимости мн-ва АлгТД в момент компиляции. А там, где ML-язык будет пытаться инстанциировать типы целиком, чтобы избежать лишней динамики в рантайм, без техники зависимых типов не обойтись.

K>И зависимые типы для этого не нужны


Они не нужны только для боксированной реализации рекурсивных типов и прочей динамической типизации.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.