Информация об изменениях

Сообщение Re[12]: Почему Эрланг от 09.06.2015 21:53

Изменено 09.06.2015 22:02 vdimas

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

V>>Ну, вообще, самый большой плюс от future — это то, что они являются еще и монадами maybe {result, error}, с распространением исключений по всей связанной цепочке (в будущих расширениях, типа future::then). Да, на этом можно строить иерархии задач (графов агентов) с автоматическим распространением ошибки к некоему "корню".


I> Это не плюс, это собственно "по определению".


Это просто инструмент, которым можно вот этот конкретный сценарий, совпадающий с путем распространения ошибки "по-умолчанию", решить задешево. Но в реальной жизни приходится пути распространения ошибок корректировать.

I>Выполнение асинхронного кода идет кусочками, соответсвенно связь между цепочками это основной поток(flow) вычисления + поток(flow) ошибок. Т.е. ровно то же, что и унутре каждой цепочки.


Это можно сказать и про синхронный код, про каждый вызов АПИ ОС. Не в этом дело.

I>Собственно отсюда и растут проблемы с глобальным состоянием.


Если честно, я плохо понимаю, откуда ты постоянно берешь своё "глобальное состояние".

I>Вот, например


I>
I>var x = readFile('path')
I>var i = readGlobalState(x);
I>var y = ajaxPost(x);
I>writeGlobalState(i);

I>return toJson(y);
I>


I>Код выглядит как синхронный, но на самом деле он может быть и асинхронным. Проблемы с глобальным состоянием во весь рост — те самые гонки, "которых нет". Теперь пример сложнее


Не надо. Ты приводишь нелепые сниппеты на нелепых языках на нелепых фреймворках. Мы и так знаем, что там всё не просто ))
Да, у JS есть такая страшная хрень как "контекст", это такая же точно гиря как в случае с Лиспом и все побочные эффекты от "контекста" были известны еще десятки лет назад. Я рад, что ты, наконец, открываешь эти эффекты для себя.

I>Теперь про агентов — в коде выше в асинхронном варианте в обоих вариантах есть гонки, это общая проблема любой многозадачности, а не так, как думают сельские крымские разработчики (только в вытесняющей)


Тебе уже сотни раз рекомендовалось поинтересоваться, что есть "гонки". Ты называешь этим термином нечто, что уже 3-й год весь форум не в состоянии идентифицировать.

Например, даже любимый твой Майкрософт в доках пишет, что кооперативная многозадачность позволяется избегать лишних гонок и лишних же блокировок. Но у тебя как был затык в понимании "гоно", так и не рассосался до сих пор. И ведь не страшно же тебе на весь интернет так подставляться, не? )) С работы не уволят, случаем? ))

I>На одних только then никаких агентов не построишь.


Ну ващет, построишь, там же на них можно ветвится — это же бинарная монада, т.е. можно сэмулировать тьюринг-полную систему, а далее ты в курсе.

I>Агенты строятся исключительно за счет изолирования состояния.


Потеки сознания.
А инкапсуляция состояния в обычных объектах — без изолирования? ))
Агенты — это сугубо парадигма и ничего более. Простая парадигма, надо сказать. Покурить её сам на этот раз сходишь или отправить?))


I>then это всего лишь связывание цепочек


Наоборот — для разрывания последовательных операций
Вот ты жжешь, коллега...

Берем некий изначально "непрерывный" алгоритм, режем этот алгоритм на куски с помощью then (в дотнете Task.ContinueWith, которое генерит компилятор на месте await).

И все это с единственной целью — уйти от вытесняющей ядерной многозадачности в сторону кооперативной юзверской.

I>Как видно, асинхронные варианты выше имеют в полный рост проблемы с глобальным состоянием.


Очередные потеки.
Re[12]: Почему Эрланг
Здравствуйте, Ikemefula, Вы писали:

V>>Ну, вообще, самый большой плюс от future — это то, что они являются еще и монадами maybe {result, error}, с распространением исключений по всей связанной цепочке (в будущих расширениях, типа future::then). Да, на этом можно строить иерархии задач (графов агентов) с автоматическим распространением ошибки к некоему "корню".


I> Это не плюс, это собственно "по определению".


Это просто инструмент, которым можно вот этот конкретный сценарий, совпадающий с путем распространения ошибки "по-умолчанию", решить задешево. Но в реальной жизни приходится пути распространения ошибок корректировать.

I>Выполнение асинхронного кода идет кусочками, соответсвенно связь между цепочками это основной поток(flow) вычисления + поток(flow) ошибок. Т.е. ровно то же, что и унутре каждой цепочки.


Это можно сказать и про синхронный код, про каждый вызов АПИ ОС. Не в этом дело.

I>Собственно отсюда и растут проблемы с глобальным состоянием.


Если честно, я плохо понимаю, откуда ты постоянно берешь своё "глобальное состояние".

I>Вот, например


I>
I>var x = readFile('path')
I>var i = readGlobalState(x);
I>var y = ajaxPost(x);
I>writeGlobalState(i);

I>return toJson(y);
I>


I>Код выглядит как синхронный, но на самом деле он может быть и асинхронным. Проблемы с глобальным состоянием во весь рост — те самые гонки, "которых нет". Теперь пример сложнее


Не надо. Ты приводишь нелепые сниппеты на нелепых языках на нелепых фреймворках. Мы и так знаем, что там всё не просто ))
Да, у JS есть такая страшная хрень как "контекст", это такая же точно гиря как в случае с Лиспом и все побочные эффекты от "контекста" были известны еще десятки лет назад. Я рад, что ты, наконец, открываешь эти эффекты для себя.

I>Теперь про агентов — в коде выше в асинхронном варианте в обоих вариантах есть гонки, это общая проблема любой многозадачности, а не так, как думают сельские крымские разработчики (только в вытесняющей)


Тебе уже сотни раз рекомендовалось поинтересоваться, что есть "гонки". Ты называешь этим термином нечто, что уже 3-й год весь форум не в состоянии идентифицировать.

Например, даже любимый твой Майкрософт в доках пишет, что кооперативная многозадачность позволяется избегать лишних гонок и лишних же блокировок. Но у тебя как был затык в понимании "гонок", так и не рассосался до сих пор. И ведь не страшно же тебе на весь интернет так подставляться, не? )) С работы не уволят, случаем? ))

I>На одних только then никаких агентов не построишь.


Ну ващет, построишь, там же на них можно ветвится — это же бинарная монада, т.е. можно сэмулировать тьюринг-полную систему, а далее ты в курсе.

I>Агенты строятся исключительно за счет изолирования состояния.


Потеки сознания.
А инкапсуляция состояния в обычных объектах — без изолирования? ))
Агенты — это сугубо парадигма и ничего более. Простая парадигма, надо сказать. Покурить её сам на этот раз сходишь или отправить?))


I>then это всего лишь связывание цепочек


Наоборот — для разрывания последовательных операций
Вот ты жжешь, коллега...

Берем некий изначально "непрерывный" алгоритм, режем этот алгоритм на куски с помощью then (в дотнете Task.ContinueWith, которое генерит компилятор на месте await).

И все это с единственной целью — уйти от вытесняющей ядерной многозадачности в сторону кооперативной юзверской.

I>Как видно, асинхронные варианты выше имеют в полный рост проблемы с глобальным состоянием.


Очередные потеки.