Сообщение 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 написал конкретное определение чистоты в его понимании (которое совпадает с моим, кстати):
Твоя функция id НЕ удовлетворяет описанию грязной функции из этого определения.
S>>>Ну а почему неотделим-то?
S>>>Т.е. все, кто кэширует IO, делают это лишь из-за богатого воображения?
ARK>>Можешь продемонстрировать это?
S>Демонстрировал последним примером.
Ты продемонстрировал создание обертки. Смотри, я тоже так могу:
Look ma, я закешировал Console.WriteLine!
S>>>С этим я не согласен. Тут уже находились любители измерять грязь по машинному коду. Ты предлагаешь измерять ее по вычислителю. Этого нет смысла, вычислитель может залить все грязью, даже не видя исходник функции. Какой смысл в таком критерии?
ARK>>Смысл в этом критерии такой: он позволяет отделить зерна от плевел. Понять, где проходит граница чистоты.
S>В твоем критерии не понять, где проходит граница, т.к. можно сделать чистым и грязным даже отсутствие функции. Т.е. это не зависит от наличия функции. Остается понять, причем тут вообще функция и ее чистота?
Мой критерий НЕ зависит от окружения. Вообще. Даже если совсем НЕТ никакого окружения, даже если нет ни компилятора, ни даже компьютера — мой критерий дает четкое определение, чиста функция или нет.
S>>>Видишь лист бумаги? Думаешь, он белый? А я возьму красный фильтр и докажу что он красный. Именно это ты предлагаешь с фальсификацией окружения. Смысла в этом 0.
ARK>>И ты совершенно прав. Белый, красный, чистый, грязный — это неформальные ощущения. Квалиа, как любит говорить один местный гражданин. А формально другое — длина волны, частота излучения и т.п. И даже там на самом низком уровне приходится прибегать к аксиоматике — потому что в любом случае ты упираешься в базовые понятия, которые не выразимы ни через что.
ARK>>Однако я вижу, что тебе не нравятся формальные рассуждения, тебе ближе варианты со "здравым смыслом".
S>Не вижу смысла уделять время формальным рассуждениям за гранью смысла. Если тебе нравится рассуждать о такой чистоте, когда любая функция может быть и чиста и грязна одновременно, включая тождественную, то и оставлю тебя с этими рассуждениями.
Мне нравится такое определение, которое не требует внешних зависимостей от окружения.
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 написал конкретное определение чистоты в его понимании (которое совпадает с моим, кстати):
Твоя функция id НЕ удовлетворяет описанию грязной функции из этого определения.
S>>>Ну а почему неотделим-то?
S>>>Т.е. все, кто кэширует IO, делают это лишь из-за богатого воображения?
ARK>>Можешь продемонстрировать это?
S>Демонстрировал последним примером.
Ты продемонстрировал создание обертки. Смотри, я тоже так могу:
Look ma, я закешировал Console.WriteLine!
UPD. Я понимаю, что это немного другое. Но суть та же — результатом "кеширования" putStr является отложенное действие.
S>>>С этим я не согласен. Тут уже находились любители измерять грязь по машинному коду. Ты предлагаешь измерять ее по вычислителю. Этого нет смысла, вычислитель может залить все грязью, даже не видя исходник функции. Какой смысл в таком критерии?
ARK>>Смысл в этом критерии такой: он позволяет отделить зерна от плевел. Понять, где проходит граница чистоты.
S>В твоем критерии не понять, где проходит граница, т.к. можно сделать чистым и грязным даже отсутствие функции. Т.е. это не зависит от наличия функции. Остается понять, причем тут вообще функция и ее чистота?
Мой критерий НЕ зависит от окружения. Вообще. Даже если совсем НЕТ никакого окружения, даже если нет ни компилятора, ни даже компьютера — мой критерий дает четкое определение, чиста функция или нет.
S>>>Видишь лист бумаги? Думаешь, он белый? А я возьму красный фильтр и докажу что он красный. Именно это ты предлагаешь с фальсификацией окружения. Смысла в этом 0.
ARK>>И ты совершенно прав. Белый, красный, чистый, грязный — это неформальные ощущения. Квалиа, как любит говорить один местный гражданин. А формально другое — длина волны, частота излучения и т.п. И даже там на самом низком уровне приходится прибегать к аксиоматике — потому что в любом случае ты упираешься в базовые понятия, которые не выразимы ни через что.
ARK>>Однако я вижу, что тебе не нравятся формальные рассуждения, тебе ближе варианты со "здравым смыслом".
S>Не вижу смысла уделять время формальным рассуждениям за гранью смысла. Если тебе нравится рассуждать о такой чистоте, когда любая функция может быть и чиста и грязна одновременно, включая тождественную, то и оставлю тебя с этими рассуждениями.
Мне нравится такое определение, которое не требует внешних зависимостей от окружения.
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>Не вижу смысла уделять время формальным рассуждениям за гранью смысла. Если тебе нравится рассуждать о такой чистоте, когда любая функция может быть и чиста и грязна одновременно, включая тождественную, то и оставлю тебя с этими рассуждениями.
Мне нравится такое определение, которое не требует внешних зависимостей от окружения.