Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Filosofie jazyka Clojure

Filosofie jazyka Clojure

CZJUG Ostrava

Daniel Kvasnička

November 18, 2013
Tweet

More Decks by Daniel Kvasnička

Other Decks in Programming

Transcript

  1. • Funkcionální(!) LISP, syntakticky bohatší než CL / Scheme •

    důraz na kamarádství 
 s JVM (kolekce, OOP) • neměnné a 
 persistentní datové
 struktury • důraz na konkurentnost 
 (nebo paralelismus…?) @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  2. • Dynamicky a silně typový (type hinty, pre-conditions)
 (+ 3

    “x“) => ClassCastException • Typed Clojure
 (clojure.core.typed/ann v t) • Schema (Prismatic) - bohatší validace, definice funkcí citlivých na typy @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  3. • Identita • kontinuita - hodnoty v čase • záležitost

    mysli • Vnímání • nekoordinovaná činnost • “snapshoty” - v moci vnímajícího! • Hodnota • “jednotka” vnímání, neměnná, bod na časové ose identity • Akce • změna na identitě v čase, nezávislá na vnímání, tvoří hodnoty, může být koordinovaná @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  4. @dkvasnickajr | danielkvasnicka.net | vendavo.cz Autorem obrázku je R. Hickey

    / Stu Halloway (def m {“x” 3}) (assoc m “x” 4)
  5. Akce - unifikovaný update model ! • Atoms - nekoordinovaný

    synchronní přístup • Agents - nekoordinovaný asynchronní přístup • Refs - koordinovaný synchronní přístup k mnoha identitám (STM)
 • Koordinovaný - dvě a více identit je třeba změnit naráz • (A)synchronní - zda akce blokuje @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  6. Atomy ! user=> (def x (atom {:f 4})) #'user/x user=>

    (swap! x assoc :f 5) {:f 5} user=> x #<Atom@3ddb4b88: {:f 5}> user=> @x {:f 5} @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  7. Agenti ! user=> (def y (agent {:g 10})) #'user/y user=>

    @y {:g 10} user=> (send y assoc :g 50) #<Agent@31d56250: {:g 50}> user=> @y {:g 50} @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  8. Refs ! user=> (def r1 (ref {:castka 1000})) #'user/r1 user=>

    (def r2 (ref {:castka 0})) #'user/r2 user=> (dosync (alter r1 update-in [:castka] dec) (alter r2 update-in [:castka] inc)) {:castka 1} user=> @r1 {:castka 999} user=> @r2 {:castka 1} @dkvasnickajr | danielkvasnicka.net | vendavo.cz
  9. Konkurentnost / paralelismus? Paralelismus = skutečné paralelní zpracování bez nutnosti

    koordinace; rozdělení úkolu na nezávislé díly Konkurentnost = vypořádání se s mnoha úkoly při omezených zdrojích 
 Mutable data: 
 paralelismus -> konkurentnost @dkvasnickajr | danielkvasnicka.net | vendavo.cz