
Alexey
24.02.2017
16:04:15
в мапах та же петрушка %{key: 123} это все равно, что %{:key => 123}
а с учетом того, что ключ еще может быть строкой, то сокращенно его не задать, только %{"key" => 123}. ну или я не знаю. но мне и не надо. зы. и не знаю, кому и зачем надо.
в общем, после ерланг перейдя в эликсир, постоянно думаешь, что же это в ерланге. ну и поэтому сахары по возможности свожу к минимуму.
например переопределять одну переменную в эликсире зачем-то можно. но лучше не надо

Google

Max
24.02.2017
16:08:34
то есть это я не так объявлял?

Viza
24.02.2017
16:10:12
так тебе надо строки или атомы? если первое то там двоеточие не нужно
видимо, на руби не писал раньше

Max
24.02.2017
16:10:23
iex(3)> ["asd": 1, "qwe": 2]
[asd: 1, qwe: 2]
iex(4)> [asd: 1, qwe: 2]
[asd: 1, qwe: 2]
мне так-то строки надо

Rafkat
24.02.2017
16:10:56
Ну сделай =>

Max
24.02.2017
16:11:09
но почему ["asd": 1, "qwe": 2] и [asd: 1, qwe: 2] равны?
iex(5)> [asd: 1, qwe: 2] == ["asd": 1, "qwe": 2]
true

Alexey
24.02.2017
16:11:44
я не знаю, почему. я так не пишу никогда. но выше логично написали, что все, что с двоеточием - это атом
дело в том, что атом может быть дурацким. например с пробелом

Google

Alexey
24.02.2017
16:12:08
поэтому их в кавычки и берут

Max
24.02.2017
16:12:22
iex(6)> ["asd" => 1, "qwe" => 2]
** (SyntaxError) iex:6: syntax error before: '=>'

Vladimir
24.02.2017
16:12:32

Alexey
24.02.2017
16:12:50
:"atom with space"
iex(6)> is_atom(:"atom with space")
true

Vladimir
24.02.2017
16:13:06
Эликсир унаследовал функции Эрланга
А жаль

Alexey
24.02.2017
16:13:28
а если мапа, то будет то же самое, только с %
user = %{a: %{b: 1, a: 2}}

Vladimir
24.02.2017
16:14:34
о, это гут

Alexey
24.02.2017
16:14:36
не ясно только, зачем ты вложение сделал в "а"
там еще есть именованый рекорд

Vladimir
24.02.2017
16:19:18
Со строками будет чуть длиннее.
user=> (get {"str2" 2 "str1" 1} "str1")
1
эт не вложение, это короткая команда взятия значения ключа :a

Alexey
24.02.2017
16:20:20
мапы добавили и в ерланг. но в эликсире их запилили раньше. как они это делали под капотом - не интересовался

Vladimir
24.02.2017
16:20:48
понятно. надо будет почитать сырцы.

Alexey
24.02.2017
16:21:24
главное, что парсер ерланговый json - который jsx, и эликсировый poison декодирует json в мапу
то есть, ключ - это ключ. а значение - может быпть мапа. а в ней еще мапа. и так, пока не надоест.
когда с гошниками тусовал, спрашивал. у них с этим сложность. динамически json'ы Они не умеют.

Google

Alexey
24.02.2017
16:23:08
только статически могут, которые из рекорда в json и обратно.

anton
24.02.2017
16:23:32

Alexey
24.02.2017
16:23:45
мне нужно было доклад на работе сделать
ну и чисто для себя, был хайп вокруг Го. мол супер пупер, все дела
ну и решил выяснить, че там к чему. почитал. поразбирался
чего не понял - заходил в какую-то гошную конфу, спрашивал
что интересно, там даже один бывший ерлангист был )))
меня интересовало 3 вопроса

Max
24.02.2017
16:24:58
там будет interface{} везде
надо явно кастовать к нужному типу

Alexey
24.02.2017
16:25:42
ну. может быть. я в эти дебри уже не полез. со слов гошников, го - это не для таких задач )

