@proelixir

Страница 1022 из 1045
Alexander
06.09.2018
11:18:15
сервер на 9213 порт - охуенный сервис для ядерной электростанции, он же на 80 порт - ебаный вебсервер для ваших чортовых вебсайтов

это всего лишь либа

Dmitry
06.09.2018
11:19:45
Ну я же не говорю web oriented ruby stdl

Google
Dmitry
06.09.2018
11:19:53
Как http в Go

Я говорю про стек)

Alexander
06.09.2018
11:20:22
выкрутился кинув джокера - слово “стек”

?

Dmitry
06.09.2018
11:20:59
Может это баззворд

Alexander
06.09.2018
11:21:17
все просто, сейчас весь TCP/IP - это веб, туда сюда

Dmitry
06.09.2018
11:21:17
Но для меня это именно связанные с языком набор любой херни для решения определнной задачи

Alexander
06.09.2018
11:24:06
Но для меня это именно связанные с языком набор любой херни для решения определнной задачи
тонкий вопрос - есть к примеру редактор текста на Rust. Состоит из двух частей: core и ui. Общение между ними на 49152 порту. - это веб?

есессно tcp/ip

Dmitry
06.09.2018
11:24:52
хз

Alexander
06.09.2018
11:25:05
а если к примеру порт 80? ?

Dmitry
06.09.2018
11:25:08
Главное не путать это с рельсами

Alexander
06.09.2018
11:25:29
я к тому что грань стерлась

Google
Alexander
06.09.2018
11:26:27
еще немного видно какие-то различия по udp или tcp/ip, но внутри второго уже нет разницы веб или нет

Dmitry
06.09.2018
11:26:27
Ну я бы сказал что есть какие-то штуки которые точно веб

Какие-нибудь рестапи

Или графыкуэли

Alexander
06.09.2018
11:27:08
думаю что точно не веб - если клиент не контролируется сервером и является 3rd party софтом для отображения UI

Dmitry
06.09.2018
11:27:11
Понятно что использовать можно как хочешь

Вот ActiveRecord это как бы не веб

А вебсокеты - как бы веб

Alexander
06.09.2018
11:28:08
Или графыкуэли
ну ты загнул, а если это упаковать в байнари и передать по upd на сокет и потом консьюмер - это SoC?

какой тут веб тогда?

Dmitry
06.09.2018
11:28:41
Так можно телеграммы писать в HTTP

Что меняется то?)

Alexander
06.09.2018
11:28:53
в этом дело

Dmitry
06.09.2018
11:29:12
Я не согласен что грань стерлась

Либо ее никогда не было

Либо она все еще есть

Т.е. как посмотреть

