Типы и типы
Feb. 24th, 2012 10:44 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Очевидно ли, почему flatten и (partial apply concat) в Clojure могут выдать разные результаты? После хаскеля кложурный flatten, работающий на все уровни "вглубь", выглядит непривычно.
По ходу, статическая типизация делает невозможными некоторые типы программ, возможные при динамической.
Соответственно, наиболее заебатая статическая типизация, с какими-нибудь адскими зависимыми типами, должна делать невозможными еще большее количество программ.
А самая правильная типизация - это при которой множество допустимых программ пустое.
По ходу, статическая типизация делает невозможными некоторые типы программ, возможные при динамической.
Соответственно, наиболее заебатая статическая типизация, с какими-нибудь адскими зависимыми типами, должна делать невозможными еще большее количество программ.
А самая правильная типизация - это при которой множество допустимых программ пустое.
no subject
Date: 2012-02-24 08:14 am (UTC)Это тянет на теорему. Какие например типы?
no subject
Date: 2012-02-24 08:29 am (UTC)И к заявлениям
no subject
Date: 2012-02-24 08:36 am (UTC)charAt s i = s.[i]
по идее, никакая статическая типизация не поможет доказать, что эта функция не кинет исключения при выходе за пределы массива.
Т.е. программа то остается возможной, но все равно придется ее прогонять через юнит-тесты, и статическая типизация не поможет от них избавится.
no subject
Date: 2012-02-24 09:05 am (UTC)Кстати, пример с корректной адресацией элементов массива идёт не то первым, не то вторым примером в какой-то из статей про Эпиграм. Вот трансляция оттуда в Хаскель по памяти:
no subject
Date: 2012-02-24 09:18 am (UTC)Т.е. если мы вводим s пользователем, то полный тип программы выведется только после ввода строки, или не выведется, потому что пользователь ввел "a" а мы обращаемся ко второму символу.
Соответственно, вместо обработки исключений в рантайме у нас вывод типов в рантайме, причем нужно еще куда-то сунуть локализуемое сообщение об ошибке, чтобы его показать пользователю.
Это можно сделать на зависимых типах?
no subject
Date: 2012-02-24 09:31 am (UTC)Нет.
Вычислительная часть программы требует некоторых гарантий, и в той части программы, что занимается вводом данных мы должны произвести необходимые действия для проверки гарантий.
Гарантии указаны в типе. Контракте, если изволите.
Нарушение контракта можно переводить в сообщение об ошибке.
no subject
Date: 2012-02-24 09:40 am (UTC)no subject
Date: 2012-02-24 09:50 am (UTC)no subject
Date: 2012-02-24 10:06 am (UTC)no subject
Date: 2012-02-24 01:56 pm (UTC)не то?
no subject
Date: 2012-02-24 03:55 pm (UTC)http://thedeemon.livejournal.com/41035.html
no subject
Date: 2012-02-24 08:34 am (UTC)А когда дело доходит до того, что кроме json нужно отдать еще и html/xml/csv как положено RESTful сервису, сигнатуры типов начинают рыдать кровавыми слезами.
no subject
Date: 2012-02-24 09:32 am (UTC)И типы в порядке, и динамичность есть.
no subject
Date: 2012-02-24 03:52 pm (UTC)