thedeemon: (Default)
[personal profile] thedeemon
Поразжигал немного в комментах у ребе Б. рознь к социальной группе "ленивые авторы языков". Чтобы не излагать свою позицию каждый раз заново, сохраню сюда.

Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов.

Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.

Date: 2012-10-12 09:10 pm (UTC)
From: [identity profile] si14.livejournal.com
>вы специально читаете так, чтобы считать меня дураком
Что я читаю? Я цитирую ваши слова:
>Вторая версия Эрланга под названием Cloud Haskell
>исправляет ошибки реализации первой версии!
>let it fail сыграло здесь свою роль
Кроме того, вот эта ваша фраза
>в неправильной семантике (возможная пропажа сообщений)
показывает одновременно:
-полное непонимание «семантики Erlang'а»;
-безапеляционно-экспертное мнение про её «неправильность»;
-веру в фей, единорогов и код без багов.
В принципе, насколько я могу судить по вашему блогу, это логично вытекает из отсутствия опыта написания чего-либо в продакшн как на том, так и на другом языке. Как это может сочетаться с непререкаемо-менторским тоном там и тут, я не совсем понимаю, равно как и не понимаю это ваше стремление к театральности с постоянным упоминанием неких читателей/зрителей из вашей головы.

Date: 2012-10-12 09:39 pm (UTC)
From: [identity profile] thesz.livejournal.com
Оставлю критику ваших цитат, перейду к чему-либо поинтересней.

Насчёт production. Я считаю, что волен рассказывать столько о своей работе, сколько хочу. И ещё. Как вы думаете, есть ли такая вещь, как NDA? Могу ли я быть ей связан?

Насчёт семантики сообщений я сам не хочу с вами спорить. Поспорьте лучше с Duncan Coutts.

Я основываю своё понимание семантики передачи сообщений Эрлангом на информации Duncan Coutts (плюс то, что читал до этого). Он, в свою очередь, основывался на чтении документации Эрланга, чтении исходного кода его системы времени выполнения и общении с разработчиками Эрланга. Вы сможете опровергнуть его слова? Время в докладе 20:35. Процесс, которому послали m1, m2 и m3 может получить и m1, m3 (без m2).

Я также процитировал Duncan Coutts, когда говорил о неправильности семантики Эрланга. Вы сможете опровергнуть его слова? Это уже упомянутое выше время 20:35 и 21:25, где говорится о новой, более правильной семантике посылки сообщений.

Я считаю, что способность Эрланга жить с такой реализацией передачи сообщений была гарантирована только подходом let it fail. Это не fail самого Эрланга. Не то, чтобы наоборот, но это отодвинуло необходимость в изменениях на длительное время. Сыграло свою роль в выборе реализации.

И наконец, вы же не считаете, что мы тут с вами только вдвоём общаемся? Моё мнение, что нас будут читать и перечитывать, именно поэтому я стараюсь писать с учётом будущих читателей. А упоминаю я их, чтобы вы не восприняли мои слова, как обидные и направленные именно вам. Мне просто надо донести своё мнение до читателей.

Date: 2012-10-12 10:33 pm (UTC)
From: [identity profile] si14.livejournal.com
>Насчёт семантики сообщений я сам не хочу с вами спорить. Поспорьте лучше с Duncan Coutts.
Зачем тогда вы написали весь этот шмат рассуждений после этой фразы? Если это опять игра на публику, а «поспорьте лучше с...» должно как бы заткнуть меня, то зачем там внутри расставлены вопросы якобы ко мне? Я просто не могу определиться, стоит ли мне отвечать или нет. Вы же не Duncan Coutts, вроде.

>И наконец, вы же не считаете, что мы тут с вами только вдвоём общаемся?
Нет, конечно. Тут рядом со мной сидят Наполеон и Эйнштейн, ну и Иисус на огонёк зашёл. Мне кажется, что, если вы отвечаете на мой комментарий, то предполагать, что ваш ответ направлен именно мне, нормально. Если же вы хотите доносить мнение до каких-то читателей, то зачем вам для этого комментарии? У вас для этого вроде блог есть.

Date: 2012-10-12 10:47 pm (UTC)
From: [identity profile] thesz.livejournal.com
Выше я просто опираюсь на авторитет. Я привёл его и его рассуждения. Если вы способны опровергнуть выводы D. Coutts, то и мне полезно будет, и будущим читателям, да и прогрессу нашей отрасли в целом.

Действительно, у меня есть блог. Но я также могу использовать и комментарий. Я считаю, что у меня есть свобода выбора. На данный момент я выбрал комментарий, ибо не считаю тему достаточно заметной. Либо наоборот, достаточно заметной помещения комментария в эти рассуждения.

Date: 2012-10-12 11:22 pm (UTC)
From: [identity profile] si14.livejournal.com
Проблема в том, что, «опираясь на авторитет», вы, по всей видимости, сознательно недоговариваете, что в приличном обществе приравнивается к прямой лжи.
>Процесс, которому послали m1, m2 и m3 может получить и m1, m3 (без m2).
...если это сообщение, посланное между нодами по сети, причём m2 попадёт на момент реконнекта между нодами по причине фейла сети.
Нужно ли пояснять то различие восприятия вероятности подобного события, которое возникает из опущеной вами подробности? Мне с трудом верится, что вы, явно пересмотрев это видео несколько раз (в конце концов, вряд ли вы запомнили эти цифры времени с первого раза), не обратили внимания на эту «мелкую деталь». Добавляет же идиотизма изначальной претензии решение, которое предлагается на следующем слайде: дожидаться ответа для важных сообщений, гарантируя их доставку. Конечно же, никто в Erlang community не додумался до этого, это невозможно сделать средствами Erlang и поэтому нужно срочно переписать всё на Cloud Haskell, который принципиально улучшит семантику сообщений.

Кстати, упомянутый Duncan Coutts:
-не писал на Erlang'е сам;
-судя по http://www.well-typed.com/people/duncan, не имеет production опыта, исключительно academy+opensource.
Поэтому приводить его в качестве авторитета относительно профессионального применения Erlang или Haskell достаточно странно.

Безусловно, у вас есть свобода хамить окружающим, устраивая цирковое представление «для читателей» из диалога.

Date: 2012-10-13 12:25 am (UTC)
From: [identity profile] thesz.livejournal.com
О, упоминание хамства это почти что Годвин в общении со мной. Вы, наверное, не очень понимаете значение термина "хамство". "Хамство" значит "поведение или поступки хама". "Хам," в свою очередь, это презрительное обращение дворян к низшим сословиям. Мне и тут не стыдно признаться в рабоче-крестьянском происхождении. Однако чтобы я мог как-то негативно прореагировать на вашу реплику мне необходимо знать, что вы дворянин.

Итак, дворянин ли вы?

Другое значение "хама" - преклоняющийся перед властью и тп. Не думаю, что это мой случай. Как и остальные.

Вы как-то уж очень напираете на production опыт. Мне напомнить, что Эрланг создавался в компьютерной лаборатории высоколобыми учёными? Я подозреваю, что у Джо Армстронга на момент создания Эрланга не было production опыта. Есть ли у вас опровергающие моё подозрение факты?

Я предпочитаю опираться на ум и опыт разработчика, желательно, чтобы опыт был обширен. Эрланг создавался умными людьми, так и создатели Cloud Haskell не хуже. С обоими я знаком лично, правда, в разной степени. Jeff Epstein работает в Parallel Scientific, соответственно, я общался с ним много больше.

Поэтому я смотрю на CH много оптимистичней, чем вы.

У меня широкий production опыт встраиваемых систем, от шумомера до банкомата. Более 16 лет в сумме. Я не люблю ошибки, ибо поправить их я, обычно, не мог и они стоили больших денег работодателям. Я также не люблю ошибки, ибо мне "лень" их править - цена исправления пропорциональна времени между внесением и обнаружением, поэтому чем позже ошибка обнаружена, чем тяжелее придётся трудиться. "Лень" в кавычках, конечно, ибо я исправлю свою ошибку, и чужую тоже. Просто мне нравится их не допускать, есть в этом что-то такое, даже вы, я думаю, согласитесь.

