> Naopak pokud je zde nějaký obeznámený popularizátor, rád si o Elixíru něco přečtu.
Já jsem o tom uvažoval, že bych to mohl zkusit, ale bohužel nechce se mi přidávat další povinnosti, když horko těžko stáhám už ty současný :(
> Jeho zajímavé vlastnosti vycházejí z toho jak je navrženo jádro, které vykonává programy v Erlangu napsané.
Jednoznačně. Kvůli syntaxi by se do něj asi nikdo nezamiloval :) Pak ještě OTP, to je taky silný argument.
> Vlastní programovací jazyk z toho vychází a je navržen tak, aby nutil programátora zapisovat kód tak, aby vyhovoval tomu, jak bude později vykonávat.
V základu ano (např. různé klauzule pro různé případy stejně jako u Prologu), ale většina je prostě udělaná nějaký způsobem, který je ne-nutný (je arbitrárně zvolený). Už jenom proto Elixir stojí za zkoušku. Viz níž.
> Předpokládám, že v Elixiru jde o to, jak zapisovat programy pro Erlang VM alternativním způsobem, který ideálním případě způsobí, že výsledek bude stejný kód, který poběži na VM.
Výsledkem je *vždycky* plně kompatibilní kód, to je základní myšlenka Elixiru, přes kterou nejede vlak. Jsou i některé věci, které Beam VM vynucuje, pro Elixir jsou nepraktické a stačil by malý zásah, aby to tak nebylo - a přesto autoři Elixiru (AFAIK) neplánovali Beam VM forknout, což bylo imho hodně hodně dobré rozhodnutí.
Jinak rozdíl není zdaleka a ani primárně jenom o syntaxi. Rozdílů je hodně, já bych je rozdělil asi takhle:
1. příjemné kosmetické věci - např. interpret má dobře audělané doplňování (ala iRuby nebo iPython) nebo druhý příklad: operátor |> okoukaný z F#
2. kosmetické věci, které výrazně zjednodušují život - např. parser je volnější, takže není potřeba jako u Erlangu psát všude čárky a myslet na střední/tečku. Překladač si to správně vyloží sám, což je příjemný. Stejně tak je povolený třeba dát před ukončovací závorkou listu čárku. Oboje výrazně šetří nervy při takovémtom drobném refaktoringu typu "předposlední řádek dám nakonec" nebo "do seznamu přidám další řádek s další položkou".
3. odlišnosti v jazyce, které nepřinášejí vyloženě větší sílu, ale jsou hodně příjemné - např. Elixir má hierarchii modulů (MyApp, MyApp.Supervisor, MyApp.Worker,...) Pořád to jsou ale jenom atomy ('MyApp.Worker'), takže pořád je plná kompatibilita s Erlangem.
Druhá věc je třeba oprava nepříjemné chyby v návrhu Erlangu: v Elixiru je opravdu *všechno* výraz, takže všechno, co může člověk napsat do zdrojáku, může napsat i do interpretu. V Erlangu tohle není a Armstrong to sám označil za velkou návrhovou chybu, udělanou kdysi dávno.
4. úplně nové prvky v jazyce, které přináší (imho) větší možnosti/expresivitu: na prvním místě jednoznačně makrosystém ve sylu Lispu (Elixir je homoikonický, i když logicky upovídaněji než Lisp). Jako druhej příklad třeba systém protokolů, což jsou takové trochu "objekty naruby" ;) - docela trvá, než si to člověk zvykne používat (a dá se bez toho obejít), ale je to příjemná věc - viz http://elixir-lang.org/getting_started/16.html
Pomocí protokolů se pak dá udělat polymorfie, která bude fungovat i s datovými strukturami, které dopředu neznám (malý pokus, jak udělat modul pro serializaci obecné datové struktury: https://github.com/mprymek/xerialize - na tom je vidět, jak je taková věc díky protokolům až stupidně jednoduchá).