О чистоте и нечистотах
Aug. 24th, 2014 03:57 pmУважаемый
thesz написал у себя:
Для чистоты требуется 1) нормальный порядок упрощения (call-by-need или call-by-name, чтобы убрать зависимость от порядка вычисления) и 2) типы, чтобы ++i не пролезло в чистый код.
но, кажется, перепутал чистоту с хаскелем.
Ибо: 1) есть замечательный чистый функциональный язык Idris (даже проверяемо тотальный большей частью), в котором порядок вычислений строгий. Т.е. я бы заметил, что call-by-need требует чистоты, но чистота в общем случае не требует call-by-need.
То, что "есть классы программ, которые в нормальном порядке выразимы, в энергичном нет" - это правда, конечно, но к чистоте отношения не имеет.
Касательно 2) - бестиповое лямбда-исчисление тоже совершенно чистое, и для чистоты своей типов не требует. Чтобы ++i не пролезло в чистый код таки достаточно убрать из языка ++i и другие нечистоты.
Впрочем, без четкого определения чистоты все это довольно бессмысленное жонглирование. В частности, считать ли чистой функцию со свободными переменными.
Для чистоты требуется 1) нормальный порядок упрощения (call-by-need или call-by-name, чтобы убрать зависимость от порядка вычисления) и 2) типы, чтобы ++i не пролезло в чистый код.
но, кажется, перепутал чистоту с хаскелем.
Ибо: 1) есть замечательный чистый функциональный язык Idris (даже проверяемо тотальный большей частью), в котором порядок вычислений строгий. Т.е. я бы заметил, что call-by-need требует чистоты, но чистота в общем случае не требует call-by-need.
То, что "есть классы программ, которые в нормальном порядке выразимы, в энергичном нет" - это правда, конечно, но к чистоте отношения не имеет.
Касательно 2) - бестиповое лямбда-исчисление тоже совершенно чистое, и для чистоты своей типов не требует. Чтобы ++i не пролезло в чистый код таки достаточно убрать из языка ++i и другие нечистоты.
Впрочем, без четкого определения чистоты все это довольно бессмысленное жонглирование. В частности, считать ли чистой функцию со свободными переменными.
no subject
Date: 2014-08-24 09:15 am (UTC)Всё, что записано в какой-нибудь из лямбд — чистое.
no subject
Date: 2014-08-25 07:20 am (UTC)Если добавить всякие ++i в язык, нууу, вряд ли это кто назовёт "лямбдой". Какой-то глобальный State можно, конечно, но типы будут "немного" специфическими.
Правила редукции тут вообще ни к чему.
Хотя и конечно, могут быть и такие правила, когда вообще ничего не вычислится ;-)
no subject
Date: 2014-08-25 09:14 am (UTC)1. Он включает в себя simply typed lambda calculus.
2. Для него реализованы call-by-value, call-by-name и call-by-need вычисляющие Функции, и
3. Эти реализации weakly equivalent (когда если одна возвращает нечто, то другая или возвращает то же самое, или не определена).
Т.е. нужна независимость от порядка вычисления, но несколько большая, чем упоминал thesz.
Как добавить ++i и сохранить или не сохранить чистоту там как раз показывается.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-08-24 09:29 am (UTC)2. хаскелисты - они такие, да
в любом случае - в чистом и модном языке всё равно будет какой нить IO или прочий ад.
no subject
Date: 2014-08-24 11:26 am (UTC)no subject
Date: 2014-08-24 11:50 am (UTC)Придут псы, сделают alter table и вся чудесная статически типизированая прога сдохнет.
А интегрировать статик типы и БД так, чтобы хипстеры не возопели в мучениях - на данный момент как-то слабо возможно.
no subject
Date: 2014-08-24 11:57 am (UTC)(no subject)
From:no subject
Date: 2014-09-11 09:29 am (UTC)И что, есть опыт? И программа на Хаскеле была? Или это художественное преувеличение, как обычно?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-08-24 04:42 pm (UTC)Она чистая в одной категории, и нечистая в другой.
no subject
Date: 2014-08-24 06:25 pm (UTC)no subject
Date: 2014-08-24 09:59 pm (UTC)Если иметь дело с алгебрами над монадой Reader (или в категории Клейсли, что, по-моему, в данном случае почти одно и тоже), то все чисто, а иначе - нечисто, т.к. зависим от внешнего чего-то.
(no subject)
From:(no subject)
From:no subject
Date: 2014-08-24 05:06 pm (UTC)no subject
Date: 2014-08-24 06:00 pm (UTC)Побаловаться на маленьких задачках можно, благо язык маленький - туториал на полсотни страниц и обозримая стандартная библиотека. Документации по ней негусто (или даже вообще нет), приходится в исходники посматривать все время.
Из перечисленных вариантов для практики я бы выбрал Хаскель. Конкретный фреймворк не подскажу, сам не ориентируюсь.
no subject
Date: 2014-08-24 06:16 pm (UTC)no subject
Date: 2014-08-28 10:53 am (UTC)А ты его трансляцию в джавоскрипт не пробовал, как оно?
(no subject)
From:What is a Purely Functional Language?
Date: 2014-08-24 08:44 pm (UTC)http://www.cs.indiana.edu/~sabry/papers/purelyFunctional.ps
Re: What is a Purely Functional Language?
Date: 2014-08-25 08:32 am (UTC)Re: What is a Purely Functional Language?
From:Re: What is a Purely Functional Language?
From:Go
Date: 2014-08-24 09:06 pm (UTC)Это вы не туда смотрите, когда думаете такое про Go (понимая Go как язык+компилятор+спек_на_стдлибу+либы). Надо смотреть на него не с точки зрения CS & PLT, а с точки зрения "современной практичной замены Си для ширнармасс", и он уже вполне нашел свою нишу для серверного и административного софта: Docker (www.docker.com), например, написан целиком на Go. Go позволяет делать маленькие статические бинарники без зависимостей (и задачи типа вашей недавней про маленькую гуявую апп тоже будет можно на нем решать, когда ему приделают гуй ;)) А ещё у него typed CSP-style interthread communication, очень неплохо, и перспективный подход к ООП (оно явно некоторе время ещё не сойдет в могилу, так что пусть лучше уж так.)
Re: Go
Date: 2014-08-25 08:24 am (UTC)Noticed the trend? People marching to Go come mostly from Node.js, Python and some other languages for
intellectual majoritysimplistic languages. It's like switching from cheeseburgers to BigMacs. You'll have some more lettuce but it's still junk food. You won't see many people switching to Go from languages like Haskell, Scala or Erlang.Go - это такой JS в мире Си-подобных. Как язык полное Vno, но своей простотой привлекает широкие массы.
Re: Go
From:no subject
Date: 2014-08-25 08:06 am (UTC)Это неправда. Порядок вычисления вообще не может влиять на то, какие программы выразимы, а какие нет - ну просто по определению порядка вычислений.
no subject
Date: 2014-08-25 08:30 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2014-08-25 06:55 pm (UTC)Сейчас ведь интересно не тупое отсутствие эффектов, а управление ими с помощью комбинируемых средств языка. Желательно с применением такого формализма, который позволяет об этих эффектах рассуждать, и даже получать какие-то теоремы (как можно дешевле).
Очевидно, что в п.2 имелось в виду именно это.
> бестиповое лямбда-исчисление тоже совершенно чистое
Пример бессмысленный, так как в нём и эффектов нет.
no subject
Date: 2014-08-26 08:32 am (UTC)Никто не мешает генерировать на чистом языке лямбда-исчисления терм какого-нибудь грязного языка, как это и делается в хаскеле. Единственное отличие в том, что в хаскеле в стандарте языка есть вшитые примитивы и комбинаторы для генерации. Но в случае простого лямбда-исчисления все те же самые примитивы мы можем написать сами и поместить в библиотеку, так что разницы никакой.
no subject
Date: 2014-08-27 04:40 am (UTC)no subject
Date: 2014-08-27 05:49 am (UTC)(no subject)
From:(no subject)
From: