(Untitled)

Feb 13, 2015 06:28

Что-то я, граждане, в очередной раз не понимаю, зачем нужен Erlang. Т.е очередная моя история с ним, кажется, близка к фейлу в стиле вступления презентации про опердень ( Read more... )

Leave a comment

grey_kristy February 13 2015, 08:02:42 UTC
А альтернатива то какая? Scala с аккой?

То что можно на C написать систему с акторами и message passing... Ну можно конечно, Erlang ведь на C написан. Но зачем же это писать самому второй раз?

Reply

thesz February 13 2015, 08:07:02 UTC
Cloud Haskell, for one. Это, если что, Erlang 2.0 - исправлены текущие ошибки семантики Эрланга.

Reply

lionet February 13 2015, 08:51:28 UTC
Быстрый вопрос: можно ли там эволюционировать кластер постепенно, нода за нодой? Чтобы менялись сообщения, их типы, а система оставалась на плаву без необходимости перекомпилировать и рестартовать вообще всё?

Reply

dmzlj February 13 2015, 09:01:46 UTC
Быстрый ответ (не глядя) --- скорее всего нет. Но есть мнение, что вся эта вот машинерия с кластерами, обновлениями и т.п. должна быть вне языка. Что бы ноды кластера можно было
писать уже на чём угодно. Привязка к определенному языку это ошибка.

Reply

lionet February 13 2015, 09:37:38 UTC
Ну так на C это можно (ASN.1), на Erlang - можно (dynamic typing). А на хаскеле, получается, надо как на C делать (кодировать через расширяемый формат)? Так это же тупо неудобно. На эрланге - удобно.

Reply

dmzlj February 13 2015, 09:45:38 UTC
ASN.1 это очень маленький кусок middleware. Сериализация? Это как
раз в CH решено.

Конечно, в нем есть ограничения, свойственные статически типизированному
и вообще статическому языку. Это накладывает принципиальные ограничения,
с которыми надо смириться. Но еще раз --- я что-то против замыкания на какой-то
один язык, всё это (failover, миграция, синхронизация стейтов, messaging) - должно
решаться вне-языковыми средствами. В язык должны быть необходимые рукоятки
для этого.

Reply

kurilka February 13 2015, 19:16:24 UTC
По-моему в CH как раз с сериализацией в плане динамики плохо на данный момент, static values привязаны к бинарнику, для перегрузки придётся выходить за пределы CH, т.е. он толком-то не помогает в данном плане

Reply

thesz February 13 2015, 09:18:44 UTC
Думаю, что я смогу найти решение этой проблеме.

Смотрел ли ты на CH?

Reply

dmzlj February 13 2015, 09:23:25 UTC
Я думаю, надо уже где-то зафиксировать, что middleware и язык ОБЯЗАНЫ быть разными сущностями.

После этого что-то искать уже необязательно, кмк. Фичи CH продолжают иметь смысл, а вот доращивать его до всего того, что умеет Erlang --- надо серьезно подумать. Особенно учитывая современные тенденции.

Reply

thesz February 13 2015, 09:33:41 UTC
Мой ответ лежит в плоскости "если очень хочется, то можно".

Основная проблема с CH находится в районе передачи сообщений и версионирования их передачи и приёма. То есть, если я раньше передавал Budum Int Bool, а начал передавать Budum Int String Bool, то мне не надо принимать такое сообщение в старом клиенте. Проблема в том, что старый клиент может прочитать из двоичных данных строки булевское значение, поскольку сериализация отдана на откуп коду вне CH, в отличии от Эрланга. Экспериментов я не производил, думаю, что проблема должна возникнуть с большой вероятностью, но её легко решить - мы про неё знаем.

Reply

ext_2145935 February 13 2015, 23:45:52 UTC
Такое может быть только в случае типизированных каналов, но пихнуть сообщение нового типа в старый канал так просто не получится. В обычном же случае отправляется {fingerprint,serialized-message}, где fingerprint отвечает типу сообщения и постоянен между всеми программами собранными данным компилятором (хотя тут могу быть не точен).

Reply

ext_2145935 February 13 2015, 23:42:29 UTC
пока можно, но с трудом (используя plugins), начиная с ghc-7.8 в RTS появился нормальный unloading, так, что все будет в порядке, просто закачиваешь новую .so-шку и "просишь" обновиться. Но это дело не автоматизировано, точнее я видел один публичный проект, но не уверен, что им занимаются.

В со следующим релизом ghc, будет полее полная поддержка static-values и все станет лучше.

Reply

kurilka February 14 2015, 07:19:30 UTC
Тыж сам говорил что static-values приколочены к бинарнику? Или "лучше" == "немного лучше"?
Сложно нарисовать helloworld с перегрузкой под 7.10?

Reply

ext_2145935 February 14 2015, 19:16:31 UTC
static-values, которые в 7.10 приколочены к бинарнику, правильнее точнее сказать к модулю, т.е. если ты скомпиляешь модуль - раздашь разным бинарникам и они его загрузят, то символы будут одинаковыми. Но в данный момент полноценное решение, которое провернёт все автоматом мне неизвестно.

Вообще существует ещё и другой вариант - раздача llvm-байткода его компиляция и загрузка, я знаю где так делается, но это закрытое решение (не у нас).

Reply

dmzlj February 13 2015, 08:37:36 UTC

Альтернатива вообще или для этой конкретной задачи? За вообще я не знаю, но я и не знаю,
зачем бы я вообще брал Эрланг для любого своего проекта.

Его легко продать - у него есть репутация в телекоме, он якобы простой, легко
найти людей.

Reply


Leave a comment

Up