Andrey
06.09.2018
11:29:35
cond -> эрланговский if case -> эрланговский case if -> через макрос в cond
$ cat test.ex defmodule Test do def test_case(foo) do case foo do :bar -> true :buz -> false end end def test_cond(foo) do cond do foo == :bar -> true foo == :buz -> false end end def test_if(foo) do if foo == :bar do true else if foo == :buz do false end end end end $ ERL_COMPILER_OPTIONS="['E']" elixirc test.ex ... $ cat test.ex.E -file("test.ex", 1). -module('Elixir.Test'). -compile(no_auto_import). -export(['info'/1,test_case/1,test_cond/1,test_if/1]). -spec 'info'(attributes | compile | functions | macros | md5 | module | deprecated) -> any(). 'info'(module) -> 'Elixir.Test'; 'info'(functions) -> [{test_case,1},{test_cond,1},{test_if,1}]; 'info'(macros) -> []; 'info'(attributes) -> erlang:get_module_info('Elixir.Test', attributes); 'info'(compile) -> erlang:get_module_info('Elixir.Test', compile); 'info'(md5) -> erlang:get_module_info('Elixir.Test', md5); 'info'(deprecated) -> []. test_case(Vfoo@1) -> case Vfoo@1 of bar -> true; buz -> false end. test_cond(Vfoo@1) -> case Vfoo@1 == bar of true -> true; false -> case Vfoo@1 == buz of true -> false; false -> error(cond_clause) end end. test_if(Vfoo@1) -> case Vfoo@1 == bar of false -> case Vfoo@1 == buz of false -> nil; true -> false end; true -> true end. $ ERL_COMPILER_OPTIONS="['S']" elixirc test.ex ... $ cat test.ex.S {module, 'Elixir.Test'}. %% version = 0 {exports, [{'info',1}, {module_info,0}, {module_info,1}, {test_case,1}, {test_cond,1}, {test_if,1}]}. {attributes, []}. {labels, 28}. {function, 'info', 1, 2}. {label,1}. {line,[]}. {func_info,{atom,'Elixir.Test'},{atom,'info'},1}. {label,2}. {test,is_atom,{f,1},[{x,0}]}. {select_val,{x,0}, {f,1}, {list,[{atom,functions}, {f,3}, {atom,md5}, {f,4}, {atom,compile}, {f,5}, {atom,attributes}, {f,6}, {atom,module}, {f,7}, {atom,macros}, {f,8}, {atom,deprecated}, {f,8}]}}. {label,3}. {move,{literal,[{test_case,1},{test_cond,1},{test_if,1}]},{x,0}}. return. {label,4}. {move,{atom,md5},{x,1}}. {move,{atom,'Elixir.Test'},{x,0}}. {line,[]}. {call_ext_only,2,{extfunc,erlang,get_module_info,2}}. {label,5}. {move,{atom,compile},{x,1}}. {move,{atom,'Elixir.Test'},{x,0}}. {line,[]}. {call_ext_only,2,{extfunc,erlang,get_module_info,2}}. {label,6}. {move,{atom,attributes},{x,1}}. {move,{atom,'Elixir.Test'},{x,0}}. {line,[]}. {call_ext_only,2,{extfunc,erlang,get_module_info,2}}. {label,7}. {move,{atom,'Elixir.Test'},{x,0}}. return. {label,8}. {move,nil,{x,0}}. return. {function, test_case, 1, 10}. {label,9}. {line,[{location,"test.ex",2}]}. {func_info,{atom,'Elixir.Test'},{atom,test_case},1}. {label,10}. {test,is_atom,{f,13},[{x,0}]}. {select_val,{x,0},{f,13},{list,[{atom,bar},{f,11},{atom,buz},{f,12}]}}. {label,11}. {move,{atom,true},{x,0}}. return. {label,12}. {move,{atom,false},{x,0}}. return. {label,13}. {line,[{location,"test.ex",3}]}. {case_end,{x,0}}.

cond -> эрланговский if case -> эрланговский case if -> через макрос в cond
{function, test_cond, 1, 15}. {label,14}. {line,[{location,"test.ex",9}]}. {func_info,{atom,'Elixir.Test'},{atom,test_cond},1}. {label,15}. {select_val,{x,0},{f,18},{list,[{atom,bar},{f,16},{atom,buz},{f,17}]}}. {label,16}. {move,{atom,true},{x,0}}. return. {label,17}. {move,{atom,false},{x,0}}. return. {label,18}. {move,{atom,cond_clause},{x,0}}. {line,[]}. {call_ext,1,{extfunc,erlang,error,1}}. {function, test_if, 1, 20}. {label,19}. {line,[{location,"test.ex",16}]}. {func_info,{atom,'Elixir.Test'},{atom,test_if},1}. {label,20}. {select_val,{x,0},{f,23},{list,[{atom,bar},{f,21},{atom,buz},{f,22}]}}. {label,21}. {move,{atom,true},{x,0}}. return. {label,22}. {move,{atom,false},{x,0}}. return. {label,23}. {move,{atom,nil},{x,0}}. return. {function, module_info, 0, 25}. {label,24}. {line,[]}. {func_info,{atom,'Elixir.Test'},{atom,module_info},0}. {label,25}. {move,{atom,'Elixir.Test'},{x,0}}. {line,[]}. {call_ext_only,1,{extfunc,erlang,get_module_info,1}}. {function, module_info, 1, 27}. {label,26}. {line,[]}. {func_info,{atom,'Elixir.Test'},{atom,module_info},1}. {label,27}. {move,{x,0},{x,1}}. {move,{atom,'Elixir.Test'},{x,0}}. {line,[]}. {call_ext_only,2,{extfunc,erlang,get_module_info,2}}.

Google
Andrey
06.09.2018
11:29:47
надеюсь у кого-нибудь что-нибудь прояснится =)

(простите за простыню)

Alexander
06.09.2018
11:30:01
Либо ее никогда не было
ты сейчас пиздец, как обидел всех IPX/SPX людей и фидо

