metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-07-02 01:18 pm

Функциональный апартеид

http://udpn.livejournal.com/78084.html?style=mine
Обычно говорят, что нормальный порядок редукции нужен для того, чтобы bottom в аргументе не превращался в bottom в результате всегда, когда это возможно. Само по себе это никому не нужно. Дело именно в отложенном вычислении аргументов. Чтобы определить управляющие конструкции в языке с аппл. порядком редукции, нужно это делать явно, и их можно ввести только конечное число на этапе разработки языка. С нормальным порядком мы имеем возможность определять новые конструкции в любом количестве.

Всех, кто ничего не понял - отправить в индию и бангладеш, купаться в ганге и поклонятся коровам.

[identity profile] gds.livejournal.com 2012-07-02 12:31 pm (UTC)(link)
конкретно в Coq проблема останова не стоит: для любой рекурсивной функции требуется доказательство завершимости. Соответственно, никакого bottom'а не нужно.
Но разница между нормальным и аппликативным порядками остаётся.

[identity profile] thedeemon.livejournal.com 2012-07-02 12:32 pm (UTC)(link)
причем тут миксфикс? речь о макросах и изменении синтаксиса

[identity profile] thedeemon.livejournal.com 2012-07-02 12:35 pm (UTC)(link)
Another outcome of total functional programming is that both strict evaluation and lazy evaluation result in the same behaviour, in principle; however, one or the other may still be preferable (or even required) for performance reasons. (педивикия)

[identity profile] tzirechnoy.livejournal.com 2012-07-02 12:38 pm (UTC)(link)
Я, как человек привыкшый к тиклю и лиспу, подозреваю, что коровники плачут всё-таки по кому-то другому.

[identity profile] m e (from livejournal.com) 2012-07-02 01:36 pm (UTC)(link)
хорошо, а куда отправлять тех, кто высказывание понял, но не понял, что оно неверно?

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

[identity profile] nivanych.livejournal.com 2012-07-02 01:36 pm (UTC)(link)
Да, оптимальность по количеству "мелких редукций".
Уходить от графо-редукции необязательно, хотя и codedot, в общем-то, это сделал для своей машинки — там он может и про память говорить.
А вот задаться вопросом, можно ли осуществить такую-то нормализацию более оптимально, чем в `ленивой` модели, очень даже можно. Мемоизация, это только одна из техник оптимизации, но есть и общий подход.

[identity profile] nivanych.livejournal.com 2012-07-02 01:38 pm (UTC)(link)
Не одно и то же, конечно.
Всё это следует из ленивости, но не наоборот — есть и другие нормализующие стратегии, отложенность можно делать и по-другому, ровно как и определять управляющие конструкции.

[identity profile] nivanych.livejournal.com 2012-07-02 01:39 pm (UTC)(link)
Ну, операционная семантика будет различаться, конечно.
Но тут, обычно, больше интерен аспект ресурсов.

[identity profile] nivanych.livejournal.com 2012-07-02 01:48 pm (UTC)(link)
Есличо, в посте говорится не про то, какие ленивые языки безусловно хорошие, а что если кто не понимает, что там написано, то...

[identity profile] nponeccop.livejournal.com 2012-07-02 02:19 pm (UTC)(link)
А там не оптимальный порядок редукции, а оптимальный sharing, по сути. Разделяется больше, чем при call by need.

[identity profile] nponeccop.livejournal.com 2012-07-02 02:21 pm (UTC)(link)
А он и не уходит от редукции графов. Просто хитрая структура графов, при которых шарится больше, чем при традиционной редукции.

[identity profile] nponeccop.livejournal.com 2012-07-02 02:23 pm (UTC)(link)
> Убрать его совсем не выйдет, проблема остановки же есть.

Выйдет, если отказаться от тьюринг-полноты. Достаточно доказуемо останавливающихся программ.

[identity profile] jakobz.livejournal.com 2012-07-02 02:41 pm (UTC)(link)
А реально ли достаточно? Ну т.е. кто-нибудь пробовал сделать что-нибудь уровня веб-сервера с каким-нибудь TODO-списком на не тьюринг-полной какой-нибудь штуковине?

[identity profile] nponeccop.livejournal.com 2012-07-02 02:57 pm (UTC)(link)
Есть порт http://wiki.basho.com/Webmachine.html на AGDA2.

[identity profile] measles.livejournal.com 2012-07-02 03:18 pm (UTC)(link)
Калі не можаш простымі словамі растлумачыць што ты робіш — не рабі гэта. © А. Эйнштэйн.

:) Прапануеце яго эксгуміраваць і павезці купацца ў Гангу?

[identity profile] aamonster.livejournal.com 2012-07-02 04:08 pm (UTC)(link)
Ну да, но срабатывание всего этого "в лоб", из коробки - просто за счёт "вызова" функций...
(функция не наткнется на bottom в ненужных аргументах ~= функция не вычисляет свои аргументы раньше времени ~= можно сделать if просто функцией)
(конечно, для всех "~=" ещё куча условий, типа иммутабельности, карринга и т.п.)

[identity profile] nivanych.livejournal.com 2012-07-02 06:02 pm (UTC)(link)
Ну и форт, это всё-таки, метапрограммирование.

[identity profile] nivanych.livejournal.com 2012-07-02 06:11 pm (UTC)(link)
Правда, должен заметить, что хоть сколько-то управляемая ресурсная семантика будет ещё и сиильно покруче более непривычная, чем итераты-енумераты, к примеру.
Я так думаю. И хотел бы, чтобы мне кто-то показал, что я неправ! ;-)

[identity profile] nivanych.livejournal.com 2012-07-02 06:13 pm (UTC)(link)
Так, точнее так будет сказать, я плохо выразился.

[identity profile] nivanych.livejournal.com 2012-07-02 06:18 pm (UTC)(link)
Ну, это небольшое лукавство.
Стоит заметить, что любая программа на Тьюринг-полном языке раскладывается на составляющие —
одна составляющая проверяет, что некое вычисление не ноль и повторяет его,
вторая составляющая Тьюринг-худая, и вполне бы, достаточно просто-типа-лямбды с натуральными числами.
Но вот уж завершающейся части Agda/CoQ для второй составляющеей точно достаточно.
Например, веб-сервер не должен завершаться.
Однако, его halting problem никого не волнует ;-)
А вот один шаг (ну или некоторой ограниченное число шагов) его работы (та самая Тьюринг-худая составляющая) очень даже интересно проверить на корректность, соответствие спецификации ивсётакое.

[identity profile] nivanych.livejournal.com 2012-07-02 06:20 pm (UTC)(link)
Они уже выплакали свои слёзы!

[identity profile] nivanych.livejournal.com 2012-07-02 06:21 pm (UTC)(link)
А это уже логика второго порядка, это нечестно!

[identity profile] nivanych.livejournal.com 2012-07-02 06:25 pm (UTC)(link)
Кстатее, от себя добавлю, что и в агдочке тоже.

[identity profile] inhate.livejournal.com 2012-07-02 06:40 pm (UTC)(link)
а с не-программистами что делать будем?

[identity profile] metaclass.livejournal.com 2012-07-02 06:42 pm (UTC)(link)
Тестерш - в декреты!

Page 2 of 3