Я думаю, вам просто нравится адреналин "исправления после тестирования на зеркале production системы". Так, чтобы заметно было, чтобы все восторгались вокруг, какой вы молодец.

Ибо я не вижу других причин в хвастовстве пропущенной ошибкой, кроме как повторения столь приятного воспоминания. В её исправлении как можно более быстрым способом также нет никакой особой доблести. И рассказ об этом также несёт исключительно психологическую нагрузку. И уж совсем нет вашей заслуги в том, что вы воспользовались при этом Эрлангом. Как нет заслуги Эрланга во всей этой феерии, ибо он всего лишь инструмент.

Broken window fallacy, вот ближайшее понятие, которое приходит на ум при чтении историй о горячей подмене кода.

Date: 2012-10-13 12:42 am (UTC)
From: [identity profile] si14.livejournal.com
Чего-то вы совсем не туда ушли. Напомню, о чём изначально речь:
-про «Erlang теряет сообщения, Cloud Haskell это фиксит» мы вроде выяснили, что это ложь, причём ваша, а не автора презентации;
-про «Cloud Haskell это Erlang версии 2, done right» мы вроде тоже выяснили, что на версию 2 ни по фичам, ни по «багфиксам» не тянет.
Таким образом, я не совсем понимаю, к чему это полотно текста. К вашему гигантскому, но бесследному опыту? Ну так сами же говорите — эмбеддед, это очень узкая ниша, из которой делать заявления про программирование вообще немного странно и самонадеянно. К «не люблю делать ошибки» и диагностике по аватарке? Ну, видимо, вам приятнее верить в код без ошибок. Мне не жалко, у нас свобода вероисповедания пока. Если вам хочется просто выговориться, зачем вы делаете это в ответе мне?

Date: 2012-10-13 12:48 am (UTC)
From: [identity profile] thesz.livejournal.com
О, нет. Я слишком хорошо себя чувствую, чтобы защищаться от столь мелких придирок. И так всем ясно, что и кто к чему.

Date: 2012-10-14 09:54 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
а можно вопрос по тангенсу?

1. кто выбирает, где находятся акторы - локально или распределённо?

2. как система знает, что m2 безнадёжно утрачен, когда отдаёт m3 до m2?

(ну и как "читатель", скажу, что так да, обоих вас читают :))

Date: 2012-10-24 01:35 pm (UTC)
From: [identity profile] si14.livejournal.com
1. Программист в обоих случаях.
2. Я не совсем понял вопрос.

Date: 2012-10-24 07:48 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
2. в контексте беседы речь зашла о том, что m3 может быть observed без m2. Для того, чтобы это случилось, нужны две вещи: m3 observed; система должна знать, что m2 не может быть observed in the future.

В противном случае если система не знает, что m2 утрачен, она не должна отдавать m3 до m2. Так?

Date: 2012-10-24 10:22 pm (UTC)
From: [identity profile] si14.livejournal.com
Это всё ясно. Проблема в том, что в нашей беседе смешано много понятий.
-m1, m2 и m3 это *атомарные* сообщения уровня платформы. Т.е. речь не идёт о «получить невалидный терм на вход» — если терм вообще передался, то он валиден. Подобные гарантии предоставляет нам TCP, плюс это контролируется протоколом общения нод;
-т.к. ноды, действительно, могут быть рассоединены аппаратно, а после этого снова соединены, при этом в буфере на отправку может лежать некоторое количество сообщений — возможна ситуация, когда из очереди на посылку потеряется какое-то *целое* количество сообщений (хотя и *крайне* маловероятна). Однако любые решения относительно таких вопросов на уровне платформы будут крайне неэффективными, т.к. это не логика уровня платформы, это логика уровня приложения. Насколько важен порядок и полнота доставки? Сколько мы можем ждать прихода подтверждения о получении? Что делать, если потерялось подтверждение о получении, но фактически сообщение получено? Всё это вопросы, специфичные для конкретного приложения; поэтому в рамках Erlang'а это тривиально решается программистом. Более того, пример, который приводится там в презентации Cloud Haskell как «решение проблемы» — откровенно идиотский, т.к. это просто примитивное ожидание подтверждения получения сообщения без какой-либо логики вроде таймаутов и «а что делать, если потерялось именно подтверждение», и он ровно так же присутствует в Erlang'е (впрочем, хотя бы с таймаутами).

Кстати, я как-то забыл ещё один момент: очень заметно, что тот товарищ — дилетант в Erlang'е, потому как Cloud Haskell не имеет одной из главных (и, имхо, даже более важных, чем межнодное взаимодействие) фич: супервизоров и их деревьев. Проект, который заявляет о том, что он «Erlang-inspired», при отсутствии супервизоров можно закапывать сразу.

Date: 2012-10-25 12:37 am (UTC)
From: [identity profile] thesz.livejournal.com
>супервизоров и их деревьев.

Прав ли я, что супервизоры и их деревья (которые, если мне не изменяет память, обычно являются чем-то вроде расчёски, ибо количество уровней чаще всего 1) выполняются в виде библиотеки поверх сообщений от VM? Если я прав, то сообщения от VM об отключении процесса есть, насколько я понимаю в состоянии дел. Если я не прав, то не затруднит ли вас показать, где в языке Эрланг, без OTP, присутствует этот функционал?

Date: 2012-10-25 08:39 am (UTC)
From: [identity profile] si14.livejournal.com
Вы же вроде хлопнули дверью, если мне не изменяет память?

>количество уровней чаще всего 1
Нет
>супервизоры и их деревья выполняются в виде библиотеки поверх сообщений от VM
Нет
>не затруднит ли вас показать, где в языке Эрланг, без OTP, присутствует этот функционал
links/monitors/trap_exit

Date: 2012-10-25 11:47 am (UTC)
From: [identity profile] thesz.livejournal.com
Даже если вам изменяет память, есть Яндекс, Гугл и просто путешествие выше по ссылкам.

Мои сведения про количество уровней взяты из диссертации Джо Армстронга.

Поскольку вы сказали категорическое "нет", я хотел бы попросить вас дать статистику по проектам на Эрланге, которая бы подтвердила бы "не чаще всего". Ибо мои сведения взяты из устаревшей, наверное, диссертации Джо Армстронга.

Спасибо за links/monitors/trap_exit. Это отлично подтвердило ваши слова. Более чем. Любой, кто прочитает links/monitors/trap_exit способен уверовать в отсутствие супервизоров на сообщениях от VM. Ибо зачем ему проверять? И вам не стоит давать ссылки, ибо вдруг кто проверит, не станет верить на слово.

У меня позиция много слабей. Я всего лишь могу предоставить ссылку на код на GitHub: https://github.com/haskell-distributed/distributed-process/blob/master/distributed-process/src/Control/Distributed/Process.hs

Там нет магических слов links/monitors/trap_exit. Там есть вот такой кусочек кода:
    -- * Monitoring and linking
  , link
  , linkNode
  , linkPort
  , unlink
  , unlinkNode
  , unlinkPort
  , monitor
  , monitorNode
  , monitorPort
  , unmonitor
  , ProcessLinkException(..)
  , NodeLinkException(..)
  , PortLinkException(..)
  , MonitorRef -- opaque
  , ProcessMonitorNotification(..)
  , NodeMonitorNotification(..)
  , PortMonitorNotification(..)
  , DiedReason(..)
Это декларации для удобного импорта. На мой взгляд, присутствует весь необходимый функционал. Реализация функций находится вот здесь: https://github.com/haskell-distributed/distributed-process/blob/master/distributed-process/src/Control/Distributed/Process/Internal/Primitives.hs

Хочу вернуться к диссертации Джо. Вот она: http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdf

