際際滷

際際滷Share a Scribd company logo
Functional Programming on the JVM
           using Clojure

         Baishampayan Ghose
          In鍖nitely Beta Technologies


             GNUnify 2010




                                        1 / 31
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
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
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
What, why and how of Clojure




   What is Clojure?
   Why a new programming language?
   How is Clojure any better than X?




                                       5 / 31
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
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
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
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
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
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
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
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
Hello, Clojure!


hello.clj
(ns hello)

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

(hello "Clojure") ; -> "Hello, Clojure!"




                                           13 / 31
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
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 鍖rst item
  (rest s)
     Return a seq of the rest of elements




                                                       15 / 31
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
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
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
Concurrency


  Simultaneous execution
  Avoid reading,yielding inconsistent data




                                             19 / 31
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
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
Multimethods



  Generalised indirect dispatch
  Dispatch on a arbitrary function of the arguments




                                                      21 / 31
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
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
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
There is more!


   Metadata
   Destructuring
   Transients
   Zippers
   Futures, Promises
   clojure.contrib

          Ping me after the talk for details




                                               23 / 31
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
Tools



   Emacs + SLIME + paredit
   ViMClojure
   Enclojure + IntelliJ IDEA
   Counterclockwise + Eclipse
   Leiningen




                                25 / 31
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
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
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
Questions?




             29 / 31
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
Contacting me

   http://freegeek.in/
   bg@infinitelybeta.com
   @ghoseb on Twitter
   際際滷s on - http://bit.ly/gnunify-clojure

  In鍖nitely Beta is recruiting smart hackers!
         http://infinitelybeta.com/jobs/




                    CC BY SA


                                                31 / 31

More Related Content

Introduction to Clojure

  • 1. Functional Programming on the JVM using Clojure Baishampayan Ghose In鍖nitely Beta Technologies GNUnify 2010 1 / 31
  • 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. 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. 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. What, why and how of Clojure What is Clojure? Why a new programming language? How is Clojure any better than X? 5 / 31
  • 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. 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. 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. 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. 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. 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. 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. 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. Hello, Clojure! hello.clj (ns hello) (defn hello "Say hello to name" [name] (str "Hello, " name "!")) (hello "Clojure") ; -> "Hello, Clojure!" 13 / 31
  • 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. 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 鍖rst item (rest s) Return a seq of the rest of elements 15 / 31
  • 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. 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. 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. Concurrency Simultaneous execution Avoid reading,yielding inconsistent data 19 / 31
  • 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. 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. Multimethods Generalised indirect dispatch Dispatch on a arbitrary function of the arguments 21 / 31
  • 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. 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. 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. There is more! Metadata Destructuring Transients Zippers Futures, Promises clojure.contrib Ping me after the talk for details 23 / 31
  • 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. Tools Emacs + SLIME + paredit ViMClojure Enclojure + IntelliJ IDEA Counterclockwise + Eclipse Leiningen 25 / 31
  • 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. 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. 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. Questions? 29 / 31
  • 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. Contacting me http://freegeek.in/ bg@infinitelybeta.com @ghoseb on Twitter 際際滷s on - http://bit.ly/gnunify-clojure In鍖nitely Beta is recruiting smart hackers! http://infinitelybeta.com/jobs/ CC BY SA 31 / 31