poznáme.it Programovanie Cloud, 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). 1
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). 3

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). 5

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). 7

Kde je reduce je aj map

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

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). 11

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ť.

Senior Python Developer/ka

Úspešný americký startup, ktorý umožňuje vývojárom vytvárať aplikácie a rozhrania API bez akýchkoľvek časových, priestorových a cloudových architektúr hľadá...

C#/.NET & React Fullstack Developer/ka

FullStack Developer/ka | Vývoj nového produktu | Security Pracoval/a by si na TPP s platom 2400 - 2800 EUR/brutto mesačne...

Data Visualization Senior Analyst

Pre medzinárodnú IT spoločnosť hľadáme Senior Data Visualization Analyst. Pracujú na veľkých projektoch pre top 100 svetových spoločností. Ide o...

Splunk Data Engineer

Chcel by si dlhodobú spoluprácu, dobré pracovné podmienky, seriózny prístup? Medzinárodná IT spoločnosť hľadá Splunk Data Engineera. Pracujú na veľkých...

Senior Java Developer

Úspešný americký startup, ktorý umožňuje vývojárom vytvárať aplikácie a rozhrania API bez akýchkoľvek časových, priestorových a cloudových architektúr hľadá...

Backend/Node.js Developer / REMOTE

Pre mladý startup vyvíjajúci softvér, ktorý prispieva hráčom k lepšiemu zážitku z hrania, hľadáme Backend/Node.js Developera. Založili ho dvaja...

Julia Developer / REMOTE

Projekt pre nadšencov Julia a machine learning. Pre spoločnosť, ktorá používa matematické metódy a metódy AI / ML na...

Máte vo firemných stretnutiach chaos? Česká firma našla riešenie, teraz s aplikáciou dobývajú svet

Vyvíjajú ju v Českej republike, pracujú na nej aj hendikepovaní kolegovia a používajú ju firmy v rôznych krajinách sveta....

Ondrej Kubovič – Digitálna bezpečnosť a riziká na internete

Tentokrát sme sa porozprávali s Ondrejom Kubovičom, špecialistom v spoločnosti ESET na populárnu tému digitálnej bezpečnosti. Ondrej nám uviedol...

Slovenskí tvorcovia hier dosiahli v roku 2020 rekordný obrat 72 miliónov EUR, zamestnávali 870 ľudí

Slovenský herný priemysel nezastavila ani pandémia, v roku 2020 opäť výrazne rástol. Podľa štatistík Slovak Game Developers Association prekonal...

Čítaj ďalej:

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ť.