Size: a a a

2020 January 18

RS

Ruslan Saipov in pro.elixir
Логин (причем не e-mail, типа "Петровна") + пароль (примитивный "12345") + большая кнопка Войти - это классика.
источник

RS

Ruslan Saipov in pro.elixir
остальные варианты думаю не юзер френдли
источник

RS

Ruslan Saipov in pro.elixir
Хотя не.... от продукта зависит
источник

IK

Ilya Kaznacheev in pro.elixir
Господа, объясните мне плз, как работает выделение памяти с перечитляемыми типами?
Допустим, я делаю редьюс, и в аккумуляторе там map или tuple, или ещё что. Они же иммутабельные вроде?
То есть на каждой итерации будет создаваться новый объект в памяти. Каждый раз будет память выделяться, или BEAM это как-то оптимизирует?
источник

RS

Roman Suleymanov in pro.elixir
В каждой новой итерации создаётся новый, предыдущий удаляется
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Из-за имутабельности две разных переменных могут ссылаться на одно место в памяти через reference counter
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Например ты добавляешь голову в список на итерации - в результате эта голова имеет значение и ссылку на следующий элемент, на который также ссылается переменная с предыдущей итерации.
Потом GC стирает старую переменную но не стирает данные, потому что у неё теперь было две ссылки а не одна. После стирания старой переменной остаётся опять одна только ссылка.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Таким образом нихера не стирается
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Мало того, что ничего не стирается, так ещё и ничего не аллоцируется опять же из-за иммутсбельности
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ты можешь засунуть данные в контейнер, и вместо всякий clone или copy в раст для того, чтобы все было безопастно тебе достаточно просто сохранить ссылку и инкрементировать RC
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Потому что то что по ссылке никак не может изменится и это гарантируется природой языка
источник

RS

Roman Suleymanov in pro.elixir
А если это в аккумуляторе не просто голова дописывается, а например данные во всем листе, тупле пересчитываются в зависимости от нового элемента перебираемого чего-то?
источник

RS

Roman Suleymanov in pro.elixir
Полностью новый лист/тупл будет?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Тупл всегда будет новый, но данные в тупле будут ссылками на старые места в хипе
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Скорее всего
источник

RS

Roman Suleymanov in pro.elixir
Ну там же могут быть совсем разные данные в каждой итерации
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Короче говоря, очень сложно придумать такие преобразования, которые бы требовали большого пересоздания данных
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Обычно данные просто перепаковываются в другие структуры
источник

RS

Roman Suleymanov in pro.elixir
Ну наверняка, если данные просто дописываются, то бим ограничивается сменой ссылок
источник

RS

Roman Suleymanov in pro.elixir
Видимо надо в исходники залезть
источник