Да, описание мониторов находится в описании Эрланга.

Однако, есть и страница 41: "Viewed as a concurrent language, Erlang is very simple. Since there are no shared data structures, no monitors or synchronised methods etc there is very little to learn."

Получается, что в самом Эрланге нет мониторов, но они есть в его VM.

А вот описание деревьев супервизоров начинается на странице 118, в разделе "Programming Fault Tolerant Systems". То есть, к Эрлангу, как языку и его VM, это отношение не имеет. А я, вроде, об этом спрашивал.

Ну, и страница 175: "There were a total of 141 .app files the AXD sodware. These 141 files represent 11 disjoint supervision trees. Most of the supervision trees are very flat and do not have a complex structure." Далее страница 176: "There are two main sub-nodes in the tree, and the supervisor structure underneath the sub-nodes is flat.".

То есть, как минимум poster child project Эрланга имеет структуру супервизоров, как описал я.

Date: 2012-10-25 12:07 pm (UTC)
From: [identity profile] si14.livejournal.com
>Даже если вам изменяет память, есть Яндекс, Гугл и просто путешествие выше по ссылкам.
Именно так, просто я хотел слегка смягчить указание на то, что возвращаться после хлопка дверью несколько убого.

>хотел бы попросить вас дать статистику по проектам на Эрланге, которая бы подтвердила бы "не чаще всего"
Статистику, будьте добры, посчитайте как-нибудь сами, я же приведу в пример пару приложений — системный kernel и сверхпопулярный ranch (ex-cowboy):
http://i.imgur.com/xpFLc.png
http://i.imgur.com/kPrPb.png
Тезисы Армстронга с 2003 года это мило, но с тех пор прошло почти 10 лет.

>Получается, что в самом Эрланге нет мониторов, но они есть в его VM.
Пожалуйста, изучайте вопрос полнее перед тем, как делать какие-либо утверждения и выводы.
https://en.wikipedia.org/wiki/Monitor_%28synchronization%29
http://www.erlang.org/doc/man/erlang.html#monitor-2
Это принципиально разные вещи. На странице 41 идёт речь о первом, я говорил о втором.

Я не совсем понял, в чём вы попытались меня уличить, кстати, но в целом ситуация меня крайне забавляет всю ветку: вам никак не надоедает учить меня Erlang'у, хотя казалось бы, с чего б вам это делать.

Date: 2012-10-25 12:20 pm (UTC)
From: [identity profile] thesz.livejournal.com
Меня мало волнует кем-то воспринимаемая убогость. Мне надо сделать определённые действия, я их делаю.

>вам никак не надоедает учить меня Erlang'у, хотя казалось бы, с чего б вам это делать.

Что вы! Я делюсь известной мне информацией и получаю неизвестную мне. Параллельно пробуя разобраться с увиденными мной логическими ошибками.

Вопрос про деревья супервизоров. Зачем делать глубокие деревья? Как я понимаю, они менее устойчивы.

Date: 2012-10-25 01:50 pm (UTC)
From: [identity profile] si14.livejournal.com
>Зачем делать глубокие деревья?
Erlang and OTP in Action, Martin Logan, Eric Merritt, and Richard Carlsson, 2010

>Как я понимаю, они менее устойчивы
Неправильно понимаете.

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2012-10-25 06:41 pm (UTC) - Expand

Date: 2012-10-25 12:24 pm (UTC)
From: [identity profile] thesz.livejournal.com
Пропустил насчёт "уличить".

Вот, в чём.

Вы воспринимаете Эрланг вместе с его VM и OTP. Если вы отделите Эрланг от VM и OTP, вас ждёт много интересного. Например, открытие, что Эрланг - очень плохой язык. Потому, что простой.

В частности, в самом Эрланге нет мониторов ни в одном из указанных вами смыслов.

Далее, вы обвинили автора distributed-process в отсутствии мониторов процессов, когда они там есть. Достаточно было посмотреть на основной файл с экспортами. Аналога супервизоров OTP нет, есть такое. Но средства сделать это есть.

