Size: a a a

2021 March 03

AB

Alex Bubnov in pro.elixir
> Всё остальное можно оставить интерпретируемым языкам
вот ты сейчас меня убить пытался
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
> Всё остальное можно оставить интерпретируемым языкам
вот ты сейчас меня убить пытался
Ну, у нас же есть компайл, причём очень сильный. Нужно не бояться им пользоваться, потому что он обычно более явный, чем что-то там в рантайме
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Ну, у нас же есть компайл, причём очень сильный. Нужно не бояться им пользоваться, потому что он обычно более явный, чем что-то там в рантайме
да не хочу я в компайл-тайме этим заморачиваться, я это отлаживать задолбаюсь
источник

AB

Alex Bubnov in pro.elixir
спасибо, у меня уже есть один кодоген в проекте, трифт пинтерестовский, и что ты думаешь? без записи метаинформации для доступа в рантайме, с одной сериализацией/десериализацией он гораздо менее полезен, чем мог бы
источник

AB

Alex Bubnov in pro.elixir
да, он быстрее эрлангового трифта, в котором сериализация работает как интерпретатор метаинформации, но на эрланговом трифте я могу делать, например, валидацию данных, или какие-то производные от этой метаинформации(generic thrift <-> json codec), а в эликсирном - нет, потому что там генерится только код кодека, без этих описаний
источник

AB

Alex Bubnov in pro.elixir
и фактически мы вернулись к старому разговору - данные vs кодогенерация, и я остаюсь на той же позиции - данные первичны, а кодогенерация должна делаться уже на их основе.
источник

ML

Maksim Lapshin in pro.elixir
Alex Bubnov
может быть, да.
я припоминаю, вы что-то упоминали про словари тэгов, определяющих как десериализовывать поле сообщения.
ага. Определена куча структур и ещё одна, которая CHOICE.

Она сама проставит нужный тег
источник

AB

Alex Bubnov in pro.elixir
Maksim Lapshin
ага. Определена куча структур и ещё одна, которая CHOICE.

Она сама проставит нужный тег
не, там что-то более замороченно было, information classes, чтоли.
но можно и эту аналогию засчитать, просто я этот choice хочу собрать с кода приложения.
источник

ML

Maksim Lapshin in pro.elixir
Alex Bubnov
не, там что-то более замороченно было, information classes, чтоли.
но можно и эту аналогию засчитать, просто я этот choice хочу собрать с кода приложения.
например, это очень изящно делается в лиспе, когда ты парсишь код и по нему что-то кодогенеришь
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Lama Lover
Так и причём тут консолидация, пусть модули со структурами явно у себя вызывают какой-нибудь макрос, который посылает имплементацию в какой-нибудь процесс, который дожидается конца компиляции и потом генерирует код в __before_compile__ твоего модуля-десериализатора
Так нельзя сделать потому что не факт что нужный модуль будет скомпирован последним
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Так нельзя сделать потому что не факт что нужный модуль будет скомпирован последним
Так нужный модуль будет висеть с call в before_compile
источник

AB

Alex Bubnov in pro.elixir
Alex Bubnov
вообще, https://hexdocs.pm/mix/Mix.Task.Compiler.html#after_compiler/2 удивительная функция.
про нее в интернетах есть три упоминания - анонс elixir 1.10, дока, и проект telemetria на гитхабе, и ни одно из них не описывает, в общем, в каких условиях она может не работать
короче, это абсолютно провальная зацепка, потому что
1 - у меня этот коллбэк просто не работает, откуда бы я его не регистрировал
2 - он вызывается в compile.all, а compile.protocol работает уже после него
источник

AB

Alex Bubnov in pro.elixir
видимо всё же враппер вокруг recompile в .iex.exs
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Lama Lover
Так нужный модуль будет висеть с call в before_compile
Ты уверен что before_compile всех модулей произойдёт раньше чем полностью скомпилируется другой модуль?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну то есть что не может один из модулей полностью скомпилироваться так, что другой ещё даже не начнёт?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Если бы он от него зависел - тогда да. Но тут идёт все в другом направлении
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я думаю что если бы это работало - не было бы смысла в консолидации протоколов.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Их можно было бы гарантированно консолидировать встроенными средствами
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Вообще, если в эликсир добавить кастомную консолидацию - получились бы рельсы
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Ты уверен что before_compile всех модулей произойдёт раньше чем полностью скомпилируется другой модуль?
Не, у меня модули-структуры просто посылают что-то на процесс (а если его не существует, то создают с таким именем), а потом, в модуле-десериализаторе на хуке __before_compile__ ждать ответа от процесса

А процесс ответит тогда, когда поймёт что скомпилированы все модули кроме модуля десериализатора
источник