Ja bych hlasoval pro uvod do Elixiru. Puda uz je na to pripravena :) Prvne rict, co vlastne Elixir na Erlangu vylepsuje a pak ukazat nejakou realnou aplikaci, treba nejaky zivy web s websockety postaveny nad https://github.com/phoenixframework/phoenix
Elixir jsem narozdíl od Elrangu nezkoumal a nepoužíval v praxi. Psát o něčem co neznám by nemuselo dopadnout dobře. Naopak pokud je zde nějaký obeznámený popularizátor, rád si o Elixíru něco přečtu.
Dle mého názoru, kouzlo Erlangu nespočívá v tom že používá nějakou geniální syntaxi pro zápis programů. Jeho zajímavé vlastnosti vycházejí z toho jak je navrženo jádro, které vykonává programy v Erlangu napsané. 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.
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.
Pro používání Elixiru místo Erlangu (ve smyslu programovacího jazyka) nenacházím důvod, smysl mi to dává, pokud by se měl naučit programovat pro Erlang (ve smyslu virtual machine) někdo kdo klade důraz na styl programování a líbí se mu např. Ruby.
Ale je možné, že se pletu a rád bych si o tom něco přečetl.
> 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á).
Ještě bych dodal, že v Ruby jsem nikdy nedělal, jeho syntaxe mi vždycky šla na nervy a třeba na to všudepřítomné "do" v Elixiru jsem si musel hodně dlouho zvykat :) A i tak jsem se do Elixiru vyloženě zamiloval, takže rozhodně nejde o to, že by to bylo jenom přiohnutí syntaxe pro rubysty :) (fakt to není ani trochu věc na způsob Lisp Flavored Erlang, i když to tak třeba zdálky vypadá)