Alexey
24.02.2017
16:26:28
свели к тому, что обычно типа всегда json содержит именно то, чего от него Го и ждет. а иначе это типа ерунда все
меня интереовала реализация корутин
еще интересовала работа каналов

Max
24.02.2017
16:26:57
корутины там поганые
каналы норм, типизированные

Alexey
24.02.2017
16:27:22
ну. они переключаются по вызову функций внешних библиотек
ну то есть, если го запустить в 1 процессорный thread, и в порядке выполнения команд вызвать корутину, а потом что-то еще
то если корутина зациклена внутри и наружу ничего не выводит, или ничего не вызывает. то есть просто цикл бесконечный

Google

Alexey
24.02.2017
16:28:23
то "что-то еще" не сработает никогда

Max
24.02.2017
16:28:37
ну а зачем так делать?

Alexey
24.02.2017
16:28:59
в каналах меня смутило то, что отправляющая сторона зависает, если принимающая не читает. мне показалось это странным

Max
24.02.2017
16:29:10
не, там размер можно указать

Alexey
24.02.2017
16:29:12
и в целом сама сущность "канал" лишняя, как по мне

Max
24.02.2017
16:29:28
размер буфера канала

Alexey
24.02.2017
16:29:35
есть процесс. есть ид. отправляешь и работаешь дальше

Max
24.02.2017
16:29:40
это сколько собщений будет в нём, чтобы отправитель начал вис

Alexey
24.02.2017
16:29:45
а для каналов надо создавать явно этот канал. на обоих сторонах

Max
24.02.2017
16:29:52
ну и это правильно, какой смысл делать работу, если принимающая сторона не читает

Admin
ERROR: S client not available

Alexey
24.02.2017
16:30:03
это не правильно

Max
24.02.2017
16:30:16

Alexey
24.02.2017
16:30:17
есть методы синхронные. есть асинхронные

Max
24.02.2017
16:30:23
его можно в другие процессы передавать
это очень удобно на самом деле
создал канал, передал в процесс, с кем общаться, и общаешься

Alexey
24.02.2017
16:30:49
это, похоже, ответ на вопрос, как N процессов могут писать в 1 канал.
или как там это делается?

Max
24.02.2017
16:30:55
да

Google

Alexey
24.02.2017
16:31:09
ну хз хз
ерланг - отправил сообщение процессу, в нем, если тебе надо с ним общаться, будет pid, куда ответы слать
хочешь - можешь залипнуть до ответа
не хочешь - работаешь дальше
просто ерланг вм от тебя эту конструкцию убирает
тебе не надо создавать канал не надо его передавать.
с ерланговой колокольни это все, как лишняя сущность.
и отправка сообщений - очень компактная конструкция в ерланге
pid ! message
ну то есть знак восклицания- это отправка. в pid - хранится пид процесса. может быть как на этой ноде, так и на любой ноде кластера. а сообщение - любой тип (атом, кортеж, лист)
в эликсире это дело завернули зачем-то в send(pid,message) Но из за сахара скобки можно не писать
в общем, я с какой целью свое время на Го потратил?
вдруг я ошибаюсь на счет ерланга. вот надо было проверить
вдруг Го действительно торт, и надо на него срочно перелезать
горутины мне не понравились. каналы тоже
решил, ну померяю разницу в производительности

Nikita
24.02.2017
16:38:11

Alexey
24.02.2017
16:38:42
пусть Го посчитает счастливые билетики. полным перебором на 1м и один if. тут уж он точно выиграет у ерланга.
запустил. померял время. потом на ерланге запустил и померял время. получилось в 100 раз.
запустил в Hipe. получилось разница в 10 раз. и с учетом разницы всего на порядок, с учетом всего того, что есть в ерланге и чего нет в Го и никогда там не будет.... решил даже статью не писать.

Dmytro
24.02.2017
16:40:47
мне кажется, что всем давно известно, что эрланг для математики не торт

Alexey
24.02.2017
16:40:48
почему?
я грешным делом подумал сначала, что там что-то типа встроенной виртуальной машины, которая интерпретирует процессы.
это вот устоявшееся такое убеждение. прям дословно один раз все услышали "ерланг не числодробилка" и повторяют теперь везде