Dmitry
06.09.2018
11:30:40
Наверное тот веб который я знаю всегда был плюралистичным и космополитичным)

Dmitry
06.09.2018
11:31:09
я не могу нагуглить, сам Жозе писал что устал поддерживать мапинг
Сейчас Elixir транслируется в AST ( или точнее в Erlang abstract format representation )

Vladimir
06.09.2018
11:31:15
ты сейчас пиздец, как обидел всех IPX/SPX людей и фидо
О, я застал ещё IPX :) в новеловской сетке в универовских ВЦ было такое

Alexander
06.09.2018
11:31:26
понял, вообще IPX как бы называется интернет протоколом, но без интернета)

Dmitry
06.09.2018
11:31:44
А планировали сразу в Erlang Core компилировать, когда-нибудь.

Ибо станет возможно более low level оптимизации делать.

Alexander
06.09.2018
11:31:56
О, я застал ещё IPX :) в новеловской сетке в универовских ВЦ было такое
Novel Netware сила! Паять терминаторы! Каоксил наше все

я всегда удалял TCP в винде и переключал все на IPX

Alexey
06.09.2018
11:32:48
эликсир не компилирует, а транспилирует в эрланг, потом уже в байткод
до сегодняшнего дня я считал, что Эликсир компилируется в ерланг коре

Andrey
06.09.2018
11:33:14
А планировали сразу в Erlang Core компилировать, когда-нибудь.
сам компилятор эрланга из абстрактного формата кучу оптимизаций уже делает

в коре любит вирдинг компилировать

смотри всякие lfe и т.д.

эликсир сколько я помню в абстрактный формат транслировался

Alexander
06.09.2018
11:34:39
до сегодняшнего дня я считал, что Эликсир компилируется в ерланг коре
я очень рекомендую погуглить и вообще послушать других людей. Единственное что я утверждаю точно и уверен в этом - Эликсир не работает без эрланга

есть языки, которые работают на BEAM VM, но это не про Эликсир

Alexey
06.09.2018
11:35:30
Когда я в последний раз смотрел сырки Эликсира, то могу подтвердить, что вот токенайзер(лексер) точно был кастомный - на ерланге написанный, а не сгенерированный через lexx. А парсер через yecc. Но что там дальше - не смотрел

Google
Dmitry
06.09.2018
11:36:21
@bolshakov_av https://github.com/elixir-lang/elixir/blob/master/lib/elixir/src/elixir_erl_compiler.erl#L4-L19

Alexey
06.09.2018
11:36:46
https://elixirforum.com/t/getting-each-stage-of-elixirs-compilation-all-the-way-to-the-beam-bytecode/1873

Dmitry
06.09.2018
11:36:48
Компилируется через compile:forms

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

Admin
ERROR: S client not available

Alexey
06.09.2018
11:40:52
просто у меня отложилась в памяти именно вот эта картинка. хм... а по ней в аст.

https://elixirforum.com/uploads/default/optimized/2X/5/58786d8c955aaa5df2ebdb5a2c2790da5216b705_1_690x262.PNG

Alexey
06.09.2018
11:45:51
дело в том что эликсир транспилируется в эрланг.
Ну. Транслировать в аст и в ерланг - это не одно и то же

Dmitry
06.09.2018
11:46:08
Transpiling is a specific term for taking source code written in one language and transforming into another language that has a similar level of abstraction.

Alexander
06.09.2018
11:46:27
меня это особо не задевает, просто хочу отметить что эрланг больше транспайлер чем компайлер

Dmitry
06.09.2018
11:49:14
дело в том что эликсир транспилируется в эрланг.
Не в Erlang, а в AST Erlang-а ( Erlang abstract format representation если быть ещё точнее ).

Alexander
06.09.2018
12:16:49
Не в Erlang, а в AST Erlang-а ( Erlang abstract format representation если быть ещё точнее ).
да, мне сегодня на это указал. Я был лукав, разжигая в этом чатике жизнь )

Alexey
06.09.2018
12:18:02
да, мне сегодня на это указал. Я был лукав, разжигая в этом чатике жизнь )
Да кто знает ) Может быть действительно теперь транспилируют прямо в ерланг. Всё же меняется.

Alexander
06.09.2018
12:19:19
Да кто знает ) Может быть действительно теперь транспилируют прямо в ерланг. Всё же меняется.
исходники открыты. Если бы какое-то корневое изменение, то говно по трубам бы шуршало довольно громко ?

