[identity profile] bytebuster463.livejournal.com 2016-08-04 09:40 pm (UTC)(link)
Ну, как-бы, the Elders of the Internet (https://youtu.be/dkXqw9YEnmE) рекомендуют тянуть за собой хвост последовательных изменений оного state…

[identity profile] juan-gandhi.livejournal.com 2016-08-04 10:03 pm (UTC)(link)
А если им надо свернуть - то вот им fold.
stas: (Default)

[personal profile] stas 2016-08-04 11:21 pm (UTC)(link)
Для этого надо знать, каково оно и кто его меняет. Небось не все знают, что капитализация буквы i - часть state. А если всё это учитывать - это сколько поклажи надо с собой таскать, весь мир на горбу.

[identity profile] bytebuster463.livejournal.com 2016-08-04 11:47 pm (UTC)(link)
> Для этого надо знать, каково оно и кто его меняет.

Ровно наоборот. Никто ничего не меняет. Состояние, которое мы обрабатываем, — неизменяемо. Мы, если хотим чо менять, возвращаем другой экземпляр состояния.

> сколько поклажи надо с собой таскать

Да, это правда. Но тут включается в работу:
(1) злобный матан, о котором владелец этого жжурнала может рассказать намного больше, чем я;
(2) ленивость и отложенные вычисления;
(3) те самые The Elders, которые умеют писать оптимизации на уровне средства языка. Что, с философской точки зрения, есть хорошо, потому что говнокодер типа меня даже если и напишет свою рукописную оптимизацию, то напишет её не лучше, чем The Eldets. Что, впрочем, не уменьшает значения правила Know Your Tool; совсем плохому коду, конечно, ничто не поможет.

[identity profile] worm-ii.livejournal.com 2016-08-05 08:24 am (UTC)(link)
Вывод: нужно сидеть на попе ровно и жаловаться, что The Elders ещё не написали Достаточно Злобный Матан, чтобы мы имели возможность Писать Правильно.

[identity profile] bytebuster463.livejournal.com 2016-08-05 05:48 pm (UTC)(link)
Неожиданный вывод из моих слов. :)

Думаю, что ровно наоборот: в любой момент времени следует:
1. Знать причины всех бед (мутабельность — одна из них, если вообще не главная)
2. Писать Правильно™ — именно в контексте наличествующих средств. Know Your Tool™. Знать, что уже написано by the Elders. Ну и интересоваться тем, чо они пилят сейчас. Чтобы знать, как будет Правильно в будущем.
stas: (Default)

[personal profile] stas 2016-08-05 08:17 pm (UTC)(link)
Состояние, которое мы обрабатываем, — неизменяемо.

Беда в том, что это "состояние" - неизвестно в общем случае. Т.е. если вам надо посчитать 2+2, то ещё куда ни шло, а если надо дело иметь с реальным миром, то оказывается, что у арабов 2 не такое, у евреев + не такой, а у турков по четвергам после полудня надо добавлять к сумме 0.725. И это всё - часть вашего состояния. Таскать по всему коду набор знаний "а не в Турции ли мы? А сколько сейчас времени?" и т.п. explicitly - это путь к психушке. А implicitly - получается global mutable state.

И непонятно, чем тут особенно elders с матаном помогают.

[identity profile] bytebuster463.livejournal.com 2016-08-05 09:58 pm (UTC)(link)
Мне кажется, Вы путаете состояние и преобразование.

Если Ваша мат.модель подразумевает, что вычисление "2+2" не есть чистым, то есть, зависит от времени года, фазы Луны или нахождения в Турции по четвергам, то:

1. это еще вовсе не означает отказ от сути "состояния". Иначе получим, что Тьюринг — лох вследствие того, что в Турции по четвергам хотят обмануть наивного туриста.

2. да, надо набор знаний передавать. Потому что трёх аргументов "2", "+" и "2" не достаточно для преобразования.
stas: (Default)

[personal profile] stas 2016-08-06 09:01 pm (UTC)(link)
Тут как раз и получаются 2 проблемы:

1. Заранее знать, что чисто, а что нет, очень трудно, и оно всё время меняется. Общаться с окружающим миром необходимо, а он по определению нечист. И эта нечистота расползается. Т.е. я не спорю, что вещи вроде мемоизации и чистых функций - прекрасны там, где работают. Проблема даже не в том, что они работают не везде, а в том, насколько тяжело заранее знать, где именно, и поддерживать это знание on the long run.

2. Ну яот я такую картину в dependency injection наблюдал, когда для каждого пука надо функцию с 20 аргументами, каждый из которых зависит он различного набора из 10 других аргументов. Разбираться в этом спагетти и держать его в голове - это довольно сильно запаривает. Невольно зарождается мысль - не может быть, чтобы нельзя это делать как-нибудь по-другому.

[identity profile] bytebuster463.livejournal.com 2016-08-06 11:47 pm (UTC)(link)
1. Всё так. Но следуте еще учитывать философский момент, что никакой софт не автоматизирует реальный мир. Он автоматизирует некую мат.модель.
Можно, конечно, сложить лапки и сказать: это конец; мир неавтоматизируем, увольняюсь из программеров и иду в управдомы ©. Но ведь это не выход.
Мат.модель есть приближение на пути к формализации. Формализация есть необходимое условие автоматизируемости. Вот и всё.

2. Согласен, такое дебажить — с ума можно сойти.
Но опять-таки: The Elders уже давно придумали, как с этим бороться: функции с массивным injection (если ФП, то — с кучей лямбд на входе) дождны быть настолько тупыми, что там не должно быть места багам.
У нас в тэге F# недавно подобный вопрос пробегал (http://stackoverflow.com/q/38663990/974789).

Но, возвращаясь к исходной точке: состояние всегда должно быть детерминировано по времени {исполнения}, иначе будет то, о чём написано в шапке постинга.
И тем более, нет причин считать, что "состояние" не имеет смысла.