Maksim
так вопрос то в чём?
Maksim
почему fault tolerance в эрланге такой уникальный?
Maksim
да, он уникальный и в джаве это не сделать
Maksim
очень просто
Vladimir
Нэ вэрю)
Vladimir
Но интересно
Maksim
в эрланге концепция процессов позаимствована из юникса
Maksim
изоляция данных и ресурсов внутри процесса
Maksim
если процесс дохнет, то автоматически закрываются все ресурсы и освобождается вся память, которую он захватывал
Vladimir
Что значит: процесс сдох? Не обработанное исключение?
Maksim
процесс в эрланге — это микротред, корутина
Maksim
визуально оно выглядит так же, как процесс в юниксе
Maksim
ты запускаешь процесс и у тебя от него есть только пид
Maksim
даже синтаксически нельзя прочесть данные из другого процесса, можно только послать в него сообщение
Maksim
сдохнуть процесс может по разным причинам: например он сам решил, что он всё сделал и нормально вышел, или действительно необработанное исключение
Maksim
соответственно VM дает следующие гарантии:
Maksim
1) все подписчики на мониторинг этого процесса получат сообщения о его смерти
Maksim
2) все ресурсы, которыми он владеет, будут закрыты
Vladimir
Ну то есть чтобы это сделать на джаве, нужно просто более аккуратно распоряжаться ресурсами
Maksim
твоя фраза сейчас звучит как: что бы не было багов, не надо их писать
Vladimir
Да, отчасти
Vladimir
И это реально, в какой то степени
Алдар
Maksim
речь идет о том, что VM реально дает гарантии, которых нет в других языках
Evgeny
да просто надо форкаться и эмулировать поведение эрланга
Vladimir
Ну вот в джаве зато есть статическая типизация
Vladimir
Это тоже гарантии
Vladimir
Но и без них как бы можно
Maksim
какие-то ещё вопросы про эрланг, эликсир?
Vladimir
да просто надо форкаться и эмулировать поведение эрланга
Да просто есть акка, она собственно этим и занимается
Denis
Итого, сводка по Elixir. Плюс. + хайлоад на слабом железе + время отклика низкое + Параллельный флоу автоматически + протоколы, макросы, паттерн матчинг + immutability на уровне языка + Макросы, протоколы, акторы + шедулер считает редукции у каждого процесса и не допускает долгой работы без переключения, хотя это скорее преимущества beam а не самого языка + в elixir очень вкусная стандартная либа + и все эти ex_doc, которые запускают тесты прямо из документации, это просто круть + встроенная Мнезия как альтернатива редису + в эликсире крутой пайп оператор! + компилируется в байт-код BEAM + Plug pipeline-based девелопмент как плюс Минусы: + незрелость экосистемы - В стандартной библиотеке Elixir нет HTTP-клиента - с пакетами всё плохо в элексире – говно пакеты, в основном - проблемы с Deploy в Phoenix - Часто добавляешь пакет и он не работает в разных environments, прямо бомбит - часто нет док/они не соответствуют реальности - люди тесты мало пишут → исходники в качестве документации - Короче с инфраструктурой почти как в жс - @kana_sama пробовал феникс на хероку задеплоить, так и не справился
Обновил пару пунктов
Алдар
Но и без них как бы можно
в джаве сложнее реализовывать многопоточность, в эликсире и эрланге многопоточность из коробки и очень дешевая
Maksim
эрланг — это язык, stdlib и виртуальная машина
Denis
Эликсир многопоточный и компилируемый в байт код
Vladimir
Это все уже реализовано
Maksim
эликсир — это виртуальная машина от эрланга, а stdlib и язык свой
Denis
оуоуооу Максим пришёл
Denis
я проспал
Denis
читаю лог с начала
Vladimir
> @hardliner многопоточность из коробки и очень дешевая многопоточнасть везде одинаковая
Алдар
Это все уже реализовано
все равно нужно следить за race conditions и дедлоками
Denis
про эликсир не скажу, но про эрланг могу сказать что не зря на нём вотсап и фб мессенджер написали
Но Telegram же на нём не написали. Они хороши для обработки данных и очередей, значит?
Vladimir
не нужно, если используешь message passing
Maksim
соответственно в эликсире сильно переработанный stdlib, потому что в эрланге очень много мест, которые вызывают кислую мину
Maksim
но объективно более молодое коммьюнити. В этом и плюсы, и минусы
Vladimir
Да просто фреймворк
Vladimir
Язык не причем
Vladimir
Есть процессы, есть супервизоры
Vlad
Язык не причем
ага, виртуальная машина для этого там
Vladimir
Такую абстракцию в любом языке можно сделать
Vladimir
Опять же - akka
Алдар
Такую абстракцию в любом языке можно сделать
только иммутабельность по умолчанию в джаве сделать не получится
Vlad
https://www.youtube.com/watch?v=YaUPdgtUYko
Denis
2) все ресурсы, которыми он владеет, будут закрыты
Это круто на обработке запросов и данных (транскодинг, трансферинг)
Vladimir
> @hardliner только иммутабельность по умолчанию в джаве сделать не получится Почему нет? ради бога
Vladimir
Просто это не так уж и практично
Maksim
Язык не причем
нет, я выше уже объяснил. Основа именно в дизайне языка
Denis
твоя фраза сейчас звучит как: что бы не было багов, не надо их писать
:))) как любят говорить одни товарищи "мы не тестируем, мы просто пишем без багов"
Maksim
в эрланге нельзя сделать ситуацию при которой процесс добавляет какие-то данные в глобальную хеш-таблицу и подтекает тем самым памятью
Vladimir
> @maxlapshin нет, я выше уже объяснил. Основа именно в дизайне языка вм просто поддерживает эти функции, но обязательной явно не является
Алдар
Просто это не так уж и практично
тогда и garbage collector непрактично, давайте памятью управлять
Denis
речь идет о том, что VM реально дает гарантии, которых нет в других языках
Это похоже на некий фреймворк, который реализует например тот же Docker + Kubernetes
Maksim
Денис, какие-то ещё конкретные вопросы есть? =)
Maksim
да понять конечно, просто не моими силами =)
Алдар
Опять же - akka
для этого нужно скалу выучить, порог входа намного выше чем в эликсире и эрланге
Vladimir
Ну это спорный вопрос, может быть
Kirill
да понять конечно, просто не моими силами =)
Ну проще сказать, что ерланг — это как Си. Си — он быстрый, но гемморный. Эрланг — он не падает, но гемморный.
Алдар
сам язык эрланг и эликсир легче чем жс
Denis
Опять же - akka
А для Node.js есть что-то такое? Или опять же на уровне DevOps ?
Vladimir
Нормального - нет конечно
Vladimir
Но в node.js с этим отчасти проще из за однопоточности
Vladimir
девопсом тут явно не поможешь