Uvod u Elixir — Prednosti, mane i kako ga savladati?

Elixir može da ima široku upotrebu, ali trenutno je poprilično popularan u svetu web programiranja i distribuiranih sistema.

Nikola Novaković - 1. Avgust, 2016.

Već duže vreme tražim nešto što može da me učini srećnim kao Ruby samo da bude više nastrojeno prema funkcionalnom programiranju i tako sam naleteo na Elixir programski jezik.

Još pre više od godinu dana sam čuo za Elixir, ali sam tek pre oko šest meseci počeo ozbiljnije da se bavim njime — i mislim da sam konačno našao nešto što me čini srećnim kao Ruby.

Ovaj post će biti generalni pregled jezika i zašto je možda pravi izbor baš za vas, bez puno fokusa na sam kôd.

Za šta se koristi Elixir ?

Elixir može da ima široku upotrebu, ali trenutno je poprilično popularan u svetu web programiranja i distribuiranih sistema. Mnogi ljudi koji su poznati u Ruby i Rails ekosistemu prelaze na Elixir kao njihov primarni jezik i to dosta govori o samom potencijalu jezika.

Phoenix framework je napisan u Elixiru. Jako liči na Ruby On Rails, ali samo na prvi pogled. Kada ga malo više koristite, shvatićete da je dosta stvari različito.

Mnogo zanimljivih projekata u vezi sa robotikom je, takođe, urađeno u Elixiru zbog njegove funkcionalne prirode, veoma lepog rada u distrubiranim sistemima i tolerancije na greške, koja je na jako visokom nivou.

Dobre strane Elixira?

Elixir je napravljen da radi na Erlang virtuelnoj mašini. Erlang je jezik koji se koristi na Eriksonovim telekomunikaconim sistemima i jako je skalabilan i siguran.

Elixir kao jezik nudi veoma mnogo, a u ovom članku prolazimo samo kroz neke od najbitnijih prednosti i mana.

Procesi i paralelizam

U Elixiru sav vaš kôd se pokreće unutar Elixir procesa. Različite delove kôda možete da pokrenete u različitim procesima i oni mogu da komunicariju međusobno i da šalju poruke. To znači da možete da pišete kôd koji će da se pokreće paralelno, i uz to Elixir vam daje lep API.

Funkcionalano programiranje

Elixir je jezik u kome funkcionalno programirate — ako želite da naučite više o ovome preporučujem seriju tekstova na Startitu koji ulaze u detalje o ovom stilu programiranja.

Otpornost na greške

Elixir je veoma tolerantan na greške. Koristi nešto što se zove “OTP” (Open Telecom Platform) što je framework za Erlang koji jeziku omogućava da ukoliko se desi neka greška u vašem kôdu, samo taj proces stane i onda se restartuje.

S obzirom na to da treba da pišete kôd koji je paralelizovan — to znači da ako imate tri procesa koji komunicaraju međusobno i jedan od njih padne zbog neke greške, ona neće uticati na ostale procese i restartovaće se.

Ovo je poprilično moćna stvar koja vam omogućava da budete mnogo sigurniji u vaš kôd.

Sintaksa

Autor ovog jezika Hose Valim je bio inspirisan jezikom sa kojim je radio pre nastanka Elixira, a to je Ruby. Samim tim sintaksa jezika je baš inspirasana Rubijem i svi koji su pisali dovoljno dugo Ruby neće imati problema sa sintaksom Elixira.

Loše strane Elixira?

Funkcionalno programiranje

Kada krenete sa Elixirom i dolazite iz objektno orijentisanog jezika kao što je Ruby, imaćete određeni “learning curve” da biste mogli da korisitite jezik u njegovoj punoj snazi.

Ne postoje objekti i klase nego samo moduli. Sve se vrti oko funkcija i rekurzije. Trebaće da prođe malo vremena da biste se navikli na funkcionalni način razmišljanja, ali kada se jednom naviknete počećete da i u svoje objektno orijentasane programe unosite elemente funkcionalnog programiranja.

Nije namenjen početnicima

Svi ovi kul feature-i jezika i funkcionalno programiranje nisu baš lako shvatljivi, pogotovo ako ste na početku. Verovatno ne bih preporučio da ovo bude prvi jezik za učenje nekoga ko tek ulazi u industriju.

Što se tiče ostalih mana jezika ovaj tekst nije loš, a u njemu se objašnjava na šta ćete sve naleteti tokom učenja jezika i programiranja.

Resursi za učenje jezika

Ja sam počeo da čitam o Elixiru sa njihovog sajta i onda sam prešao na knjigu od poznatog izdavača Pragmatic Programmer pod nazivom Programming Elixir.

Ostali resursi koje bih preporučio: