185 похожих чатов

Кто имеет опыт перехода в Эрланг/Эликсир-вселенную после Си++ и многопоточки

в нём (из стандартной либы последних версий Стандарта или POSIX threads) ?
Что изменилось в мировосприятии, в каких местах были затыки и спотыкачи мировосприятия и проектирования ПО? Что было необычным? В чём проявились явные плюсы?
Кто-то работал в QNX до Erlang-а? Никаких "параллелей" не просматривалось?

33 ответов

71 просмотр

в С++ обмазываешься мутексами и всё равно не спасает, а тут ищешь способ, как всё таки пошарить память

Wlad- Автор вопроса
Maksim Lapshin
в С++ обмазываешься мутексами и всё равно не спаса...

Очень оригинальная и загадочная формулировка-описание! :) Не расширите и углУбите?

Wlad- Автор вопроса
Maksim Lapshin
в С++ обмазываешься мутексами и всё равно не спаса...

У меня возникли сразу два вопроса: 1) зачем в Си++ "обмазываться мьютексами" И 2) зачем в Эрланге искать способ "заварить память" ? Просто у вас взаимоисключающие стремления в одном предложении. Должно было одно из них остаться, в зависимости от задачи и выбранного средства её решения... :) Ну, насколько я уже сравнительно осведомлён... :)

Из-за иммутабельности происходит очищение/разделение понятия переменной от способа работы с ней. Есть надежда, что функция/алгоритм будет повторяться вне зависимости от состояния программы. Как будто бы меньше требований к тестированию программы. Твои единожды созданные граничные условия задачи дают иллюзию упрощённого тестирования. Такое ощущение есть. Прогнал функцию по ограниченному множеству входящих параметров, повторил это в тестах и живёшь спокойно. Кажется будто способов решить задачу меньше и они проще для чтения. Из явных плюсов ломается парадигма defensive programming. Ошибки есть, но они больше в известных местах связанных с изменениями в окружающей среде. Файл не открылся, нет нужных данных в базе. Их обрабатываешь, а к остальным ошибкам относишься как к космическим лучам перевернувшим бит в памяти. Перезапускаешь упавшую часть, обновляешь состояние и работаешь дальше.

Wlad- Автор вопроса
Dima Frolov
Из-за иммутабельности происходит очищение/разделен...

В Эрланге - ВСЕ переменные иммутабельны? 😳

Wlad
В Эрланге - ВСЕ переменные иммутабельны? 😳

С точки зрения программиста иммутабельны. Под капотом BEAM может оптимизировать некоторые операции для уменьшения мусора/ускорения работы, но повлиять на это программист не может.

Сергей Елин
С точки зрения программиста иммутабельны. Под капо...

Может повлиять косвенно (в efficiency guide написано "как") + можно посмотреть в какие инструкции код скомпилировася. В целом, не всё так плохо, а если плохо, то всегда можно переписать на плюсах/расте/смешной третьей опции

Wlad- Автор вопроса
Evgeny M.
да

А как же с носителями состояний сущностей модели предметной области? Чем и как фиксируется переход из состояния в состояние? Или мне надо заново копию объекта порождать, копируя туда все данные, за исключением тех, что изменились??? Хотя - ладно! Пока обожду "со своим уставом в чужой огород"! :))) Почитаю пока... А то ведь - "в каждой избушке - свои погремушки". :)

Wlad- Автор вопроса
Evgeny M.
да, каждый раз все копируется

У меня - прединфарктное состояние практически...

Sergei
Может повлиять косвенно (в efficiency guide написа...

А что за третий «смешной» вариант 🧐

Keiman
А что за третий «смешной» вариант 🧐

Всё, что придёт каждому читателю на ум в первую очередь

Wlad
А как же с носителями состояний сущностей модели п...

Новичку проще думать что копируется. Будет желание можно будет погрузиться в потроха компилятора/BEAM, посмотреть как оно на самом деле работает.

Wlad- Автор вопроса
Сергей Елин
Новичку проще думать что копируется. Будет желание...

Я понимаю, что там - реализация механизмов "несколько иначе". Но мне, на высоком уровне проектировщика ПО - как-то жутковато... с непривычки...

Wlad
Я понимаю, что там - реализация механизмов "нескол...

Это пройдет. :) Но потом, кстати, станет сложнее переключаться между Эрлангом и «мейнстримом». Потому что появляется привычка не думать о том что кто-то может структуры в других потоках менять.

