Size: a a a

2021 May 07

LL

Lama Lover in pro.elixir
Ну да, это интересная проблема

Я сразу подумал о протоколах, но тогда пришлось бы писать один и тот же код для diff(mapset, ets) и diff(ets, mapset)

Можно свести проблему:
Типа есть несколько сущностей, предоставляющих интерфейс множества и над ними хочется выполнять функции, где эти сущности встречаются в двух и более аргументах

В эликсире такой полиморфизм возможен только через протоколы. А вот в лиспах, например, есть мультиметоды для этого
источник

LL

Lama Lover in pro.elixir
А что не так? Или это вычитание — нечистая функция?
источник

Е

Евгений in pro.elixir
Если (из) shared вычитать, то конечно нечистая. shared же может быть изменен другими процессами.
источник

LL

Lama Lover in pro.elixir
То есть diff(mapset, ets) и diff(ets, mapset) вычитыют mapset из ets ??
источник

Е

Евгений in pro.elixir
В общем я посчитал, что лучше явно указывать в коде, что в операции участвует shared-множество.
источник

Е

Евгений in pro.elixir
Нет, оно же некоммутативно.
источник

LL

Lama Lover in pro.elixir
Тогда я бы и правда разделил функции на разные. Но всё это звучит как-то странно
источник

Е

Евгений in pro.elixir
Я так и сделал. Не странно. Просто это shared множество на самом деле одно на весь сервис. Им рулит отдельный процесс.
источник

Е

Евгений in pro.elixir
Это по сути и не совсем множество, но операция вичитания оказалась нужной.
источник

a

arikai in pro.elixir
В случае mapset - shared ты делаешь обычный diff, предварительно получив копию shared локально. Это как-то даже неправильно будет выносить в функцию, ибо чистая и грязная операции.

В случае shared - mapset ты идёшь и изменяешь shared. Вся операция грязная, и сильно отличается от первого случая как минимум исполнением вычитание на другой стороне по факту.

Если я правильно все понял, то объединять такое в одну функцию - в ноги себе стрелять
источник

A ß in pro.elixir
а вот в c++ бы не постеснялись объединять и сделали бы это с особым цинизмом (переопределение операторов)
источник

Е

Евгений in pro.elixir
На самом деле нет. shared - это мнезия, я не получаю ее локально, я проверяю элемент за элементом в транзакции. Возвращаю MapSet.
Обратная операция конечно же не меняет shared, она также возвращает MapSet не трогая shared.
источник

Е

Евгений in pro.elixir
Обе операции похожи на обычный MapSet.difference/2
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Полиморфизм возможен только не для статической проверки типов, а так же ничего не мешает проверить diff(%MapSet{}, %MapSet{}) и diff(table1, table2) when is_reference(table1) and is_reference(table2)

Т.е. Это вопрос только когда хочется статически проверять? В остальном ничего не мешает.
источник
2021 May 08

Н

Николай in pro.elixir
Юра, увидел в LinkedIn рекламку Wargaming, позыв был так силен, что не удержался и жмакнул "I'm interested" :D Еще и офис на Кипре есть, хмм.. :D
Я правильно понял по интервью: сейчас нет идеи перевода проектов на эликсир и новые тоже заводятся на эрланге? Только эрланг?

Почему идея "эрланг код ближе к байткоду" так привлекательна, если эликсир байткод также можно дизассемблить? Если не фанатеть по макросам, то не похоже что Эликсир код слишком уж сильно отличается от байткода.
источник

AM

Azat Murtazin in pro.elixir
На элексире любой руби-хипстер сидя в старбакс с макбука писать может, а чтоб писать на эрланге интеллект нужен, хеллоу Майк хеллоу Джо :D
источник

Н

Николай in pro.elixir
Да ну я бы не сказал что они так сильно отличаются, базовые принципы совершенно те же.
источник

DP

Dmitry Ponyatov in pro.elixir
админки и Swagger-генераторы для чистого REST на базе plug_cowboy без phx не находятся — неправильно гуглю, или никто не писал потому что #намнинада ?
источник

Н

Николай in pro.elixir
Эликсир гораздо ближе к эрлангу чем к руби имхо.
источник

RK

Roman Kolesnev in pro.elixir
Но отличается вайб. У эрланга более бородато-инженерный. И книжки соответственно пишут.
источник