Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
The Clojure
Programming
Language
CS571ProgrammingLanguages
Brian Gracin
Jenny Pawlak
Jacquelyn S Victoria
90 Second Overview…..
Clojure is…..
- A dialect of Lisp
- General purpose language
- Emphasizes functional programming
- R...
https://gooroo.io/GoorooTHINK/Article/16300/Programming-languages--salaries-and-demand-May-2015
Background
Simplicity
“We suffer from so much incidental complexity in traditional OO languages, both
syntactic and semantic, that I ...
Clojure’s Influences
Why Lisp?
● Entire Language:
○ 7 functions
○ 2 labels
Why JVM?
● Familiar - run just like Java apps
● Use some familiar Java objects
● Many available libraries
● Established tr...
What are Clojure’s Characteristics?
● Functional - succinct, understandable, reusable
● Defaults to Immutability
○ Simplif...
Examples
Homoiconicity
Code written in the language is encoded as
data structures that the language has tools to
manipulat...
LISP
Java
functional
Java’s
Librariesiteration
interfaces
Immutable
datatypes
Lazy
evaluation
Clojure
Core
Truthiness
What is truthy?
● true
● 1
● (= 1 1)
● 0
● “False”
● []
● Literally any value but false or nil
What is falsey?
...
Clojure Data Structures
● They are immutable by default
● Support metadata
● Implement java.lang.Iterable
● Implement the ...
Data Collection Types - Part 1
Lists
Singly linked lists
First item in calling position
Heterogeneous elements
Compare to ...
Data Collection Types - Part 2
Maps
Maps store unique keys and one value per
key (dictionaries and hashes)
Two types:
1. H...
Some Mutable Data Structures!
Atoms
Managed shared synchronous independent
state
Refs
Transaction references
Safe shared u...
MUTABLE DATA Type Comparison
Functions
First Class
Created on demand
Stored in a data structure
Passed as an argument
Returned as a value
Higher-Order
...
Examples
Quick Comparison
Haskell:
average numbers = (fold (+) (numbers) ) / (length(numbers))
Clojure:
(defn average [numbers] (/ ...
Quick Comparison
Haskell:
fact x = if x == 0 then 1 else x * fact(x-1)
Clojure:
(defn factorial [n] (if (= n 0) 1 (* n (fa...
Code example
https://rosettacode.org/wiki/Palindrome_detection#Clojure
Intermediate
Higher-Order Functions
Map
>(map * [1 2 3 4] [5 6 7 8])
(5 12 21 32)
Reduce
>(reduce max [0 -3 10 48])
48
Comp
((comp str ...
Anonymous Functions
Fn
>(map (fn [x] (* x x)) (range 1 10))
(1 4 9 16 25 36 49 64 81)
Macros
(defmacro infix
[infixed]
(list (second infixed)
(first infixed)
(last infixed)))
>(1 + 2)
error
>(infix (1 + 2))
3
Java Interop
Accessing member functions
>(.toUpperCase "fred")
"FRED"
>(Math/pow 2 4)
16
( proxy [class-and-interfaces] [a...
Concurrency
Doseq
Do over a sequence
Dosync
Do all or nothing
Future
Generate a thread
Delay
Bind function but don’t evalu...
Uses
Clojure Shortcomings:
● Dynamic type checking
● Doesn’t scale well: code size, team size, time elapsed
● Startup time
● If...
Clojure in Industry
Clojure in Industry
The Boeing 737 MAX Onboard Maintenance Function is 32,000 lines of Clojure.
First time Clojure used in...
When to choose Clojure?
Handle large amounts of data with significant hardware limitations.
When you want more concise cod...
Clojure developers are the
happiest developers
From an analysis of Reddit comments,
http://www.itworld.com/article/2693998...
Online Resources/Tutorials
Clojure.org
Clojuredocs.org
Clojure-doc.org
Clojure-by-example
ClojureTV (Youtube channel)
Cloj...
Further Info
The Joy of Clojure
Book by Chris Houser and Michael Fogus
Clojure Programming
Book by By Chas Emerick, Brian ...
Prochain SlideShare
Chargement dans…5
×

Introductory Clojure Presentation

400 vues

Publié le

Jenny Pawlak, Brian Gracin and myself performed an optional presentation on the language Clojure for our Programming Languages class. This is meant to be an introduction to the language to those who already know about functional languages, particularly Haskell.

Publié dans : Logiciels
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Introductory Clojure Presentation

  1. 1. The Clojure Programming Language CS571ProgrammingLanguages Brian Gracin Jenny Pawlak Jacquelyn S Victoria
  2. 2. 90 Second Overview….. Clojure is….. - A dialect of Lisp - General purpose language - Emphasizes functional programming - Runs on the Java Virtual Machine - Designed for Concurrency - Used in industry -- CapitalOne, Amazon, Facebook, Oracle
  3. 3. https://gooroo.io/GoorooTHINK/Article/16300/Programming-languages--salaries-and-demand-May-2015
  4. 4. Background
  5. 5. Simplicity “We suffer from so much incidental complexity in traditional OO languages, both syntactic and semantic, that I don’t think we even realise it anymore. I wanted to make ‘doing the right thing’ not a matter of convention and discipline, but the default. I wanted a solid concurrency story and great interoperability with existing Java libraries,.” -Rich Hickey, creator of Clojure Rich Hickey, Clojure, Benevolent Dictator for Life CLOJURE: - First Available: 2007 - Latest Stable Release: 1.8 January 19, 2016
  6. 6. Clojure’s Influences
  7. 7. Why Lisp? ● Entire Language: ○ 7 functions ○ 2 labels
  8. 8. Why JVM? ● Familiar - run just like Java apps ● Use some familiar Java objects ● Many available libraries ● Established track record ● Now open-sourced. http://www.braveclojure.com/java/ (Chapter 12) clojure.org/about/rationale
  9. 9. What are Clojure’s Characteristics? ● Functional - succinct, understandable, reusable ● Defaults to Immutability ○ Simplifies reasoning and testing ○ Easier to share objects ○ Thread safe ● but allows mutability! ● Code-as-Data (Homoiconicity) ● Syntactic Abstraction Immutable objects are always thread safe. —Brian Goetz, Java Concurrency in Practice The Joy of Clojure Chapter 6.
  10. 10. Examples Homoiconicity Code written in the language is encoded as data structures that the language has tools to manipulate Syntatic Abstraction Permits the definition of new language constructs whose meaning can be understood in terms of static translation into the core language.As Data: As Code.
  11. 11. LISP Java functional Java’s Librariesiteration interfaces Immutable datatypes Lazy evaluation Clojure
  12. 12. Core
  13. 13. Truthiness What is truthy? ● true ● 1 ● (= 1 1) ● 0 ● “False” ● [] ● Literally any value but false or nil What is falsey? ● false ● nil ● (= 3 1) Nil Punning: Handling Clojure’s empty sequences that are Truthy Every[thing] is "true" all the time, unless it is nil or false. —Brian Goetz, The Joy of Clojure
  14. 14. Clojure Data Structures ● They are immutable by default ● Support metadata ● Implement java.lang.Iterable ● Implement the read-only part of java.util.Collection http://clojure.org/reference/data_structures
  15. 15. Data Collection Types - Part 1 Lists Singly linked lists First item in calling position Heterogeneous elements Compare to Haskell: Homogeneous lists Vectors Simply evaluate each item in order. Quick look-up times Heterogeneous elements No calling position
  16. 16. Data Collection Types - Part 2 Maps Maps store unique keys and one value per key (dictionaries and hashes) Two types: 1. Hashed: key has hashCode, equals 2. Sorted: implement Comparable Sets Store zero or more unique items
  17. 17. Some Mutable Data Structures! Atoms Managed shared synchronous independent state Refs Transaction references Safe shared use of mutable storage Require SW transactional memory system Agents Independent, asynchronous change of individual locations Only allow change due to an action Var Mutable storage location Can be dynamically rebound per thread Ensure safety through thread isolation
  18. 18. MUTABLE DATA Type Comparison
  19. 19. Functions First Class Created on demand Stored in a data structure Passed as an argument Returned as a value Higher-Order Takes one or more function args Returns function as result Pure Functions ALWAYS return same result No observable side effects (defn [arg1 arg2] (;function code )) def or defn? ● Both bind a symbol or name ● def is only evaluated once ● defn is evaluated every time it is called
  20. 20. Examples
  21. 21. Quick Comparison Haskell: average numbers = (fold (+) (numbers) ) / (length(numbers)) Clojure: (defn average [numbers] (/ (reduce + numbers) (count numbers)))
  22. 22. Quick Comparison Haskell: fact x = if x == 0 then 1 else x * fact(x-1) Clojure: (defn factorial [n] (if (= n 0) 1 (* n (factorial (dec n)))))
  23. 23. Code example https://rosettacode.org/wiki/Palindrome_detection#Clojure
  24. 24. Intermediate
  25. 25. Higher-Order Functions Map >(map * [1 2 3 4] [5 6 7 8]) (5 12 21 32) Reduce >(reduce max [0 -3 10 48]) 48 Comp ((comp str - +) 4 5) is equivalent to (str ( - ( + 4 5))) Partial (defn add10 (partial + 10)) >(add10 3) 13 >(add10 3 4 8) 25
  26. 26. Anonymous Functions Fn >(map (fn [x] (* x x)) (range 1 10)) (1 4 9 16 25 36 49 64 81)
  27. 27. Macros (defmacro infix [infixed] (list (second infixed) (first infixed) (last infixed))) >(1 + 2) error >(infix (1 + 2)) 3
  28. 28. Java Interop Accessing member functions >(.toUpperCase "fred") "FRED" >(Math/pow 2 4) 16 ( proxy [class-and-interfaces] [args] fs+)
  29. 29. Concurrency Doseq Do over a sequence Dosync Do all or nothing Future Generate a thread Delay Bind function but don’t evaluate Promise Create a binding with no value
  30. 30. Uses
  31. 31. Clojure Shortcomings: ● Dynamic type checking ● Doesn’t scale well: code size, team size, time elapsed ● Startup time ● If JVM is not a good solution, then Clojure isn’t either ○ Systems programming limitations ○ Real-Time http://martintrojer.github.io/beyond-clojure/2016/04/19/beyond-clojure-prelude https://www.quora.com/What-is-clojure-bad-at
  32. 32. Clojure in Industry
  33. 33. Clojure in Industry The Boeing 737 MAX Onboard Maintenance Function is 32,000 lines of Clojure. First time Clojure used in aircraft software. One of the largest code bases to date.
  34. 34. When to choose Clojure? Handle large amounts of data with significant hardware limitations. When you want more concise code, easier to test and debug. Easier to get over 90% coverage with unit testing. When JVM or CLR can be used.
  35. 35. Clojure developers are the happiest developers From an analysis of Reddit comments, http://www.itworld.com/article/2693998/big-data/clojure- developers-are-the-happiest-developers.html
  36. 36. Online Resources/Tutorials Clojure.org Clojuredocs.org Clojure-doc.org Clojure-by-example ClojureTV (Youtube channel) Clojure for the Brave and True
  37. 37. Further Info The Joy of Clojure Book by Chris Houser and Michael Fogus Clojure Programming Book by By Chas Emerick, Brian Carper, Christophe Grand Simple Made Easy Video by Rich Hickey

×