Форум
Декларативное программирование
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, VoidEx, Вы писали: VE>Здравствуйте, samius, Вы писали: S>>Выделение памяти у нас превартилось в семантически обозримый side effect? С каких пор? VE>Ты спрашиваешь, как программе определить, выделяется ли память? S>>>>При замене вызова значением мы должны обеспечить тот же эффект по определению прозрачности. S>>А по поводу интуиции - все-таки ориентировано на неглупых людей, которые способны провести границы между системой и остальным миром. VE>Математики не потому составляют чёткие определения, что они глупые, а как раз наоборот, потому что понимают, что дьявол в деталях. VE>Может, в определение напишем "side-effect - то, что неглупый человек считает side-effect'ом"? S>>Ты путаешь referential transparency с детерминированностью. Если есть гарантия что результат будет тот же и не будет зависеть от ввода через I/O или скрытых состояний, то это есть детерминированность, а не ссылочная прозрачность. Детерминированной функции портить мир можно. Ссылочно прозрачному выражению - нельзя. VE>Не путаю. Она и не портит, мир живёт себе как жил. Ничем не хуже, чем с выделенной памятью. VE>>>Что мешает использовать файл как оперативную память? S>>Ничего. Только детерминированности не будет, т.к. общаешься с файлом через I/O. А нет детерминированности - нет и прозрачности. VE>Почему это не будет? На n! при сотне вызовов возвращает верное значение? Да. Так что ж тогда? S>>>>Определения с тобой не согласны. Я лишь пытаюсь это обозначить. VE>>>Нет, ты со мной не согласен. Я задал кучу вопросов, на которые такое определение ответить не в состоянии. S>>Мне казалось, что я на все ответил, опираясь на определение. VE>Это тебе казалось, а я ответов не получил. Видимо потому, что ты тоже опираешься на "интуицию умных людей", а у меня такое понятие отсутствует, мне нужно чёткое определение, чтоб определение было полезным даже для дурака вроде меня. Эдак можно начать опираться на клятвы матерью и своим здоровьем. VE>>>Эти определения натыкаются на термин outside world, который не определён. S>>:) VE>>>Работа с памятью определяется рантаймом, и поэтому мы считаем, что это не эффект. Ну ок. Делаем рантайм, который общается с кластером, загружает туда код, получает оттуда результат. Это что? IO? Side effect? С т.з. языка нет, это детали реализации. С т.з. зрения википедии ответа просто банально нет. S>>Ответа не может быть для тех, кто не может провести границу системы. Смотри: S>>а) твоя программа запрашивает значение факториала у кластера путем отправки голубя. Это ввод/вывод. S>>б) твоя программа выполняется рантаймом на кластере путем посылки дилижансов, почтовых голубей и т.п. к кластеру и обратно прозрачно для программы. Т.е. сама программа никого не посылает. Тогда ввода/вывода формально нет, и если голуби работают семантически необозримо, то все формально чисто. Даже если у кочегара дилижанса не выдержала селезенка и его семье придется выплачивать пособие. VE>А что если работает рантайм, но программа имеет возможность косвенно следить за её работой? Ну, как с памятью. VE>Или обратный эффект. Что, если я могу рантайм расширять? Ну вот например ввёл доставки голубем, и с т.з. языка это считается runtime extension и даёт те же гарантии, что и работа с памятью. А дальше компилятор на основе метаданных выбирает реализацию сам - то ли память, то ли голуби. VE>Я не думаю, что это такой уж надуманный пример, вон взять Nemerle 2, который будет как бы инструмент для создания языков. Там может понадобиться нечто подобное. В базовом языке (который ещё и грязный) у нас будет всё превращаться в голубиную почту, но в исходном чистом ДСЛ это будет обычное вычисление. S>>Посылка данных в сеть - это output через I/O девайс. А выделение памяти не является семантически обозримым сайд эффектом. VE>В чём разница? Увидеть можно и то, и другое. Изнутри программы. S>>Что по поводу insignificant сайд эффекта - так это представь вычисление факториала со внешним мутабельным аккумулятором. Такая функция будет формально impure, но включенная в выражение таким образом, что бы изменения не распространялись за пределы выражения, ее побочный эффект будет незначителен для того, кто ожидает результат выражения. VE>Можно ещё представить себе вычисление огроменного списка. Формально он pure, но запусти их 3 сразу и памяти не хватит. И это оказывается очень так значительно для того, кто ожидает результат вычисления. Но это лирика. VE>А можно опять вернуться к голубиной почте, а лучше к temporary файл. Можно создать temporary file (имя которому генерирует ОСь, и имя которого неизвестно никому, только handle открывшему процессу), поиспользовать для вычислений и закрыть (после чего он может удалиться, а может и нет, зависит от флагов открытия). Такая функция чиста? Вроде ввод-вывод есть, но побочный эффект необнаруживаем.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …