
Aldar
28.12.2016
15:23:48
все по разному инфу усваивают

Vadim
28.12.2016
15:23:57
хм, я вот думаю, внешне по эликсиру кажется, что с ним можно довольно удобно делать дслы всякие, мне правильно кажется?
хочу наклепать очень узкоспециализированный кодогенератор для непогромистов (не спрашивайте меня зачем)
а это?
я как-то не дочитываю книги до конца, но первая сотня страниц обычно помогает мне составить более-менее видение "как у всех", чтобы уже дальше плясать и правильно понимать куда искать

Aldar
28.12.2016
15:24:42
кому то книги, кому то видосики

Google

Aldar
28.12.2016
15:24:50
а кому и мемасики

Alexander
28.12.2016
15:26:22
книги нужны

Rumata
28.12.2016
15:26:44
книги нужны
где в том что я сказал было о том что они не нужны?

Alexander
28.12.2016
15:27:07
> самому интересно не стремно это делать? заниматься хуитой

Aldar
28.12.2016
15:27:07
хотя у эликсира туториал отличный, а ежели чего непонятно есть доки

Rumata
28.12.2016
15:29:35
баклаша

Alexander
28.12.2016
15:29:51
оу, сорян, тут на личности говорят
пойду в пехепешный чатик

Rumata
28.12.2016
15:30:02
говна хавануть?

Alexander
28.12.2016
15:30:29
нет, культурно поговорить

Rumata
28.12.2016
15:30:29
я тебе говорю писать книгу в стиле Elixir 1.4 это дебилизим

Alexander
28.12.2016
15:30:50
а я говорю, что книги нужны

Google

Alexander
28.12.2016
15:31:04
без уточнения "только те, про которые Румата не говорит, что это дебилизм"
л — логика

redbeard
28.12.2016
15:32:31
Брежнев прикольнее целовался

Vadim
28.12.2016
15:44:30

redbeard
28.12.2016
15:44:48
нет
есть даже - о ужас! - КНИЖКА про метапрограммирование на эликсире

Vadim
28.12.2016
15:46:07
?
так, у меня назрело пара дилетантских вопросов, вероятно я хочу чего-то плохого, никого это тут сильно не испугает?)
первый и простой — как я понял mix escript.build собирает вполне себе такие стендэлон бинари?
второй и посложнее — хочу делать бинарь из первого вопроса и чтобы он искал в какой-нибудь папке все exs файлы и их выполнял, это нормальное/осуществимое желание?
хотя судя по mix test что-то подобное можно

abc
28.12.2016
17:15:18

Dmytro
28.12.2016
17:27:03
ну, так как и с java и тд

Vadim
28.12.2016
19:53:22
ну на самом деле на "стенделонность" и прочую расовую верность мне крайне пофиг, лишь бы конечному пользователю было удобно, а еще ему иногда пофиг, а вот то, что мне реально нужно, походу это в Code.eval_file

Can
28.12.2016
19:58:37
это чет жоское
плохо так делать))

abc
28.12.2016
19:59:09
да eval в любом языке зло. а хотя нет, кроме лиспа

Vadim
28.12.2016
19:59:53
не, я думаю мне для "дсл для функциональных тестов для непогромистов" должно зайти :)

abc
28.12.2016
20:16:19
не знаю что за задумка. но функциональные тесты для не программистов пугают)

Vadim
28.12.2016
20:24:57
ага, самому страшно немного, но идея интересная и нам полезная :)

Google

Can
28.12.2016
20:25:02
dsl через макросы пишут нормальные люди
а не через eval
quote и unquote
тебе нужны
или если ты нормально хочешь запарсить просто какой-то файл то yecc и lecc парсеры
чаще всего когда человек пишет что ему нужен eval он делает что-то неправильно
но как бы
бывают исключения
это грубо говоря низкоуровневая системная функция языка
для каких-нибудь утилит и проч
клиентские приложения без eval пишутся

Vadim
28.12.2016
20:27:11
хм, посмотрю в ту сторону, но тут какое дело, есть отдельная папка, куда будут складываться тесты в отдельном файлике, ни количество, ни имена их неизвестны, но нужно все их выполнить по очереди или параллельно

Can
28.12.2016
20:27:26
да да это они иесть
https://habrahabr.ru/post/309382/
неизвестное количество файликов и неизвестные имена это решается через листинг директории
во всех языках это есть

Vadim
28.12.2016
20:28:29
угу, это накарябал

Can
28.12.2016
20:29:05
https://github.com/lowks/Radpath
вот чуть удобнее
для походов по директориям, создание симлинков и проч

Google

Vadim
28.12.2016
20:30:15
выглядит интересно, спасибо

Can
28.12.2016
20:34:04
Не за что) парсеры и компиляторы - пожалуй единственное что нормально в университете научили делать))

abc
28.12.2016
21:54:35
а нам сишарп в универе втирали. мы плакали и сдавали лабы на Scala (назло преподу )

Vadim
29.12.2016
07:45:32
так, мне нужен еще один ответ на очень дилетантский вопрос, чтобы навжухать прототип и получить заряд мотивации, а потом я честно пойду читать книгу по метапрограммированию :)
есть вот такой гавнокод https://gist.github.com/Enapiuz/077841d976862519ad83e526a08da389
сейчас у меня проблемы с пониманием разделения compile time и runtime, но можете подсказать, как сейчас быстро склепать так, чтобы open делал то, что я от него хочу?)

Константин
29.12.2016
07:49:25
если я правильно понимаю - quote приостанавливает выполнение кода
т.е. quote do: 4 + 4 не вернет тебе 8

Admin
ERROR: S client not available

Константин
29.12.2016
07:50:55
iex(1)> quote do: 4 + 4
{:+, [context: Elixir, import: Kernel], [4, 4]}

Vadim
29.12.2016
07:51:44
хм, как же тут поступить

Rumata
29.12.2016
07:51:57
Молиться

Константин
29.12.2016
07:51:57
Дальше пробуем
iex(3)> test = quote do: 4+4
{:+, [context: Elixir, import: Kernel], [4, 4]}
iex(4)> unquote test
** (CompileError) iex:4: unquote called outside quote
Т.е. unquote можно узать только в quote))))
Блин, я не помню как))))
давно с макросами имел дело
надо прочитать еще где-то

Vadim
29.12.2016
08:10:49
:)
у бургов в слаке спросил, может они ща чего придумают, а то я чет даже нагуглить не могу такое
как использовать макросы внутри макросов или около того

Константин
29.12.2016
08:17:24
defmodule ExSelenidePHP.DSL do
require IEx
def open(url) do
"Opening #{url}"
end
defmacro test(name, do: action) do
quote do
"""
<?php
class #{unquote(name)}
{
function test#{unquote(name)}
{
#{unquote(action)}
}
}
"""
end
end
def test_it do
test "FirstTest" do
open "/profile"
end
end
end

Google

Vadim
29.12.2016
08:18:27
ничего себе, ща пойду пробовать

Константин
29.12.2016
08:19:11
ExSelenidePHP.DSL.test_it() выдаст то, что нужно
Арбайтен?
iex(4)> test "EnatherName" do
...(4)> open "ssadsdasdasdsdasdasdasd"
...(4)> end
"<?php\nclass EnatherName\n{\n function testEnatherName\n {\n Opening ssadsdasdasdsdasdasdasd\n }\n}\n"

Vadim
29.12.2016
08:22:54
так, наверное то, что я евалю тест из exs мне чему-то мешает
щас закоммичу на гитзаб нормально, чтобы было понятно, что я делаю

Константин
29.12.2016
08:27:58
ну вот у меня норм отрабатывает

Vadim
29.12.2016
08:31:32
вот такая штука https://github.com/Enapiuz/ExSelenidePHP
там я делаю mix escript.build
затем ./exselenidephp
и оно евалит все из папки generators
заставить бы это щас работать, а дальше я замотивируюсь выше крыши :)

Константин
29.12.2016
08:39:31
А что ты хочешь вообще?)))
чтоб просто в консоли вывалились сообщения?

Vadim
29.12.2016
08:41:41
пока да, потом я хочу прикручивать генерилку сбоку, чтобы под чуть разные нужды можно было делать, ну и пихать все это в файлики

Константин
29.12.2016
08:49:13
Как бы тебе сказать...
dsl.ex ничего не выводит.
Там надо решить, как это лучше выводить
можно добавить IO.puts перед объявлением строки
Ты же хочешь увидеть вот это??
iex(2)> ExSelenidePHP.main
Starting file 'generators/test.exs'
<?php
class FirstTest
{
function testFirstTest
{
Opening /profile
}
}
Starting file 'generators/test2.exs'
test
:ok
iex(3)>

Vadim
29.12.2016
08:51:35
да, зашибись, именно оно)