poznáme.itProgramovanieCloud, Containers, Clojure – lambda je “sranda” (1).

Cloud, Containers, Clojure – lambda je “sranda” (1).

  • Aký programovací jazyk zvoliť na budovanie škálovateľných cloudových riešení?
  • V akom jazyku programovať AI alebo hudbu?
  • Ako rýchlo vyrobiť nástroj na prácu so zoznamom dát?
  • Ako byť produktívny, deklaratívny a nestratiť sa v riešení stavu aplikácie pri tisíckach užívateľov?

Funkcionálne programovanie získava na popularite hlavne v prostredí distribuovaného computingu, v cloude. K tomu ho predurčuje jeho základná vlastnosť, bezstavová funkcionálna kompozícia, kde výsledok jednej funkcie je parametrom ďalšej. Dáta sú kód, kód sú dáta.

Uvedomili si to napríklad aj v jednom softvér house, ktorý sa rýchlo stal úspešnou bankou s backend riešením postaveným na funkcionálnom programovaní, pozrite si napríklad inšpirujúce video: “Real-time Financials with Microservices and Functional programing

alebo toto video s frontend riešením vytvoreným vo funkcionálnom jazyku „Using Clojurescript to launch iOS/Android apps to 1M users

Funkcionálne programovanie teoreticky vychádza z Lambda calculus konceptu vytvoreného Alonzom Churchom.

Lambda calculus bol implementovaný v programovacom jazyku LISP, v ktorom boli napísané známe aplikácie ako editor Emacs alebo vedomostný systém CyC.

Na sile získava aj vďaka implementácii v jazyku Clojure, dynamickom funkcionálnom jazyku bežiacom na Java Virtual Machine, JVM, kde zúžitkuje a vie využiť aj Java metódy a stovky overených Java knižníc. Ale nie je hybridom ako napríklad  Scala.

Na poli teórie počítačovej vedy sa vymyslelo a publikovalo mnoho skvelých nápadov a konceptov. Clojure obsahuje mnoho z najnovších a najväčších z týchto myšlienok, ktoré zatiaľ nenašli dobré (alebo žiadne) implementácie v iných jazykoch. Najzreteľnejšie sú tie, ktoré sa týkajú paralelného spracovania: Softvérová transakčná pamäť a spracovanie založené na agentoch sú zapracované do jazyka na základnej úrovni. Iné (napríklad pretrvávajúca nemennosť – persistent immutability) sú jemnejšie dizajnérske filozofie, ktoré sú syntézou moderného akademického výskumu a desaťročí reálnych skúseností z projektov.

Koncept Clojure je čisto funkcionálny a deklaratívny. Rozdiel medzi funkcionálnym a imperatívnym programom je znázornený na obrázku.

Cloud, Containers, Clojure – lambda je “sranda” (1). 2
Zdroj: Practical Clojure (Expert’s Voice in Open Source) 1st ed. Edition,
by Luke VanderHart (Author), Stuart Sierra (Author)

V Clojure je všetko zoznam. Všeobecný (prvky) alebo špecifický ako mapa {kľúč hodnota}, vektor [prvky], množina #{unikátne prvky}. A to je vlastne celá štruktúra jazyka Clojure. Samozrejme plus zopár kľúčových slov, ktoré sú však tiež len zoznamy.

Všetko čo potrebujete pre základný beh prostredia Clojure je JVM a príkazový riadok. Clojure podporuje takzvaný REPL, Read, Evaluate, Print, Loop mód, ktorý poskytuje výhodu interaktívneho a iteratívneho developmentu s okamžitým testovaním a kompiláciou.

V princípe stačí zadať do terminálového okna

java -jar clojure-1.8.0.jar

a spustí sa interaktívny REPL mód. Clojure však má aj automatizačný generátor lein na vytváranie a riadenie Clojure projektov, ktorý taktiež poskytuje aj REPL mód. Je veľmi užitočné si ho nainštalovať, obsahuje množstvo templates na rôzne typy projektov a je samozrejme ľahko rozšíriteľný ako všetko v Clojure. Začnime teda:

Cloud, Containers, Clojure – lambda je “sranda” (1). 4

Majme zoznam prirodzených čísel, v praxi napríklad telefónnych a chceme vyfiltrovať len párne. Zadefinujeme zoznam čísel ako Clojure zoznam, reprezentovaný okrúhlymi zátvorkami (def cisla [1 2 3 4 5 6 7 8]). Odklepneme, REPL spracuje, vytlačí výsledok a čaká na ďalší vstup.

Cloud, Containers, Clojure – lambda je “sranda” (1). 6

Prvé slovo reprezentuje vyhradený výraz pre definíciu, druhé je názov zoznamu, tretia položka v hranatých zátvorkách je vektor čísel, môžme ho nahradiť zoznamom makra rozsahu (range 1 101), ktorý poskytne sekvenciu čísel od 1 po 100. Zo zoznamu cisla urobíme daľší zoznam s okrúhlymi zátvorkami (filter even? cisla), ktorý je dostatočne samovysvetľujúci. Stručné a efektívne.

Skúste napríklad filter z regulárným výrazom (apply str (re-seq #”[a-zA-Z]” “abc:sQ/SDQ_”))

Alebo zosumovať čísla od 1 po 100 pomocou redukcie. Tá može pracovať v sekvenčnom, ale aj paralelnom móde ako napr. Fork/Join v Jave. Sila.

Cloud, Containers, Clojure – lambda je “sranda” (1). 8

Kde je reduce je aj map

Cloud, Containers, Clojure – lambda je “sranda” (1). 10

Silu Clojure si môžete vyskúšať aj pri vyhľadávaní palindrómov. Palindróm je postupnosť symbolov, ktorá má tú vlastnosť, že ju možno čítať v ľubovoľnom smere (sprava doľava alebo zľava doprava) a má vždy rovnaký význam.

Cloud, Containers, Clojure – lambda je “sranda” (1). 12

Snáď vás sila Clojure už v tomto krátkom úvode nadchla a bude sprevádzať odteraz naďalej.

Ak chcete odhaliť aj krásu, skúste sa pozrieť na http://lighttable.com/, editor novej generácie napísaný v Clojure, ClojureScripte.

Nabudúce, krátky program na zbieranie (scraping) dát z tabuliek na webstránkach.

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.

Čítaj ďalej: