
Константин
04.08.2016
08:44:15
for i <- 1..10 do

Dmitry
04.08.2016
08:45:23
Точно... Читал только что side to side Erlang elixir на оффсайте, чёт не нашёл
Но мне в Erlang кажется красивее сделано

Константин
04.08.2016
08:46:16
дело привычки, мне в эликсире показалось в начале понятнее, т.к. я с PHP))

Google

Aldar
04.08.2016
08:46:20
в хаскеле еще красивее
через монады бгг

Константин
04.08.2016
08:47:26
На эрланге
pyth(N) ->
[ {A,B,C} ||
A <- lists:seq(1,N),
B <- lists:seq(1,N),
C <- lists:seq(1,N),
A+B+C =< N,
A*A+B*B == C*C
].
На эликсире
defmodule Triple do
def pythagorean(n) when n > 0 do
for a <- 1..n,
b <- 1..n,
c <- 1..n,
a + b + c <= n,
a*a + b*b == c*c,
do: {a, b, c}
end
end
Мне кажется, что на эликсире читабельней, хотя и больше букаф

Dmitry
04.08.2016
08:50:46
На эрланг чисто как на вышке
Математика 1 в 1 очень понятно
Авто вообще быстро работает?

Aldar
04.08.2016
08:52:33
В эрланге вариант на хаскель очень похож
а в эликсире первый раз увидел - както по другому сделано
фор вообще что такое в функциональном языке

Google

Константин
04.08.2016
08:58:57
Асоциация с "Для каждого"
в PHP то вполне канает)))

Dmitry
04.08.2016
09:13:28
For each тогда уже
А for реально не очень привычно

Maxim
04.08.2016
10:51:36
Привет, что значит эта синтаксическая конструкция?
pipeline :browser do
plug :accepts, ~w(html)
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
end
Тоже самое что и в Ruby?

Konstantin
04.08.2016
10:58:50
Только несколько более широкое понятие. Например, какие-то вещи, которые в рельсе делаются с помощью before_filter, делаются с помощью Plug

Aldar
04.08.2016
10:59:37
конвеер по преобразованию conn

Konstantin
04.08.2016
11:00:20
+ собраны в единый pipeline. т.е. конверйер, да, для определенной ситуации (broweset, api, и т.д.)

Maxim
04.08.2016
11:00:34
спс
Я имел ввиду по синтаксису
Это в метод передается yield?
вот создается метод
def met() do:
потом вызывается с аргументами или без
а тут передается do: и что то далее

Can
04.08.2016
11:04:04
pipeline и plug это макросы
они могут быть устроены довольно сложно под капотом
Здесь у тебя все приложение состоит из прохождения струкуры коннекшна

Google


Can
04.08.2016
11:04:52
через такие составные маленькие функции
plug
например плаг для протект_фром_форжери
Он csrf токены проставляет и проверкой занимается, насколько я помню
Вот из таких кусочков аля middleware у тебя проходит весь коннекшн
И ты можешь составлять их в цепочки именнованные
типа цепочка :browser
цепочка это я имею в виду pipeline этот
Эта цепочка делает вот такие-такие плаги
Например ты можешь сделать цепочку для web пост и гет запросов, которые hmtl отдают. Она будет состоять из плагов protect_from_forgery и тд. А другую для api. Там ты например по-другому будешь аутентификацию запросов делать и свой плаг для этого суешь. А еще будешь убеждаться, к примеру, что это ajax запрос. Вот у тебя и будет две цепочки.
Очень удобно
Вся обработка запроса - от получения до отдачи файлов, это прохождение структуры conn через составные части.
В этом типа функциональный подход вообще. У тебя полностью разделено данные и логика и вся логика это какой-то flow твоих данных, проходящих через функции, которые их изменают.


Maxim
04.08.2016
11:09:48
Я туториал по фоеникс начал читать, а потом пытался найти что значил такой синтаксис. А это оказывается макросы https://elixirschool.com/ru/lessons/advanced/metaprogramming/

Can
04.08.2016
11:10:24
Ты можешь этот flow организовывать так же с помощью if как всегда, но у тебя простыня будет получаться из за того, что else всегда писать надо. Для этого придумали plug. Который умеет например если неавторизовано сразу вернуть ошибку и дальше по следующим плагам не идти.
А я люблю пиздеть

Rumata
04.08.2016
11:11:01
у меня вот вопрос
как дебажить эти цепочки плагов
тоесть в каком то месте произойдет мутация

Aldar
04.08.2016
11:11:39
Все функциональное программирование это преобразования лямбда термов, то есть иммутабельных структур данных

Google

Maxim
04.08.2016
11:11:43

Aldar
04.08.2016
11:13:47
получается плаг это что-то типа монады

Rumata
04.08.2016
11:15:53
допустим ситуевина вот портянка плагов и у меня изменяется стейт в одном из них как-то не предсказуемо, что мне поможет отловить нужный плаг? может вопрос и глупый но какие есть тулзы для дебага в элексире( пресловутый dializer?) есть что нибудь удобное аля "бряки в студии"?

Aldar
04.08.2016
11:16:39

Rumata
04.08.2016
11:17:02
ну смотри я допустим получил унаследованый код

Aldar
04.08.2016
11:17:08
Если чистая функция то ее можно через юнит тесты прогнать

Rumata
04.08.2016
11:17:09
где человек не знал что такое чистая функция
и напиздючил не чистую функцию

Maxim
04.08.2016
11:19:12
А для каких задач Elixir используют?

Aldar
04.08.2016
11:19:31
для веб разработки например

Can
04.08.2016
11:23:05
Вот вопрос
как именно работает plug halt
потому что так то это просто дебажить можно стектрейсом
Если он просто подставляет внутри conn, что дальше коннекшн скипаем как он есть

Dmitry
04.08.2016
11:24:04
Почитай мою статью на хабре про плаги

Can
04.08.2016
11:24:24
Или он остальные плаги как-то внутрь себя фигачит и функцию выдает которая применяет все вложенно
то хз
В первом случае дебажить легко

Dmitry
04.08.2016
11:24:37
И не должно быть не чистых плагов
Это уже не плаг тогда

Google

Can
04.08.2016
11:25:49
А вообще способов сделать нечистый код не так много. Он может либо писать данные в стейт процесса и потом читать их, либо в какое-то внешнее хранилище. Вот допустим ты сделал плаг который в базу записывает. Это чистый или нечистый плаг? Как его дебажить если он тебе в наследство достался?

Maxim
04.08.2016
11:26:24
а есть инфа по метапрограммированию на русском?

Rumata
04.08.2016
11:26:54
форси инглиш если хочешь быть разрабом

Can
04.08.2016
11:27:53
Технический инглиш, которого достаточно для чтения документации оч быстро прилипает

Rumata
04.08.2016
11:28:04
ибо тех литературу читать на инглише очень просто. Да и вцелом у тебя сразу откроется доступ к 100500 возможностям. поэтому кроме как форсить инглиш ничего нельзя советовать тебе.

Maxim
04.08.2016
11:29:11
да, вы правы
книжка по мету есть
на инглише

Can
04.08.2016
11:30:34
по мету
ахах)

Dmitry
04.08.2016
11:30:48
Если из базы - не чистый
Толко нафига такой плаг

Can
04.08.2016
11:31:16
А контроллер он же через плаг
вызывается?
Я этого до конца не понимаю, как контроллер вызывается. Но они говорили, что это все под капотом плаги.
А значит какой-то то плаг в итоге будет в базу писать
А интересно
а на плагах можно запилить fsm для переходов?
Или только линейно все