Информация об изменениях

Сообщение Re[107]: Мнение: объектно-ориентированное программирование — от 13.11.2019 10:50

Изменено 13.11.2019 11:26 AlexRK

Re[107]: Мнение: объектно-ориентированное программирование —
Здравствуйте, samius, Вы писали:

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

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

ARK>>Так твоя функция не принимает IO. IO нет в сигнатуре. А под "принимать IO" речь шла именно о сигнатуре ("Функция является грязной, если она принимает IO среди своих аргументов").

S>Функция id принимает все, что угодно, в том числе IO. Т.е. на ответ, принимает ли она IO, можно смело кивать.

Sinclair написал конкретное определение чистоты в его понимании (которое совпадает с моим, кстати):

1. Функция является грязной, если она принимает IO среди своих аргументов.
2. Функция, вызывающая грязную, является грязной.
Всё. Все остальные функции — чистые.


Твоя функция id НЕ удовлетворяет описанию грязной функции из этого определения.

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

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

Ты продемонстрировал создание обертки. Смотри, я тоже так могу:

void putStrLn1() { Console.WriteLine("querty"); }

void Main()
{
    putStrLn1();
    putStrLn1();
}


Look ma, я закешировал Console.WriteLine!

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

ARK>>Смысл в этом критерии такой: он позволяет отделить зерна от плевел. Понять, где проходит граница чистоты.
S>В твоем критерии не понять, где проходит граница, т.к. можно сделать чистым и грязным даже отсутствие функции. Т.е. это не зависит от наличия функции. Остается понять, причем тут вообще функция и ее чистота?

Мой критерий НЕ зависит от окружения. Вообще. Даже если совсем НЕТ никакого окружения, даже если нет ни компилятора, ни даже компьютера — мой критерий дает четкое определение, чиста функция или нет.

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

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

Мне нравится такое определение, которое не требует внешних зависимостей от окружения.
Re[107]: Мнение: объектно-ориентированное программирование —
Здравствуйте, samius, Вы писали:

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

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

ARK>>Так твоя функция не принимает IO. IO нет в сигнатуре. А под "принимать IO" речь шла именно о сигнатуре ("Функция является грязной, если она принимает IO среди своих аргументов").

S>Функция id принимает все, что угодно, в том числе IO. Т.е. на ответ, принимает ли она IO, можно смело кивать.

Sinclair написал конкретное определение чистоты в его понимании (которое совпадает с моим, кстати):

1. Функция является грязной, если она принимает IO среди своих аргументов.
2. Функция, вызывающая грязную, является грязной.
Всё. Все остальные функции — чистые.


Твоя функция id НЕ удовлетворяет описанию грязной функции из этого определения.

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

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

Ты продемонстрировал создание обертки. Смотри, я тоже так могу:

void putStrLn1() { Console.WriteLine("querty"); }

void Main()
{
    putStrLn1();
    putStrLn1();
}


Look ma, я закешировал Console.WriteLine!

UPD. Я понимаю, что это немного другое. Но суть та же — результатом "кеширования" putStr является отложенное действие.

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

ARK>>Смысл в этом критерии такой: он позволяет отделить зерна от плевел. Понять, где проходит граница чистоты.
S>В твоем критерии не понять, где проходит граница, т.к. можно сделать чистым и грязным даже отсутствие функции. Т.е. это не зависит от наличия функции. Остается понять, причем тут вообще функция и ее чистота?

Мой критерий НЕ зависит от окружения. Вообще. Даже если совсем НЕТ никакого окружения, даже если нет ни компилятора, ни даже компьютера — мой критерий дает четкое определение, чиста функция или нет.

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

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

Мне нравится такое определение, которое не требует внешних зависимостей от окружения.