Re[104]: Мнение: объектно-ориентированное программирование —
От: samius Япония http://sams-tricks.blogspot.com
Дата: 13.11.19 08:06
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Здравствуйте, samius, Вы писали:


S>>>>Нет, не согласен. См. определение. Принимать IO — еще не грязь.

ARK>>>Единственно разумный подход — считать, что это грязь.
S>>В соответствии с единственным разумных подходом (по твоей версии) выходит, что следующая функция в хаскеле грязная, т.к. может принимать IO:
S>>
S>>id x = x
S>>


ARK>"Может принимать" и "всегда принимает/возвращает" — разные вещи. Если просто "может" — значит, эта функция ортогональна IO и грязной не является. А вот когда не МОЖЕТ, а ДОЛЖЕН — это уже другое дело.

Это юлеж. Постом назад альтернатив и ортогональностей не было, был единственно разумный подход!

S>>>>Тем более, что putStr не принимает IO.

ARK>>>Если в коде нет возможности отделить вызов функции от вызова того, что она возвращает, то эти вещи изоморфны друг другу.
S>>Я бы не настаивал на том, что возможности нет, раз такая возможность используется для отделения чистоты от грязи.

ARK>Это и есть тот самый нехороший "трюк", с которого все и началось. Эта возможность существует только в воображении, она не реальна. Это как раз тот самый "онанизм вприсядку" (с), который позволяет создателям хаскеля именовать грязные функции чистыми. Оторви вызов action от вызова функции — и у меня не будет ни малейших претензий к чистоте putStr. Но создатели хаскеля не дураки — если бы это было реально так, то реализация была бы крайне тормозной. Поэтому они предпочитают морочить людям голову мнимой чистотой.

Т.е. все, кто кэширует IO, делают это лишь из-за богатого воображения?

S>>Ну и в конце концов — принимать IO и возвращать — не одно и то же. Или тут тоже проблема?


ARK>Увы. Если — и только если — возврат IO ("Action PutStr(string s)") неотделим от вызова грязного action, то он становится семантически полностью эквивалентным как приему-возврату грязного мира ("IO PutStr(IO world, string s)"), так и просто ключевому слову "dirty" в сигнатуре функции ("dirty void PutStr(string s)").

Ну а почему неотделим-то?

ARK>Кстати, продолжая: а если пометить все функции как "dirty", то мы получаем избыточность этого слова — оно становится не нужно, его можно исключить. И — вуаля! — мы получили С.


S>>"Наша грязная функция" — вот это ты как определил? Ты меня убеди сначала, что она грязная. Хотя нет, давай сначала разберемся с критерием. А то у тебя выходит что id грязный, так нам чистоту putStr не получить.


ARK>ОК. Давай определимся с критерием. Ты согласен, что физически грязь можно получить, вызвав любую функцию (см. виртуальные машины)? Равно как и наоборот — можно физически НЕ получить грязь, вызвав любую функцию (все зависит от откружения, в котором функция запускается)?

С этим я не согласен. Тут уже находились любители измерять грязь по машинному коду. Ты предлагаешь измерять ее по вычислителю. Этого нет смысла, вычислитель может залить все грязью, даже не видя исходник функции. Какой смысл в таком критерии?

ARK>Что же тогда называть "чистой функцией"? Я предлагаю вариант с ДЕКЛАРАЦИЕЙ чистоты (а не тем, что реально происходит при вызове): http://rsdn.org/forum/philosophy/7589812.1
Автор: AlexRK
Дата: 13.11.19

ARK>Если такой вариант трактовки чистоты ты считаешь неправильным, то назови с твоей точки зрения правильный. Еще раз напомню, что вариант "чистая функция — которая не делает ввод-вывод" может быть легко фальсифицирован с помощью подделки окружения, в котором эта функция вызывается.

Видишь лист бумаги? Думаешь, он белый? А я возьму красный фильтр и докажу что он красный. Именно это ты предлагаешь с фальсификацией окружения. Смысла в этом 0.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.