Свежее
06.09.2018
12:19:46
А что за задача то была?
ряд задачек а-ля "сборник задачек для программирования" (я ж нубло). повтыкав немного в elixir , я попробовал сделать на пайтоне - мозги отказались переваривать что, куда и зачем. на эликсирке получалось "прозревать" и видеть как именно сделать ту или иную задачку. вот и всё. после этого ванлав.

Alexey
06.09.2018
12:21:24
Появилась возможность решать целый класс задач, ранее недоступный.

Google
Aliaksandr
06.09.2018
12:28:16
я вообще смог в задачи, только когда начал exercism на эликсире проходить. до этого любая рекурсия очень плохо давалась

правда покер так и не решил там

Dmitry
06.09.2018
14:26:17
cachex началь юзать недавно, проблем пока не наблюдали
И еще одно место, если делать микс операций с транзакциями и без транзакций (скорее всего маловероятно схлопотать тормоза), но я встроил в одну в коде небольшое торможение в виде sleep-а, то будет такой результат: Cachex.start_link(:my_cache, []) spawn(fn -> Cachex.put!(:my_cache, "key", "another_value") end) spawn(fn -> Cachex.transaction!(:my_cache, [ "key", "key2" ], fn(cache) -> # set a base value in the cache Cachex.put!(cache, "key", "value") # we're paused but other stuff can not happen :timer.sleep(500) # this will be guaranteed to return "value" IO.inspect(Cachex.get!(cache, "key")) end) end) Результат: "another_value"

Т.е. если процесс между проверкой на локинг ключа и заменой ключа затормозит, то транзакция твоя ничего не гарантирует в cachex-е.

А get_and_update шлется снова в транзакцию и все гоняется через один GenServer.

Я не делал benchmark-ов, но по коду уже видно, что если от кэша нужен get_and_update (когда какие-нибудь значения изменяются в зависимости от того, какие они сейчас) - а он их в транзакции заворачивает или вообще любая функциональность с транзакциями, то con_cache сможет в разы/десятки/сотни раз больше таких обрабатывать.

Я к тому, что надо знать свой use case и я выяснил, что в нашем use case - cachex будет работать как один bottleneck-процесс GenServer, к которому будут посылаться все значения и менятся внутри него. А в con_cache-е выполняться паралелльно, как и должно быть.

Далеко не надо ходить, вот пример с транзакциями на разные ключи с cachex и с con_cache: Cachex.start_link(:my_cache, []) for i <- 1..5 do spawn(fn -> Cachex.transaction!(:my_cache, [ i ], fn(cache) -> :timer.sleep(500) IO.inspect(:erlang.universaltime()) end) end) end и результат: {{2018, 9, 6}, {14, 39, 0}} {{2018, 9, 6}, {14, 39, 0}} {{2018, 9, 6}, {14, 39, 1}} {{2018, 9, 6}, {14, 39, 1}} {{2018, 9, 6}, {14, 39, 2}} И с con_cache ``` ConCache.start_link([], name: :my_con_cache) for i <- 1..5 do spawn(fn -> ConCache.isolated(:my_con_cache, i, fn -> :timer.sleep(500) IO.inspect(:erlang.universaltime()) end) end) end ``` и результат: {{2018, 9, 6}, {14, 42, 49}} {{2018, 9, 6}, {14, 42, 49}} {{2018, 9, 6}, {14, 42, 49}} {{2018, 9, 6}, {14, 42, 49}} {{2018, 9, 6}, {14, 42, 49}}

Как мне кажется - это самая важная функциональность поверх ets, которая нужна.

Buckler
06.09.2018
21:09:58
Привет, Domini! Пожалуйста, реши капчу: Вычисли: 66+46=... Осталось попыток: 3 Если не решишь - забаню навеки... Удачи!

Dmitry
07.09.2018
15:42:03
Кто-то использует alpine Linux docker и запускает в нем релизы Elixir-а?

Den
07.09.2018
16:04:56
Да

Buckler
08.09.2018
04:06:19
Привет, Bill! Пожалуйста, реши капчу: Вычисли: 81+98=... Осталось попыток: 3 Если не решишь - забаню навеки... Удачи!

Dmitry
08.09.2018
04:52:42
Судя по кейноуту Валима, Эликсир стух...

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