@proelixir

Страница 359 из 1045
Alexey
24.02.2017
16:04:15
в мапах та же петрушка %{key: 123} это все равно, что %{:key => 123}

а с учетом того, что ключ еще может быть строкой, то сокращенно его не задать, только %{"key" => 123}. ну или я не знаю. но мне и не надо. зы. и не знаю, кому и зачем надо.

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

например переопределять одну переменную в эликсире зачем-то можно. но лучше не надо

Google
Max
24.02.2017
16:08:34
iex(6)> ["asd": 1, "qwe": 2] [asd: 1, qwe: 2]
как всё сложно-то

то есть это я не так объявлял?

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
List.keyfind([{"asd", 1}, {"qwe", 2}], "asd", 0) {"asd", 1}
В Clojure получается сильно короче: user=> (:a {:b 1 :a 2}) 2

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 и обратно.

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) Но из за сахара скобки можно не писать

в общем, я с какой целью свое время на Го потратил?

вдруг я ошибаюсь на счет ерланга. вот надо было проверить

вдруг Го действительно торт, и надо на него срочно перелезать

горутины мне не понравились. каналы тоже

решил, ну померяю разницу в производительности

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
почему?
я грешным делом подумал сначала, что там что-то типа встроенной виртуальной машины, которая интерпретирует процессы.

это вот устоявшееся такое убеждение. прям дословно один раз все услышали "ерланг не числодробилка" и повторяют теперь везде

Страница 359 из 1045