21 ноября 2010 · Комментарий

Без заголовка

>я бы не сказал, что динамические типы кому-нибудь мешают, ежели глядеть на вечнозеленые Smalltalk, Python и прочая из этой серии. Система типов идёт рука об руку с семантикой. Чем сложнее семантика, тем сложнее система типов. Объектные системы типов не могут выразить ничего более-менее полезного, у них проблемы с выводом типов и тд. Поэтому объектные языки очень часто динамические - St, Python тому пример. Почитайте, насколько сложна семантика у St или Python. Такого в сети хватает - "как я в очередной раз подумал, что в Пайтоне это просто, а оказалось, что там такой ужас!". Народ ими пользуется из-за низкого порога вхождения. Пока не пользуешься вещами, которые могут быть полезны для больших проектов (те же функции высших порядков) или пользуешься готовыми наработками для решения задач, очень похожих на твою, всё идёт отлично, радости нет предела. >Поэтому "отсутствует нормальная система типов" тут не аргумент И именно поэтому "отсутствие нормальной системы типов" тут аргумент, да ещё какой. Вот, смотрите. В Прологе мы имеем недетерминизм и побочные эффекты одновременно. При этом любая функция у нас тотальна: она всегда может вернуть "ложь" на любой вход. И если на классификацию яблок мы подадим апельсин, что произойдёт? Ошибка. Как её отыскать? Кто сделал унификацию с апельсином? И будет хорошо, если такая ошибка проявится сразу. А то мы вдруг получили "false", хотя программа должна работать бесконечно. Это general protection fault, только от языка, в котором такого не ждёшь. Пролог очень труден для программирования больших систем. Я пытался на нём написать диалог с пользователем банкомата - со всеми возможными вариантами. Неуловимые ошибки прут изо всех щелей. Создавая Эрланг из Прологе, отрезали всё прологовское, натурально. А то рассуждать о программах не получалось совсем. Надо сказать, что в ленивых ЯП проблему недетерминированности и побочных эффектов решили, двумя способами - монады и фуджеты. Всё потому, что были типы и комбинаторы (то есть, функции возвращают значение и не тотальны для всех возможных значений всех типов). >Интересно, почему объект-ориентированное программирование рулит. Сперва это был дешёвый полиморфизм по первому аргументу функции или процедуры, теперь деньги. >Там что, модель вычислений из одной операции? Деньги. Объектно-ориентированное программирование возможно только поверх машины Тьюринга. >У хаскеля -- из двух. У пролога что, в модели вычислений три операции? http://en.wikipedia.org/wiki/Unification_%28computing%29#Examples_of_unification В алгоритме унификации не менее трёх правил. >Можно ли связать распространение языка с числом операций в модели вычислений? Да, если не действуют другие силы. В математике, например, всё так и происходило. Все интересные результаты сперва получались для лямбда-исчисления (простая система типов, её непротиворечивость, вывод типов для неё, система типов с полиморфизмом, система типов Мартина-Лёфа и тп), а потом переносились в другие контексты - Фортран, например, с системой типов аналогичной простой системе типов ЛИ появился на 18 лет позже. Логик Хиндли сделал вывод типов для полиморфного ЛИ в 1968 году, в C# это попало когда? Года три назад, да и то, работает через пень-колоду. >Тут я молчу о Машине Тьюринга, и почему на ней не программируют... У неё три операции. Не программируют потому, что сложна. Начали использовать потому, что её упрощённый вариант оказалось проще реализовать в железе.

К записи · К обсуждению