OrgPad logo

Superschopnosti jazyka Clojure

Created by Pavel Klavík

#Clojure, #Clojurescript, #Datově orientované programování, #OpenAlt, #OpenAlt 2023, #OrgPad, #REPL, #programování

Superschopnosti jazyka Clojure

Pavel Klavík

pavel v obleku

Superschopnosti jazyka Clojure

800px-Clojure logo.svg

https://orgpad.com/s/openalt23

CTO a spoluzakladatel OrgPadu

799px-OrgPad Logo.svg

PhD z vizualizací dat na Karlově Univerzitě

Softwarový inženýr v Googlu (1,5 roku)

Clojure

Vytvořen Richem Hickeym v roce 2007 po dvou letech práce. Jméno Clojure vzniklo spojením jmen jazyků C#, Java a Lisp (CLJ).

Je to stabilní jazyk s malým jádrem. Existuje pro něj spousta úžasných knihoven a nástrojů. Hlavní filozofie Clojure je jednoduchost.

Clojure logo

Screenshot (150)

Používají ho stovky firem

Firmy jako Apple, Facebook, Netflix, WalmartLabs, Nubank, ...

Screenshot (151)

Celý kód OrgPadu má 112 000 řádek

image

Kolik kódu přežilo v jednotlivých letech

stack-plot

Takhle vypadá stejný graf pro Clojure

image

Je to LISP

Místo f(x,y,z) píšeme (f x y z).

Příklad: FizzBuzz

Příliš mnoho závorek??

Screenshot (139)

Programovací jazyk Clojure

Interactive Clojure tutorial

DEMO Úvod do Clojuru

Jak vypadá můj desktop

4765DC68-ACA1-4AC0-93C7-00989817688C

REPL do dev klienta

Příklad OrgStránky

REPL do dev serveru

Zrychlení serveru na jaře

zatez-na-cpu

Hot code reloading pro dev klienta

Náhodné přebarvení buněk

Hostovaný jazyk na mnoha platformách

Jazyk je hostovaný na různých platformách a máme k nim přímo přístup. Proto je jednoduché použít libovolnou knihovnu a naopak nativní kód může používat kód napsaný v Clojure. Je jednoduché přidat Clojure do existujícího projektu. V mnoha firmách ho tam přidal jeden programátor a později ho začal používat celý tým.

JVM

Původní nejvíce používaná verze Clojure běží nad JVM. Lze použít libovolnou Java knihovnu a naopak je možné napsan nové knihovny, které lze použít z Javy. Stačí přidat clojure.jar do projektu.

JavaScript

ClojureScript je verze jazyka, která se kompiluje do JavaScriptu. Používá Google Closure Compiler, který optimalizuje a minimalizuje kód.

cljs-logo-120b

Dart

ClojureDart je verze, která se kompiluje do Dartu. Ten umožňuje vývoj nativních desktopových a mobilních aplikací a použití Google Flutter.

image

Skriptování s Babashka

Rychlé nativní Clojure skriptovací prostředí, mocná náhrada bashe.

image

Java(Script) interop

Uvažme nástledující kód v Javě:

Screenshot (146)

Může být mnohem přehledněji zapsán v Clojuru:

Screenshot (147)

Více informací o Java interopu a Javascript interopu; balíčky z npm lze používat pomocí via Shadow-cljs.

Datově orientované programování

Internet běží na textových zprávách. Formáty jako HTTP nebo JSON jsou použitelné pro kohokoliv. ORM a další binární formáty ne.

Idea Clojure je použít stejné techniky na programování vnitřků systémů. Takže rozdílné části systému komunikuji pomocí zpráv obsahujících data.

Data lze jednoduše zobrazit, analyzovat, lze na ně aplikovat jednu sadu funkcí, komunikace je transparentní. Aplikujeme transformace, které mění data. Jméno funkcionální programování chybně dává do popředí transformace, data jsou to nejdůležitější.

Kniha o datově orientovaném programování

Existuje celá kniha od Yehonathan Sharvita která vysvětluje výhody reprezentování dat pomocí map a vektorů, místo OOP objektů. Redukuje to komplexitu, celý systém je lépe srozumitelný a snadněji se v něm provádí změny. Tato kniha vysvětluje benefity programování v Clojure, ale ukazuje to na příkladech v JavaScriptu.

Sharvit-DOP-HI

HTTP Request jako data

Screenshot (143)

Generování HTML z dat

hiccup

Toto je Reactová komponenta. Další příklady naleznete na https://reagent-project.github.io/.

Malá databáze knih

image

Vyzkoušejme její transformace

(def books
[{:title "The Catcher in the Rye" :author "J.D. Salinger" :year 1951}
{:title "Franny and Zooey" :author "J.D. Salinger" :year 1961}
{:title "To Kill a Mockingbird" :author "Harper Lee" :year 1960}
{:title "1984" :author "George Orwell" :year 1949}
{:title "Animal Farm" :author "George Orwell" :year 1945}
{:title "Pride and Prejudice" :author "Jane Austen" :year 1813}
{:title "Sense and Sensibility" :author "Jane Austen" :year 1811}
{:title "The Great Gatsby" :author "F. Scott Fitzgerald" :year 1925}
{:title "Tender Is the Night" :author "F. Scott Fitzgerald" :year 1934}])

Nová routa na serveru

SSH tunel pro REPL

Host remote-repl
HostName <host>
User <user>
Port <port>
LocalForward 7001 localhost:7000
ExitOnForwardFailure yes
RequestTTY no
RemoteCommand cat -

REPL do stagingu

REPL do produkce

Spiderman---With-Great-Power-comes-Great-Responsibility 800x800 SEPS-1000x1000

Používání Stripe API

Integrace s platební bránou Stripe

Výpočty s aktuálními daty

Jednorázové konverze DB

Generování účetnictví pro Stripe

Rychlé opravy chyb

Založení/prodloužení předplatného

Použití OrgPadu pro správu vývoje

Plánování nových funkcí/změn

Sepsání dokumentace

Studium technologií a knihoven

Přehled bugů

Vývojářská wiki

Prezentační nástroj

OrgPad 20% sleva

Promo code: OPENALT23