Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Functional Programming on the JVM
           using Clojure

         Baishampayan Ghose
          Infinitely Beta Technolog...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Who am I?



  My name is BG and I am a Computer guy
     FP head
     Scale nerd
     Prog-lang lawyer
     Web standards...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
What, why and how of Clojure




   What is Clojure?
   Why a new programming language?
   How is Clojure any better than ...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Fundamentals



  Clojure is a Lisp
  Clojure is dynamic
  Clojure is hosted on the JVM
  Clojure is functional
  Clojure ...
Integers — 1234567891234
Doubles — 3.14, BigDecimals — 1.23M
Ratios — 22/4
Strings — “foo”, Characters — a b c
Symbols — f...
Data Structures


   Lists
       (1 2 3 4 5), (foo bar baz), (list 1 2 3)
   Vectors
       [1 2 3 4 5], [foo bar baz], (...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Syntax


  There is no other syntax!
  Data structures are the code
  No other text based syntax, just different
  interpr...
Syntax


  There is no other syntax!
  Data structures are the code
  No other text based syntax, just different
  interpr...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Hello, Clojure!


hello.clj
(ns hello)

(defn hello
    "Say hello to name"
    [name]
    (str "Hello, " name "!"))

(hel...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Sequences


  An abstraction over traditional Lisp lists
  Provides an uniform way of walking through data
  structures
  ...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Java Inter-op


   Wrapper free interface to Java
   Syntactic sugar to make Java invocation easy
   Core Clojure abstract...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Concurrency


  Simultaneous execution
  Avoid reading,yielding inconsistent data




                                    ...
Concurrency


  Simultaneous execution
  Avoid reading,yielding inconsistent data

              Synchronous           Asy...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Multimethods



  Generalised indirect dispatch
  Dispatch on a arbitrary function of the arguments




                  ...
Multimethods



  Generalised indirect dispatch
  Dispatch on a arbitrary function of the arguments
  Call sequence
     C...
Multimethods



  Generalised indirect dispatch
  Dispatch on a arbitrary function of the arguments
  Call sequence
     C...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
There is more!


   Metadata
   Destructuring
   Transients
   Zippers
   Futures, Promises
   clojure.contrib

          ...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Tools



   Emacs + SLIME + paredit
   ViMClojure
   Enclojure + IntelliJ IDEA
   Counterclockwise + Eclipse
   Leiningen
...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Resources



  Programming Clojure by Stuart Halloway
  http://en.wikibooks.org/wiki/Clojure
  http://clojure.org
  http:/...
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Questions?




             29 / 31
Outline
1    Who am I?
2    What, why and how of Clojure
3    Fundamentals
4    Syntax
5    Hello, Clojure!
6    Sequences...
Contacting me

   http://freegeek.in/
   bg@infinitelybeta.com
   @ghoseb on Twitter
   Slides on - http://bit.ly/gnunify-...
Upcoming SlideShare
Loading in …5
×

Introduction to Clojure

7,857 views

Published on

My Clojure talk at GNUnify 2010.

Published in: Technology
  • Be the first to comment

Introduction to Clojure

  1. 1. Functional Programming on the JVM using Clojure Baishampayan Ghose Infinitely Beta Technologies GNUnify 2010 1 / 31
  2. 2. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 2 / 31
  3. 3. Who am I? My name is BG and I am a Computer guy FP head Scale nerd Prog-lang lawyer Web standards ninja FOSS geek Startup-ist 3 / 31
  4. 4. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 4 / 31
  5. 5. What, why and how of Clojure What is Clojure? Why a new programming language? How is Clojure any better than X? 5 / 31
  6. 6. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 6 / 31
  7. 7. Fundamentals Clojure is a Lisp Clojure is dynamic Clojure is hosted on the JVM Clojure is functional Clojure is geared towards concurrency Free & Open Source 7 / 31
  8. 8. Integers — 1234567891234 Doubles — 3.14, BigDecimals — 1.23M Ratios — 22/4 Strings — “foo”, Characters — a b c Symbols — foo bar, Keyword — :foo :bar Booleans — true false, Null — nil Regex patterns — #“[a-zA-Z0-9]” 8 / 31
  9. 9. Data Structures Lists (1 2 3 4 5), (foo bar baz), (list 1 2 3) Vectors [1 2 3 4 5], [foo bar baz], (vector 1 2 3) Maps {:a 1 :b 2 :c 3}, (hash-map :x 1 :y 2) Sets #{foo bar baz} 9 / 31
  10. 10. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 10 / 31
  11. 11. Syntax There is no other syntax! Data structures are the code No other text based syntax, just different interpretations There is a fancy name for this — Homoiconicity 11 / 31
  12. 12. Syntax There is no other syntax! Data structures are the code No other text based syntax, just different interpretations There is a fancy name for this — Homoiconicity Everything is an expression All data literals stand for themselves, except — Symbols Lists 11 / 31
  13. 13. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 12 / 31
  14. 14. Hello, Clojure! hello.clj (ns hello) (defn hello "Say hello to name" [name] (str "Hello, " name "!")) (hello "Clojure") ; -> "Hello, Clojure!" 13 / 31
  15. 15. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 14 / 31
  16. 16. Sequences An abstraction over traditional Lisp lists Provides an uniform way of walking through data structures (seq coll) If collection is non-empty, return a sequence object (first s) Return the first item (rest s) Return a seq of the rest of elements 15 / 31
  17. 17. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 16 / 31
  18. 18. Java Inter-op Wrapper free interface to Java Syntactic sugar to make Java invocation easy Core Clojure abstractions are Java interfaces Clojure functions implement Callable & Runnable Clojure sequence library works on Java iterables Easy to implement, extend Java interfaces (if needed) Almost identical to Java in terms of speed 17 / 31
  19. 19. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 18 / 31
  20. 20. Concurrency Simultaneous execution Avoid reading,yielding inconsistent data 19 / 31
  21. 21. Concurrency Simultaneous execution Avoid reading,yielding inconsistent data Synchronous Asynchronous Coordinated ref Independent atom agent Unshared var Table: Building blocks of Clojure concurrency 19 / 31
  22. 22. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 20 / 31
  23. 23. Multimethods Generalised indirect dispatch Dispatch on a arbitrary function of the arguments 21 / 31
  24. 24. Multimethods Generalised indirect dispatch Dispatch on a arbitrary function of the arguments Call sequence Call dispatch function on args to get dispatch value Find method associated with dispatch value 21 / 31
  25. 25. Multimethods Generalised indirect dispatch Dispatch on a arbitrary function of the arguments Call sequence Call dispatch function on args to get dispatch value Find method associated with dispatch value Else call default method, else error 21 / 31
  26. 26. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 22 / 31
  27. 27. There is more! Metadata Destructuring Transients Zippers Futures, Promises clojure.contrib Ping me after the talk for details 23 / 31
  28. 28. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 24 / 31
  29. 29. Tools Emacs + SLIME + paredit ViMClojure Enclojure + IntelliJ IDEA Counterclockwise + Eclipse Leiningen 25 / 31
  30. 30. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 26 / 31
  31. 31. Resources Programming Clojure by Stuart Halloway http://en.wikibooks.org/wiki/Clojure http://clojure.org http://groups.google.com/group/clojure http://planet.clojure.in http://clojure.blip.tv 27 / 31
  32. 32. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 28 / 31
  33. 33. Questions? 29 / 31
  34. 34. Outline 1 Who am I? 2 What, why and how of Clojure 3 Fundamentals 4 Syntax 5 Hello, Clojure! 6 Sequences 7 Java Inter-op 8 Concurrency 9 Multimethods 10 There is more! 11 Tools 12 Resources 13 Q&A 14 Contacting me 30 / 31
  35. 35. Contacting me http://freegeek.in/ bg@infinitelybeta.com @ghoseb on Twitter Slides on - http://bit.ly/gnunify-clojure Infinitely Beta is recruiting smart hackers! http://infinitelybeta.com/jobs/ CC BY SA 31 / 31

×