История изменений
Исправление byko3y, (текущая версия) :
А масштабируемость (например, взять Akka с ее сотнями тысяч акторов) и потокобезопасность дают именно иммутабельные данные
Ну типа в абстрактном идеально сферическом мире программы состоят из неограниченно параллелящихся независимых алгоритмов. Но не в реальном мире, в котором приходится реагировать, сообщать, отменять, обновлять, пропускать, уточнять — всё это современные программы делают отвратительно. Просто отправить сообщение от агента к агенту — это сотая доля от всей требуемой функциональности.
Я согласен с моделью канала, то есть, то, что модифицирует один — читает другой. Но я напоминаю, что тот же императивный цикл можно представить в виде рекурсивной функции — вроде бы переход от изменяемых данных к неизменяемым, но на самом деле это эквивалентные модели. Ультимативный пример — машину тьюринга можно представить как функцию, аргументом которой является предыдущий шаг, результатом — следующий. И где ваш Тьюринг теперь?
На самом деле нет никакого «мы перешли к иммутабельным структурам данных, и наши волосы стали мягкими и шелковистыми нет», они взаимозаменяемы и не всегда одно точно лучше другого — оценивать что-то можно только на примере конкретной задачи с конкретным исполнителем. Намного более безусловным провалом я считаю отсутствие реактивности у большинства современных вычислителей — той самой, которая незаменима для конкретных задач с конкретными исполнителями, но которую крайне тяжело решать на машинах Тьюринга. В нынешнем IT это называется real-time, который, если подумать, очень просто реализуем и вроде бы должен быть фундаментальным, но по итогу крайне тяжело дается машинам Тьюринга.
Исходная версия byko3y, :
А масштабируемость (например, взять Akka с ее сотнями тысяч акторов) и потокобезопасность дают именно иммутабельные данные
Ну типа в абстрактном идеально сферическом мире программы состоят из неограниченно параллелящихся независимых алгоритмов. Но не в реальном мире, в котором приходится реагировать, сообщать, отменять, обновлять, пропускать, уточнять — всё это современные программы делают отвратительно. Просто отправить сообщение от агента к агенту — это сотая доля от всей требуемой функциональности.
Я согласен с моделью канала, то есть, то, что модифицирует один — читает другой. Но я напоминаю, что тот же императивный цикл можно представить в виде рекурсивной функции — вроде бы переход от изменяемых данных к неизменяемым, но на самом деле это эквивалентные модели. Ультимативный пример — машину тьюринга можно представить как функцию, аргументом которой является предыдущий шаг, результатом — следующий. И где ваш Тьюринг теперь?
На самом деле нет никакого «мы перешли к иммутабельным структурам данных, и наши волосы стали мягкими и шелковистыми нет», они взаимозаменяемы и не всегда одно точно лучше другого — оценивать что-то можно только на примере конкретной задачи с конкретным исполнителем. Намного большим провалом я считаю отсутствие реактивности у большинства современных вычислителей — той самой, которая незаменима для конкретных задач с конкретными исполнителями, но которую крайне тяжело решать на машинах Тьюринга. В нынешнем IT это называется real-time, который, если подумать, очень просто реализуем и вроде бы должен быть фундаментальным, но по итогу крайне тяжело дается машинам Тьюринга.