А это означает второе замечательное открытие - OTP переносима.

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-10-25 02:03 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2012-10-25 07:35 pm (UTC) - Expand

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-10-25 10:48 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2012-10-25 11:31 pm (UTC) - Expand

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-10-26 12:12 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2012-10-26 12:49 am (UTC) - Expand

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2012-12-01 03:30 am (UTC) - Expand

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-12-01 09:55 am (UTC) - Expand

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2012-12-01 10:59 am (UTC) - Expand

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-12-01 01:16 pm (UTC) - Expand

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2012-12-01 02:17 pm (UTC) - Expand

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-12-02 09:05 am (UTC) - Expand

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2012-12-02 11:02 am (UTC) - Expand

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-12-02 11:20 am (UTC) - Expand

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2012-12-02 12:01 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2012-12-02 01:00 pm (UTC) - Expand

Date: 2012-10-25 08:20 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну тогда мне нужно пересмотреть тот момент в ролике. если Erlang использует TCP и полагается на "TCP packet order" сообщений, то m2 бесследно не может пропасть - т.е. m3 "ни в жисть" не будет observed без m2.

Date: 2012-10-25 09:01 am (UTC)
From: [identity profile] si14.livejournal.com
Будет. m1/m2/m3 это не TCP-пакеты, это пакеты уровня Erlang VM. TCP packet order обеспечивает консистентность самих m1/m2/m3.

Date: 2012-10-25 12:23 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
Что "будет"?

Если m1/m2/m3 уходят по одному соединению, их порядок гарантирован TCP.

На видео речь идёт о совершенно ортогональной вещи. Речь о strict ordering vs reliable delivery. Так вот, Duncan всего лишь пожаловался, что в спецификации Эрланга не очень уточняется, что именно означает reliable delivery, а отсюда вытекают всякие вещи. И что в более поздних работах "кого-то там" именно этот вопрос уточняется. Из чего вытекает фокус с возможным reordering сообщений, которые переданы в cloud haskell по разным соединениям, хотя из program order должен бы выводиться total order сообщений.

У меня совершенно не сложилось впечатления, что де хаскель эту задачу решает "правильнее Эрланга", а лишь объясняется, почему они делают так, и что Эрланг тоже так поступает / будет поступать / столпы благословили такой подход.

Должен заметить, что ждать response совершенно не обязательно для гарантий reliable delivery. В Эрланге есть механизм Unit Of Order? Вот в Java Messaging Service есть.

В двух словах, Reliable delivery не отличается от такого упорядочивания, когда сообщения, отправленные в program order после отправки сообщения X, могут обозреваться получателем только после обозревания сообщения X. Unit of order создаёт такие ребра в partial order всех сообщений, получаемых агентом, что акторы работают как в reliable delivery.

Обращаю внимание на важный пункт: unit of order решается сугубо локальной логикой, не требующий синхронизации с удалёнными агентами, и всего лишь отражает локальную out of bounds синхронизацию, которую очередь сообщений не может наблюдать. Однако, это решение не может быть реализовано без примитивного барьера в системе передачи сообщений.

Date: 2014-09-24 12:05 pm (UTC)
From: [identity profile] thesz.livejournal.com
Соединение TCP может быть разорвано. m1, m2, разрыв, подклюение, m3. Поскольку разрыв соединения может произойти до или после приёма m2, гарантировать приём (чтение принимающей стороной) m2 без изменения логики не представляется возможным.

Date: 2012-10-25 08:51 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
в ролике речь о другом.

link p;
send p "hi!";
unlink p;
link p;
send p "bye!";
unlink p;

в каком порядке доставка "hi!" vs "bye!"? Логически два соединения разные и порядок между сообщениями этих соединений отсутствует.

Date: 2012-10-25 09:02 am (UTC)
From: [identity profile] si14.livejournal.com
Там дальше есть «решение» с wait (или как-то так). Ровно так же это решается в Erlang'е, просто один в один.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 30th, 2026 07:27 pm
Powered by Dreamwidth Studios