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

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

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

33 ответов

54 просмотра

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

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

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
Подскажите, а есть vault lite или ченить такое?) А то нужен вольт для похода в вольт, но весит он ~500 мб) как-то многовато для парочки запросов ))
Alexandr Orloff
17
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Карта сайта