Сообщение Re[103]: Мнение: объектно-ориентированное программирование — от 13.11.2019 10:43
Изменено 13.11.2019 11:31 AlexRK
Re[103]: Мнение: объектно-ориентированное программирование —
Здравствуйте, samius, Вы писали:
S>>>Во всех известных мне языках (их не так много) вряд ли пользуются ТВОИМ определением чистоты.
ARK>>"pure" функция в D может в некоторых случаях делать ввод-вывод. Хотя в википедии написано, что pure function не может делать ввод-вывод.
S>Ну и может, что из этого? Это не значит, что твое определение известно разработчикам D.
Ну, разработчики D как минимум не используют определение чистоты из википедии.
На мой взгляд, тот подход, который у них, вполне соответствует моему пониманию чистоты. Впрочем, я не настаиваю, это для меня не очень важно. Важнее отказ от википедийного определения.
S>>>Какой вообще смысл в проверки чистоты виртуальной машиной, если виртуальная машина может сделать грязным даже пустой файл/лист без функций вовсе?
ARK>>Это не "проверка чистоты", а демонстрация как минимум неполноты определения чистоты из википедии, если оно претендует на статус формального определения.
S>Какое отношение к чистоте функции имеет твоя демонстрация грязного вычислителя?
Это не демонстрация грязного вычислителя. Это демонстрация влияния окружения. Отношение к определению чистоты оно имеет самое прямое, поскольку это определение непосредственно опирается на эффекты окружения.
S>>>Немного не так. Я смотрю на контракт, чист ли он? Если синус отличается от своего контракта, то это проблема частной реализации синуса, а не контракта. Если это так — возьму другой.
ARK>>Под словом "контракт" ты понимаешь здесь сигнатуру конкретной функции, описание конкретной функции или что-то иное?
S>В том числе сигнатуру, описание, не портит ли функция GetLastError()?
Функций в мире много. Ты всегда проверяешь все инварианты всех функций? Соответствует ли название функции тому, что она делает? Не перепутаны ли местами x и y в функции DrawPoint?
Или, может, ты доверяешь сигнатуре и/или документации?
S>>>Ну как, ты же судишь по виртуальной машине!
ARK>>Нет, я использую виртуальную машину для демонстрации того, что определение чистоты из википедии при написании кода является не слишком полезным. Оно неформальное и общего характера.
S>Так это лишь пример того, что чистота функции не распространяется автоматом на вычислитель.
Это окружение, а не вычислитель. Если бы это был вычислитель, то и в С все функции были бы чистыми. Окружение "работает" всегда, и до вычислителя (если он есть), и во время, и после.
S>>>А в какой момент action получит строку для вывода, сгенерированную в рантайме?
ARK>>"Сгенерированную в рантайме" — это возвращенную в рантайме другим грязным action, который сгенерирован функцией, например, "scanf"? Ну, в соответствующий момент в рантайме и получит. Не очень понял этого вопроса. Все как в хаскеле же.
S>Нет, не как в хаскеле. В хаскеле генерация действия отделена от его выполнения. Это и позволяет кэшировать результаты IO функций, и потом выполнять их.
Ты пока не продемонстрировал этого отделения. То, что ты продемонстрировал, может быть повторено на любом грязном императивном языке.
S>>>Во всех известных мне языках (их не так много) вряд ли пользуются ТВОИМ определением чистоты.
ARK>>"pure" функция в D может в некоторых случаях делать ввод-вывод. Хотя в википедии написано, что pure function не может делать ввод-вывод.
S>Ну и может, что из этого? Это не значит, что твое определение известно разработчикам D.
Ну, разработчики D как минимум не используют определение чистоты из википедии.
На мой взгляд, тот подход, который у них, вполне соответствует моему пониманию чистоты. Впрочем, я не настаиваю, это для меня не очень важно. Важнее отказ от википедийного определения.
S>>>Какой вообще смысл в проверки чистоты виртуальной машиной, если виртуальная машина может сделать грязным даже пустой файл/лист без функций вовсе?
ARK>>Это не "проверка чистоты", а демонстрация как минимум неполноты определения чистоты из википедии, если оно претендует на статус формального определения.
S>Какое отношение к чистоте функции имеет твоя демонстрация грязного вычислителя?
Это не демонстрация грязного вычислителя. Это демонстрация влияния окружения. Отношение к определению чистоты оно имеет самое прямое, поскольку это определение непосредственно опирается на эффекты окружения.
S>>>Немного не так. Я смотрю на контракт, чист ли он? Если синус отличается от своего контракта, то это проблема частной реализации синуса, а не контракта. Если это так — возьму другой.
ARK>>Под словом "контракт" ты понимаешь здесь сигнатуру конкретной функции, описание конкретной функции или что-то иное?
S>В том числе сигнатуру, описание, не портит ли функция GetLastError()?
Функций в мире много. Ты всегда проверяешь все инварианты всех функций? Соответствует ли название функции тому, что она делает? Не перепутаны ли местами x и y в функции DrawPoint?
Или, может, ты доверяешь сигнатуре и/или документации?
S>>>Ну как, ты же судишь по виртуальной машине!
ARK>>Нет, я использую виртуальную машину для демонстрации того, что определение чистоты из википедии при написании кода является не слишком полезным. Оно неформальное и общего характера.
S>Так это лишь пример того, что чистота функции не распространяется автоматом на вычислитель.
Это окружение, а не вычислитель. Если бы это был вычислитель, то и в С все функции были бы чистыми. Окружение "работает" всегда, и до вычислителя (если он есть), и во время, и после.
S>>>А в какой момент action получит строку для вывода, сгенерированную в рантайме?
ARK>>"Сгенерированную в рантайме" — это возвращенную в рантайме другим грязным action, который сгенерирован функцией, например, "scanf"? Ну, в соответствующий момент в рантайме и получит. Не очень понял этого вопроса. Все как в хаскеле же.
S>Нет, не как в хаскеле. В хаскеле генерация действия отделена от его выполнения. Это и позволяет кэшировать результаты IO функций, и потом выполнять их.
Ты пока не продемонстрировал этого отделения. То, что ты продемонстрировал, может быть повторено на любом грязном императивном языке.
Re[103]: Мнение: объектно-ориентированное программирование —
Здравствуйте, samius, Вы писали:
S>>>Во всех известных мне языках (их не так много) вряд ли пользуются ТВОИМ определением чистоты.
ARK>>"pure" функция в D может в некоторых случаях делать ввод-вывод. Хотя в википедии написано, что pure function не может делать ввод-вывод.
S>Ну и может, что из этого? Это не значит, что твое определение известно разработчикам D.
Ну, разработчики D как минимум не используют определение чистоты из википедии.
На мой взгляд, тот подход, который у них, вполне соответствует моему пониманию чистоты. Впрочем, я не настаиваю, это для меня не очень важно. Важнее отказ от википедийного определения.
S>>>Какой вообще смысл в проверки чистоты виртуальной машиной, если виртуальная машина может сделать грязным даже пустой файл/лист без функций вовсе?
ARK>>Это не "проверка чистоты", а демонстрация как минимум неполноты определения чистоты из википедии, если оно претендует на статус формального определения.
S>Какое отношение к чистоте функции имеет твоя демонстрация грязного вычислителя?
Это не демонстрация грязного вычислителя. Это демонстрация влияния окружения. Отношение к определению чистоты оно имеет самое прямое, поскольку это определение непосредственно опирается на эффекты окружения.
S>>>Немного не так. Я смотрю на контракт, чист ли он? Если синус отличается от своего контракта, то это проблема частной реализации синуса, а не контракта. Если это так — возьму другой.
ARK>>Под словом "контракт" ты понимаешь здесь сигнатуру конкретной функции, описание конкретной функции или что-то иное?
S>В том числе сигнатуру, описание, не портит ли функция GetLastError()?
Функций в мире много. Ты всегда проверяешь все инварианты всех функций? Соответствует ли название функции тому, что она делает? Не перепутаны ли местами x и y в функции DrawPoint?
Или, может, ты доверяешь сигнатуре и/или документации?
S>>>Ну как, ты же судишь по виртуальной машине!
ARK>>Нет, я использую виртуальную машину для демонстрации того, что определение чистоты из википедии при написании кода является не слишком полезным. Оно неформальное и общего характера.
S>Так это лишь пример того, что чистота функции не распространяется автоматом на вычислитель.
Это окружение, а не вычислитель. Если бы это был вычислитель, то и в С все функции были бы чистыми. Окружение "работает" всегда, и до вычислителя (если он есть), и во время, и после.
S>>>А в какой момент action получит строку для вывода, сгенерированную в рантайме?
ARK>>"Сгенерированную в рантайме" — это возвращенную в рантайме другим грязным action, который сгенерирован функцией, например, "scanf"? Ну, в соответствующий момент в рантайме и получит. Не очень понял этого вопроса. Все как в хаскеле же.
S>Нет, не как в хаскеле. В хаскеле генерация действия отделена от его выполнения. Это и позволяет кэшировать результаты IO функций, и потом выполнять их.
Ты пока не продемонстрировал этого отделения. То, что ты продемонстрировал, может быть повторено на любом грязном императивном языке.
UPD. ОК, я подумал и соглашусь, что отделение в каком-то смысле есть. Но, на мой взгляд, это отделение эквивалентно созданию обертки и по форме, и по сути — просто обертка создается внутри, а не снаружи.
S>>>Во всех известных мне языках (их не так много) вряд ли пользуются ТВОИМ определением чистоты.
ARK>>"pure" функция в D может в некоторых случаях делать ввод-вывод. Хотя в википедии написано, что pure function не может делать ввод-вывод.
S>Ну и может, что из этого? Это не значит, что твое определение известно разработчикам D.
Ну, разработчики D как минимум не используют определение чистоты из википедии.
На мой взгляд, тот подход, который у них, вполне соответствует моему пониманию чистоты. Впрочем, я не настаиваю, это для меня не очень важно. Важнее отказ от википедийного определения.
S>>>Какой вообще смысл в проверки чистоты виртуальной машиной, если виртуальная машина может сделать грязным даже пустой файл/лист без функций вовсе?
ARK>>Это не "проверка чистоты", а демонстрация как минимум неполноты определения чистоты из википедии, если оно претендует на статус формального определения.
S>Какое отношение к чистоте функции имеет твоя демонстрация грязного вычислителя?
Это не демонстрация грязного вычислителя. Это демонстрация влияния окружения. Отношение к определению чистоты оно имеет самое прямое, поскольку это определение непосредственно опирается на эффекты окружения.
S>>>Немного не так. Я смотрю на контракт, чист ли он? Если синус отличается от своего контракта, то это проблема частной реализации синуса, а не контракта. Если это так — возьму другой.
ARK>>Под словом "контракт" ты понимаешь здесь сигнатуру конкретной функции, описание конкретной функции или что-то иное?
S>В том числе сигнатуру, описание, не портит ли функция GetLastError()?
Функций в мире много. Ты всегда проверяешь все инварианты всех функций? Соответствует ли название функции тому, что она делает? Не перепутаны ли местами x и y в функции DrawPoint?
Или, может, ты доверяешь сигнатуре и/или документации?
S>>>Ну как, ты же судишь по виртуальной машине!
ARK>>Нет, я использую виртуальную машину для демонстрации того, что определение чистоты из википедии при написании кода является не слишком полезным. Оно неформальное и общего характера.
S>Так это лишь пример того, что чистота функции не распространяется автоматом на вычислитель.
Это окружение, а не вычислитель. Если бы это был вычислитель, то и в С все функции были бы чистыми. Окружение "работает" всегда, и до вычислителя (если он есть), и во время, и после.
S>>>А в какой момент action получит строку для вывода, сгенерированную в рантайме?
ARK>>"Сгенерированную в рантайме" — это возвращенную в рантайме другим грязным action, который сгенерирован функцией, например, "scanf"? Ну, в соответствующий момент в рантайме и получит. Не очень понял этого вопроса. Все как в хаскеле же.
S>Нет, не как в хаскеле. В хаскеле генерация действия отделена от его выполнения. Это и позволяет кэшировать результаты IO функций, и потом выполнять их.
UPD. ОК, я подумал и соглашусь, что отделение в каком-то смысле есть. Но, на мой взгляд, это отделение эквивалентно созданию обертки и по форме, и по сути — просто обертка создается внутри, а не снаружи.