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

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


S>>Во всех известных мне языках (их не так много) вряд ли пользуются ТВОИМ определением чистоты.


ARK>"pure" функция в D может в некоторых случаях делать ввод-вывод. Хотя в википедии написано, что pure function не может делать ввод-вывод.

Ну и может, что из этого? Это не значит, что твое определение известно разработчикам D.

S>>Какой вообще смысл в проверки чистоты виртуальной машиной, если виртуальная машина может сделать грязным даже пустой файл/лист без функций вовсе?


ARK>Это не "проверка чистоты", а демонстрация как минимум неполноты определения чистоты из википедии, если оно претендует на статус формального определения.

Какое отношение к чистоте функции имеет твоя демонстрация грязного вычислителя?

ARK>>>Почему этот перечень должен там быть? Он не часть определения.

S>>Если он не часть определения, почему ты опираешься на этот перечень?

ARK>Верно, опираюсь, пожалуй. Да, этого списка там нет (хотя есть упоминание его подмножества: "Thus a pure function is a computational analogue of a mathematical function", я трактую это как указание на множество всех математических функций). Но я как раз и говорю о том, что это определение является слишком неформальным.

А это уже и не определение, а пояснение.

S>>Немного не так. Я смотрю на контракт, чист ли он? Если синус отличается от своего контракта, то это проблема частной реализации синуса, а не контракта. Если это так — возьму другой.


ARK>Под словом "контракт" ты понимаешь здесь сигнатуру конкретной функции, описание конкретной функции или что-то иное?

В том числе сигнатуру, описание, не портит ли функция GetLastError()?

S>>Ну как, ты же судишь по виртуальной машине!


ARK>Нет, я использую виртуальную машину для демонстрации того, что определение чистоты из википедии при написании кода является не слишком полезным. Оно неформальное и общего характера.


Так это лишь пример того, что чистота функции не распространяется автоматом на вычислитель.

S>>А в какой момент action получит строку для вывода, сгенерированную в рантайме?


ARK>"Сгенерированную в рантайме" — это возвращенную в рантайме другим грязным action, который сгенерирован функцией, например, "scanf"? Ну, в соответствующий момент в рантайме и получит. Не очень понял этого вопроса. Все как в хаскеле же.

Нет, не как в хаскеле. В хаскеле генерация действия отделена от его выполнения. Это и позволяет кэшировать результаты IO функций, и потом выполнять их.

S>>Я смотрю, есть ли там вообще пространство для грязи на уровне контракта, потом дополнительно проверяю вызовы подозрительных функций. В State достаточно посмотреть на вызовы IO внутри. Или unsafe. Ну а зачем, главное? Я прекрасно знаю, как устроен State. Сам его писал. Воткнуть в него вывод можно, но объясни, зачем?


ARK>А что такое "подозрительные функции"? И почему ты ищешь IO-функции, они ведь, по-твоему, чистые? Где "корень" чистоты или грязи?

Выполнение IO действий может приводить к грязи, разумеется.

S>>Интересно, что мешает пользователям контролировать активность без нового компилятора? Но ты, видимо, не только компилятор, а еще и все исходники хочешь переписать. Ну ладно. Успехов.


ARK>Ты рассуждаешь с позиций некоего "здравого смысла", а я рассуждаю формально.

Для рассуждающего формально, ты слишком далеко оторвался от определения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.