SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Functional Programming on the JVM
           using Clojure

         Baishampayan Ghose
          Infinitely 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 first 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
   Slides on - http://bit.ly/gnunify-clojure

  Infinitely Beta is recruiting smart hackers!
         http://infinitelybeta.com/jobs/




                    CC BY SA


                                                31 / 31

Contenu connexe

Similaire à Introduction to Clojure

Introductory Clojure Presentation
Introductory Clojure PresentationIntroductory Clojure Presentation
Introductory Clojure PresentationJay Victoria
 
I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?sbjug
 
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...Vincenzo Barone
 
Clojure and The Robot Apocalypse
Clojure and The Robot ApocalypseClojure and The Robot Apocalypse
Clojure and The Robot Apocalypseelliando dias
 
Why Functional Programming and Clojure - LightningTalk
Why Functional Programming and Clojure - LightningTalkWhy Functional Programming and Clojure - LightningTalk
Why Functional Programming and Clojure - LightningTalkJakub Holy
 
Neo4j - 7 databases in 7 weeks
Neo4j - 7 databases in 7 weeksNeo4j - 7 databases in 7 weeks
Neo4j - 7 databases in 7 weeksLandier Nicolas
 
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...Codemotion
 
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben EvansJava Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben EvansJAX London
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersKostas Saidis
 
Multithreading in Scala
Multithreading in Scala Multithreading in Scala
Multithreading in Scala Knoldus Inc.
 
Clojure - A practical LISP for the JVM
Clojure - A practical LISP for the JVMClojure - A practical LISP for the JVM
Clojure - A practical LISP for the JVMMatthias Nüßler
 
TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...
TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...
TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...tdc-globalcode
 
Cats And Dogs Living Together: Langsec Is Also About Usability
Cats And Dogs Living Together: Langsec Is Also About UsabilityCats And Dogs Living Together: Langsec Is Also About Usability
Cats And Dogs Living Together: Langsec Is Also About UsabilityMeredith Patterson
 
Apache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemApache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemKostas Saidis
 
The *on-going* future of Perl5
The *on-going* future of Perl5The *on-going* future of Perl5
The *on-going* future of Perl5Vytautas Dauksa
 
Modeling with petri nets
Modeling with petri netsModeling with petri nets
Modeling with petri netsMohammed Assiri
 

Similaire à Introduction to Clojure (20)

Introductory Clojure Presentation
Introductory Clojure PresentationIntroductory Clojure Presentation
Introductory Clojure Presentation
 
Clojure
ClojureClojure
Clojure
 
I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?
 
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
 
Programming with Freedom & Joy
Programming with Freedom & JoyProgramming with Freedom & Joy
Programming with Freedom & Joy
 
Clojure and The Robot Apocalypse
Clojure and The Robot ApocalypseClojure and The Robot Apocalypse
Clojure and The Robot Apocalypse
 
Why Functional Programming and Clojure - LightningTalk
Why Functional Programming and Clojure - LightningTalkWhy Functional Programming and Clojure - LightningTalk
Why Functional Programming and Clojure - LightningTalk
 
Neo4j - 7 databases in 7 weeks
Neo4j - 7 databases in 7 weeksNeo4j - 7 databases in 7 weeks
Neo4j - 7 databases in 7 weeks
 
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
Mario Fusco - Comparing different concurrency models on the JVM | Codemotion ...
 
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben EvansJava Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
Java Core | Modern Java Concurrency | Martijn Verburg & Ben Evans
 
Seeking Clojure
Seeking ClojureSeeking Clojure
Seeking Clojure
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java Developers
 
Clojure Small Intro
Clojure Small IntroClojure Small Intro
Clojure Small Intro
 
Multithreading in Scala
Multithreading in Scala Multithreading in Scala
Multithreading in Scala
 
Clojure - A practical LISP for the JVM
Clojure - A practical LISP for the JVMClojure - A practical LISP for the JVM
Clojure - A practical LISP for the JVM
 
TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...
TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...
TDC2016POA | Trilha Programacao Funcional - Considere usar Clojure/ClojureScr...
 
Cats And Dogs Living Together: Langsec Is Also About Usability
Cats And Dogs Living Together: Langsec Is Also About UsabilityCats And Dogs Living Together: Langsec Is Also About Usability
Cats And Dogs Living Together: Langsec Is Also About Usability
 
Apache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystemApache Groovy: the language and the ecosystem
Apache Groovy: the language and the ecosystem
 
The *on-going* future of Perl5
The *on-going* future of Perl5The *on-going* future of Perl5
The *on-going* future of Perl5
 
Modeling with petri nets
Modeling with petri netsModeling with petri nets
Modeling with petri nets
 

Dernier

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 

Dernier (20)

Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 

Introduction to Clojure

  • 1. Functional Programming on the JVM using Clojure Baishampayan Ghose Infinitely 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 first 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 Slides on - http://bit.ly/gnunify-clojure Infinitely Beta is recruiting smart hackers! http://infinitelybeta.com/jobs/ CC BY SA 31 / 31