Wlad
Я понимаю, что там - реализация механизмов "нескол...

Можно на всё это смотреть как на растовский .clone(). Или rwlock + clone. Или arc. Смотря где, в общем. Но самое главное, что всё под капотом "само" работает, и можно заниматься проектированием приложения, а не приседать с сегфолтами или борроу чекером. Ну и аллокатор умный ещё

Сергей Елин
Это пройдет. :) Но потом, кстати, станет сложнее ...

да, абстракции, которые не протекают, сродни наркотику

Wlad
Я понимаю, что там - реализация механизмов "нескол...

Вот тут можно в некоторые детали погрузиться.

Wlad- Автор вопроса
Сергей Елин
Вот тут можно в некоторые детали погрузиться.

Не-не-не! Погодите! Я - "ещё маленький" в Эрланге! Новорождённый, можно сказать... Я пока - ходить научусь!

Wlad
Я понимаю, что там - реализация механизмов "нескол...

как раз на высоком-то уровне должно быть по барабану, не так ли?

Wlad- Автор вопроса
Wlad
Ну... в идеале...

ну вот сначала дубасим, смотрим, что получилось, при необходимости оптимизируем/переписываем, GOTO 10

Wlad
У меня - прединфарктное состояние практически...

Если у тебя все «переменные» - неизменяемые, то копировать указатель на них - безопасно. 💁‍♂️ Поэтому, например, стоимость «копирования» списка без головы равна одному слову. Или например стоимость копирования рекорда {x: 1, y: {deep nested shit}} при изменении x равна двум словам.

Wlad
А как же с носителями состояний сущностей модели п...

Есть иммутабельные структуры данных, которые копируются не полностью при изменении, а лишь частично. Скорость доступа и изменения у них либо аммортизированная (как у персистентной очереди vs обычной мутабельной очереди), либо на логарифм медленнее (как у персистентного массива и мутабельного массива) Полностью копируются только массивы байтов (aka binary) размера до 64 байт, и tuple (и то там много оптимизаций) Помимо этих специализированных структур, рантайм и компилятор проводят много нехитрых оптимизаций, поэтому можно писать код так, чтобы компилятор мог доказать что больше одного экземпляра данных не нужно, и можно делать всё in-place (для тех же tuple так). В целом получается конечно медленнее чем с классическими мутабельными структурами, зато всё thread safe Советую почитать книгу Криса Окасаки "Чисто функциональные структуры данных", если захочется углубиться в эту тему.

Lama Lover
Есть иммутабельные структуры данных, которые копир...

Зачем thread-safe в языке обменивающимся сообщениями?

Иванов
Зачем thread-safe в языке обменивающимся сообщения...

Ну вот в Го можно послать в канал указатель на кусок памяти и менять эту память одновременно из двух горутин 💁‍♂️

Źmićer Rubinštejn
Ну вот в Го можно послать в канал указатель на кус...

Я просто подумал речь про erlang в последнем сообщении

Иванов
Я просто подумал речь про erlang в последнем сообщ...

Ну правильно, про эрланг. Ты спросил почему нужно thread safe в языке обменивающемся сообщениями, я привел пример языка, в котором обмен сообщениями не thread safe и чем это грозит

Źmićer Rubinštejn
Ну правильно, про эрланг. Ты спросил почему нужно ...

Так в erlang сообщения копируются в очередь процесса там не нужн threadsafe на данные. Только на очередь, и то это скрыто реализацией

Иванов
Так в erlang сообщения копируются в очередь процес...

Они threadsafe потому что копируются, об этом и речь

Lama Lover
Есть иммутабельные структуры данных, которые копир...

Какие иммутабельные структуры? Или тут речь вообще на не про erlang ?

Źmićer Rubinštejn
Они threadsafe потому что копируются, об этом и ре...

Threadsafe это как раз про разделяемые данные

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта