Your SlideShare is downloading. ×
Clojure - JVM språket som er "multi-core ready"
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Clojure - JVM språket som er "multi-core ready"

335
views

Published on

About how Clojure handles the multi-core problem. In Norwegian, but not too much text on slides.

About how Clojure handles the multi-core problem. In Norwegian, but not too much text on slides.

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
335
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • Korrekthet og ytelse\nPresisere at det vi skal snakke om er Concurrency.\n
  • \n
  • Startet mars i 2006.\nFørste versjon 4 May 2009\nFikk veldig mye oppmerksomhet.\n
  • Alle problemer har en inherent complexity. Dette er det som uansett må til for å løse problemet.\n
  • Vært programmerer i 7 år, har hatt alle mulige roller som konsulent. De siste 4 åra...\n
  • Først lisp i 1958 John McCarthy\nIkke objektorientert\nYtelse nesten som Java\n
  • \n
  • Cambridge polish notation\n
  • Cambridge polish notation\n
  • Cambridge polish notation\n
  • Cambridge polish notation\n
  • Cambridge polish notation\n
  • Cambridge polish notation\n
  • Cambridge polish notation\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Makroer brukes bl.a. for kontrollstrukturer.\nClojure er et lite språk - For comprehensions\n\nDersom du ikke skjønte dette...\n
  • Makroer brukes bl.a. for kontrollstrukturer.\nClojure er et lite språk - For comprehensions\n\nDersom du ikke skjønte dette...\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Perception: You don't rub your brain on a value, there is a disconnect. Perception is massively parallel and requires no coordination. Uncoordinated.\n\n Med låsemodell, vil programmet gå tregere jo flere som oppfatter/perceives meg?\n
  • \n
  • \n
  • \n
  • Epokisk tidsmodell\n
  • \n
  • Gjenta egenskaper! Når brukes dette!\n
  • Gjenta egenskaper! Når brukes dette!\n
  • Gjenta egenskaper! Når brukes dette!\n
  • Gjenta egenskaper. Når brukes dette!\nActors vs agents:\nAc -> Sende tilstand til oppførsel\nAg -> Sende oppførsel til tilstand\nSynkron perception\n
  • Gjenta egenskaper. Når brukes dette!\nActors vs agents:\nAc -> Sende tilstand til oppførsel\nAg -> Sende oppførsel til tilstand\nSynkron perception\n
  • Gjenta egenskaper. Når brukes dette!\nActors vs agents:\nAc -> Sende tilstand til oppførsel\nAg -> Sende oppførsel til tilstand\nSynkron perception\n
  • Gjenta egenskaper, når brukes dette\n
  • Gjenta egenskaper, når brukes dette\n
  • Gjenta egenskaper, når brukes dette\n
  • \n
  • \n
  • STM var en av hovedårsakene til at Clojure ble såpass fort kjent.\nAnalogi\n
  • Snakke om .Net prosjektet\n
  • Atomic - rollback ved transactions ellers vil det committe\nConsistent - constraints i database, set-validator\nIsolated - Snapshot MVCC\nMen... kan gi rollback.\nEget eksempel 10 000 retries.\nEksempel tungt oppdaterer en ref som få konkurrerer om. Så gjør den en lett jobb som oppdaterer en ref som mange konkurrerer om.\n
  • Atomic - rollback ved transactions ellers vil det committe\nConsistent - constraints i database, set-validator\nIsolated - Snapshot MVCC\nMen... kan gi rollback.\nEget eksempel 10 000 retries.\nEksempel tungt oppdaterer en ref som få konkurrerer om. Så gjør den en lett jobb som oppdaterer en ref som mange konkurrerer om.\n
  • Atomic - rollback ved transactions ellers vil det committe\nConsistent - constraints i database, set-validator\nIsolated - Snapshot MVCC\nMen... kan gi rollback.\nEget eksempel 10 000 retries.\nEksempel tungt oppdaterer en ref som få konkurrerer om. Så gjør den en lett jobb som oppdaterer en ref som mange konkurrerer om.\n
  • \n
  • Når man tenker seg om -> fornuftig måte å modellere tilstand på. Bonusen er jo da at dette fungerer veldig bra i en concurrent setting.\n
  • Når man tenker seg om -> fornuftig måte å modellere tilstand på. Bonusen er jo da at dette fungerer veldig bra i en concurrent setting.\n
  • \n
  • Transcript

    • 1. ClojureJVM språket som er“multi-core ready” Alf Kristian Støyle
    • 2. Concurrency dreier som om å gjøre flere urelaterte oppgaver omtrent samtidigParallelism dreier seg om å dele en oppgave i mange deloppgaver som kan gjøres concurrent
    • 3. Clojure
    • 4. Accidental complexity
    • 5. Alf Kristian Støyle7 års erfaring som programmerer
    • 6. Clojure• General purpose• Lisp (List Processing)• Funksjonelt• Kompilert• Dynamisk typet• Tett knyttet til JVM’en
    • 7. 1; => 1"Hello World"; => "Hello World"
    • 8. 1; => 1"Hello World"; => "Hello World"(class 1); => java.lang.Integer(class "Hello world"); => java.lang.String
    • 9. (println "Hello " "world"); “Hello world”; => nil
    • 10. Funksjonsnavn(println "Hello " "world"); “Hello world”; => nil
    • 11. Funksjonsnavn Parametere(println "Hello " "world"); “Hello world”; => nil
    • 12. Funksjonsnavn Parametere(println "Hello " "world") ,; “Hello world”; => nil
    • 13. Prefiks notasjon Funksjonsnavn Parametere(println "Hello " "world") ,; “Hello world”; => nil
    • 14. Methods.callStatic();methods.callInstance();callStatic();callInstance();this.callInstance();methods.callStatic();Methods.this.callInstance();Methods.this.callStatic();
    • 15. (println "Hello world"); Hello world; => nil
    • 16. (println "Hello world"); Hello world; => nil(sum 1 2 3); => 6
    • 17. (println "Hello world"); Hello world; => nil(sum 1 2 3); => 6(+ 1 2); => 3
    • 18. (println "Hello world"); Hello world; => nil(sum 1 2 3); => 6(+ 1 2); => 3(+ 1 2 3); => 6
    • 19. (println "Hello world"); Hello world; => nil(sum 1 2 3); => 6(+ 1 2); => 3(+ 1 2 3); => 6(+); => 0
    • 20. 1 + 2 * 3
    • 21. 1 + 2 * 31 + (2 * 3)
    • 22. 1 + 2 * 31 + (2 * 3)(+ 1 (* 2 3))
    • 23. Funksjoner(fn [& nums] (apply + nums))
    • 24. Funksjoner(def sum (fn [& nums] (apply + nums)))
    • 25. Funksjoner(def sum )
    • 26. Funksjoner(def sum (fn [& nums] (apply + nums)))
    • 27. Funksjoner(def sum (fn [& nums] (apply + nums)))(defn sum [& nums] (apply + nums))
    • 28. Lister!(3 2 1); => (3 2 1)(+ 3 2 1); => 6
    • 29. Lister!(3 2 1); => (3 2 1)(+ 3 2 1); => 6(defn iterate [f x] (cons x (lazy-seq (iterate f (f x)))))
    • 30. Makroer
    • 31. Makroer(postfix (2 1 +)); => 3
    • 32. Makroer(defmacro postfix [form] (reverse form))(postfix (2 1 +)); => 3
    • 33. Makroer(infix (1 + 2)); => 3
    • 34. Makroer(defmacro infix [form] `(~(second form) ~(first form) ~@(nnext form)))(infix (1 + 2)); => 3
    • 35. Makroer(defmacro infix [form] `(~(second form) ~(first form) ~@(nnext form)))(infix (1 + 2)); => 3(macroexpand (infix (1 + 2))); => (+ 1 2)
    • 36. (+ Clojure Alf Kristian)
    • 37. (+ Clojure Alf Kristian) oooooo oooooo oooooooooo oooooooooo oooooooooooooo oooooooooooooo ooooooooooooooooo ooooooooooooooooo ooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooooooo ooooooooooooooooooooooooooo ooooooooooooooooooooooo ooooooooooooooooooo ooooooooooooooo ooooooooooo ooooooo ooo o Clojure + Alf Kristian
    • 38. Immutable collections; List(3 2 1); Vector[1 2 3]; Set#{1 2 3}; Map{1 "one", 2 "two"‚ 3 "three"}
    • 39. Persistent data structures(def my-list (3 2 1)); => (3 2 1)
    • 40. Persistent data structures(def my-list (3 2 1)); => (3 2 1)
    • 41. Persistent data structures(def my-list (3 2 1)); => (3 2 1)(def my-other-list (cons 4 my-list)); => (4 3 2 1)
    • 42. Persistent data structures(def my-list (3 2 1)); => (3 2 1)(def my-other-list (cons 4 my-list)); => (4 3 2 1)
    • 43. Immutable records(defrecord Person [fname lname]); => user.Person(Person. "Alf" "Støyle"); => #:user.Person{:fname "Alf", :lname "Støyle"}
    • 44. Immutable objects are always thread-safe.
    • 45. Ren funksjonellprogrammering f(x) = x + 2
    • 46. Clojures filosofiVerdier Immutable/uforanderlig, primitiv eller sammensatt
    • 47. Clojures filosofiVerdier Immutable/uforanderlig, primitiv eller sammensattIdentitet En observert entitet som vi assosierer med en serie relaterte tilstander (verdier) over tid
    • 48. Clojures filosofiVerdier Immutable/uforanderlig, primitiv eller sammensattIdentitet En observert entitet som vi assosierer med en serie relaterte tilstander (verdier) over tidTilstand Verdien til en identitet i på et gitt tidspunkt
    • 49. Clojures filosofiVerdier Immutable/uforanderlig, primitiv eller sammensattIdentitet En observert entitet som vi assosierer med en serie relaterte tilstander (verdier) over tidTilstand Verdien til en identitet i på et gitt tidspunktTid Relativ før/etter endring av identitet
    • 50. Perception
    • 51. Perception
    • 52. Perception
    • 53. Perception
    • 54. Perception
    • 55. Perception
    • 56. Fra Rich Hickeys“Are we there yet”
    • 57. Reference types• Atoms - synkron og ukoordinert oppdatering• Agents - asynkron og ukoordinert oppdatering• Refs - synkron og koordinert oppdatering
    • 58. Reference types• Atoms - synkron og ukoordinert oppdatering• Agents - asynkron og ukoordinert oppdatering• Refs - synkron og koordinert oppdatering• Synkron perception
    • 59. Atoms(def an-atom (atom 0)); => #user/an-atom
    • 60. Atoms(def an-atom (atom 0)); => #user/an-atom(swap! an-atom inc); => 1
    • 61. Atoms(def an-atom (atom 0)); => #user/an-atom(swap! an-atom inc); => 1(deref an-atom); => 1
    • 62. Atoms(def an-atom (atom 0)); => #user/an-atom(swap! an-atom inc); => 1(deref an-atom); => 1@an-atom; => 1
    • 63. Agents(def an-agent (agent 0)); => #user/an-atom
    • 64. Agents(def an-agent (agent 0)); => #user/an-atom(send an-agent inc); => #<Agent@9b7c63f: 0>
    • 65. Agents(def an-agent (agent 0)); => #user/an-atom(send an-agent inc); => #<Agent@9b7c63f: 0>@an-agent; => ???
    • 66. Agents(def an-agent (agent 0)); => #user/an-atom(send an-agent inc); => #<Agent@9b7c63f: 0>@an-agent (await an-agent); => ??? ; => nil @an-agent ; => 1
    • 67. Refs(def ref-1 (ref 0)); => #user/ref-1(def ref-2 (ref 0)); => #user/ref-2
    • 68. Refs(def ref-1 (ref 0)); => #user/ref-1(def ref-2 (ref 0)); => #user/ref-2(alter ref-1 inc)
    • 69. Refs(def ref-1 (ref 0)); => #user/ref-1(def ref-2 (ref 0)); => #user/ref-2(alter ref-1 inc); java.lang.IllegalStateException:; No transaction running
    • 70. Refs(def ref-1 (ref 0)); => #user/ref-1(def ref-2 (ref 0)); => #user/ref-2(alter ref-1 inc); java.lang.IllegalStateException:; No transaction running(dosync (alter ref-1 inc)); => 1
    • 71. Refs(dosync (alter ref-1 inc) (alter ref-2 dec)); => -1
    • 72. Refs(dosync (alter ref-1 inc) (alter ref-2 dec)); => -1@ref-1; => 2@ref-2; => -1
    • 73. Refs(dosync (alter ref-1 inc) (dosync (alter ref-2 dec))); => -2@ref-1; => 3@ref-2; => -2
    • 74. Software transactional memory
    • 75. Software transactional memory
    • 76. Software transactional memory Transactional memory is to shared-memory concurrency as garbage collection is to memory management
    • 77. Software transactional memory
    • 78. Software transactional memory Atomic Consistent Isolated Durable
    • 79. (dosync; ... (commute ref-3 inc) (alter ref-2 + @ref-1)); => 1
    • 80. Oppsummering• Skiller tilstand og identitet• Ingen mutable tilstand• Ingenting blokkerer• Clojure hjelper langt på vei med concurrency
    • 81. Oppsummering• Skiller tilstand og identitet• Ingen mutable tilstand• Ingenting blokkerer• Clojure hjelper langt på vei med concurrency• Mindre “accidental complexity”
    • 82. clojure.org slideshare.net/stoyle aks@knowit.nomeetup.com/Oslo-Socially-Functional Q &A