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

Filosofie jazyka Clojure

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Filosofie jazyka Clojure

CZJUG Ostrava

Avatar for Daniel Kvasnička

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