V elixiru to jsou protocoly a jiny struktury, ne classy, ale nic to nemeni na to, ze jsou implementovany az v elixiru pomoci maker.
Nevím, o čem přesně mluvíš. No třeba "defprotocol" je makro, no. A co z toho má plynout? Nevím, kam míříš.
Pomoci quote a unquote delas v elixiru quasiquotaci. Klasicka quotace neni dostatecna.
Pojem "quasiquotace" slyším poprvé. Jestli rozdíl mezi quotací a quasi-quotací má být v tom, že do toho druhýho můžeš dávat parametry, tak samozřejmě. Makra bez parametrů by byla dost naprd, to je jasný. A proč to říkáš?
Priklad byl na quotaci stringu, kterou jsi nepochopil.
Pochopil, ale nepřijde mi to jako dobrej příklad. Je srozumitelnej jenom tomu, kdo už ví, co makra jsou, a najde si to v tom.
Elixir AST je vlastne lisp, az na druhy parametr coz je nejaky context.
To právě imho není vždycky pravda. AFAIK, v Lispu je vždycky jasný, jak AST pro nějaký výraz bude vypadat. V Elixiru je to trochu komplikovanější - různé struktury se převádí na různá AST data, z prstu si to nevycucáš, musíš si to buď zkusit, nebo si to najít v dokumentaci. Např.:
iex(2)> quote do [1,2,3] end
[1, 2, 3]
iex(3)> quote do [1,2|3] end
[1, {:|, [], [2, 3]}]
iex(4)> quote do [1,2|_] end
[1, {:|, [], [2, {:_, [], Elixir}]}]
- tady prostě musíš vědět, že "|" se do AST převede zrovna takhle. AST by klidně mohlo vypadat klidně jinak. Úplně 100%ně intuitivní to není.
Elixir je syntakticky cukr nad timhle jednoduchym AST.
Jako
celý Elixir? To rozhodně není pravda. Některé věci jsou v Elixiru samozřejmě implementované pomocí maker. Proč ne, když tam ta makra jsou a dává to smysl?
https://hackernoon.com/understanding-elixir-macros-3464e141434c
Proč mi tenhle link dáváš? Já vím, k čemu se makra v Elixiru používají, pracuju s nima často.
----
Vůbec celkově nechápu, co se vlastně snažíš říct - jestli jenom upřesňuješ něco z toho, co jsem řekl, nebo něco vyvracíš, nebo jenom tak plkáme. Zkus být trochu explicitnější, jestli chceš o něčem diskutovat - pokud možno zkus prosím použít věty jako "v tomhle nemáš pravdu", "tohle bych upřesnil" apod.