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

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

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

33 ответов

77 просмотров

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

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 это как раз про разделяемые данные

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта