Size: a a a

2018 December 28

VP

Vladimir Potapev in pro.elixir
но тут бы реально было удобно в итоге)
источник

AB

Alex Bubnov in pro.elixir
Vladimir Potapev
Ну там просто хотелось максимально автоматизировать одну задачку завязанную на изменение существующего кода. И это бы получилось, если бы можно было AST менять) А то даден в руки инстрУмент (defmacro, quote/unquote, сплайсинги, @on_definition, @before_compile, вот это всё), а во все поля чот не получается использовать. =)
> Обидно, блин, что нельзя менять существующий код модуля, тем более что его AST доступно для просмотра.

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

VP

Vladimir Potapev in pro.elixir
Alex Bubnov
> Обидно, блин, что нельзя менять существующий код модуля, тем более что его AST доступно для просмотра.

погоди. а что мешает в момент компиляции подтянуть уже скомпилированный модуль, вынуть аст, переработать и скомпилить еще раз?
А скомпиленый модуль - это байткод. Есть хук, вроде @after_compile называется. Там доступ к байткоду есть. Но это уже сильно нетривиальная задача) Проще компилятор Эликсира пропатчить)
источник

VP

Vladimir Potapev in pro.elixir
Я кстати всё чаще задумываюсь про PRы для компилятора. Хотелки появляются.
источник

AB

Alex Bubnov in pro.elixir
Vladimir Potapev
А скомпиленый модуль - это байткод. Есть хук, вроде @after_compile называется. Там доступ к байткоду есть. Но это уже сильно нетривиальная задача) Проще компилятор Эликсира пропатчить)
а чем тебе не нравится идея обернуть defmodule в свой макрос?
источник

AB

Alex Bubnov in pro.elixir
хотя не, это не факт, что сработает
источник

AB

Alex Bubnov in pro.elixir
а может и сработает
источник

VP

Vladimir Potapev in pro.elixir
чот не представляю, как это сделать.
источник

VP

Vladimir Potapev in pro.elixir
обычно макрос - это слово + параметры, которое в код развёртывается. а так чтобы весь модуль...
источник

VP

Vladimir Potapev in pro.elixir
хз
источник

AB

Alex Bubnov in pro.elixir
а defmodule не макрос?
источник

AB

Alex Bubnov in pro.elixir
по сути, макрос
источник

VP

Vladimir Potapev in pro.elixir
а надо посмотреть. очень может быть
источник

VP

Vladimir Potapev in pro.elixir
там надо глядеть во что он разворачивается. если это и можно в defmacro обернуть, то выглядеть будет, хм... необычно =)
источник

AB

Alex Bubnov in pro.elixir
ну, это не совсем макрос, это special form, может быть разница
источник

VP

Vladimir Potapev in pro.elixir
я-то хотел через аннотации ака переменные модуля решить, как обычно это делается. а компилятор сказал "нет"
источник

VP

Vladimir Potapev in pro.elixir
Alex Bubnov
ну, это не совсем макрос, это special form, может быть разница
скорее всего, defmodule раньше разворачивается, и defmacro просто будет считаться ошибкой синтаксиса.
источник

VP

Vladimir Potapev in pro.elixir
смотреть надо
источник

AB

Alex Bubnov in pro.elixir
Vladimir Potapev
скорее всего, defmodule раньше разворачивается, и defmacro просто будет считаться ошибкой синтаксиса.
не, это обычный макрос, не спецформа
источник

AB

Alex Bubnov in pro.elixir
значит, его можно вызвать из другого макроса
источник