why clojure

Post on 06-May-2015

1.626 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Talk on why clojure was created. This talk was given at the first belgian clojure meetup 27th of march 2013 in mechelen. Read the debriefing of this meetup: https://tgoossens.wordpress.com/2013/04/04/first-belgian-clojure-meetup-debriefing/

TRANSCRIPT

Why Clojure?

Why Clojure?

Why was it created?

What do we mean with complexity?

How does clojure makes things more simple?

When was Clojure

● 2007: introduction by Rich Hickey

● 2009: version 1.0

....

● 2013: version 1.5

What is Clojure

● A Lisp

● for Functional Programming

● Running on the JVM, CLR and browsers

● Designed for concurrency

A Lisp

Many concepts of Lisps are taken over by other languages:● Conditionals● First-class functions● Recursion● Garbage collection● Programs made up out of expressions

Functional Programming

● Provides a way out of the multi-core conundrum

● Makes programs simpler by decomplecting them.

Running on the JVM, CLR, browser

● JVM / CLR have huge benefits:○ Libraries○ Memory and resource management○ Efficient and robust

● JavaScript has a huge reach:○ It's the most widely deployed language○ Through ClojureScript, we can target everywhere

JavaScript runs.● Clojure is symbiotic with its host platform.

Designed for Concurrency

● Machines are not getting faster, they just have more cores.

● Shared access to mutable state makes multi-core programming a nightmare.

● Immutability makes many of the problems go away.

● Separating identity and state can solve all the other problems.

Why is Clojure

● Reducing complexity

● to be easy? not exactly...

What do we mean with

● Complex

● Simple

● Hard

● Easy

Complexity

To Complectbe interwoven or interconnected

Complex

Consisting of many different and connected parts.

Complexity

Complex

Simple

How I/we made things complex

● Teamwork ● Robots

○ Explore unknown maze

○ Detect barcodes --> action

○ Travel over seesaw

● How to test?○ We couldn't

● Unmanageable complexity

Complexity

Simple Easy

Complexity

HardComplex

Simple Easy

HardComplex

Simple Easy

ComplexityObjective Subjective

"Elegance and familiarity are orthogonal." — Rich Hickey

Types of Complexity

● Essential Complexity

● Accidental Complexity

Examples of complexity

● State

● Inheritance

● Objects ○ state○ identity○ value

● Memory management● Variables

Why does simple matter?

● Formal reasoning○ can be hard

● Extendability○ Composing

● Testability○ isolation

How is Clojure simple(r)

● Functional Programming○ Pure functions

● Immutable data structures

● Thinking with data

● Decomplecting state / value / identity

Immutability

● Numbers are immutable in your language

● If you use Java, Strings are immutable

● Imagine if they're not!

Immutable building blocks

● Primitives: numbers, strings

● Collections: lists, vectors, strings, maps, sets

● "Changing" a collection creates an (efficient) copy. (think: Git)

● Don't worry about state

Thinking with data

● data is simple

● Why wrap it in classes

"It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures." — Alan Perlis

Thinking with data

● data is simple

● Clojure map

Thinking with data

; Get the first name(get-in person [:name :first-name])

; Get all birth dates from a list of persons.(map :birthdate people)

Identity/state/value model

● Object Oriented Approach

SpaceShip

- name- x- y- velocity

ship1

Memory

● Object Oriented Approach

● Problems○ Stable value

○ history (snapshot)

○ Concurrent modification

Identity/state/value model

● Spaceship○ position

■ x,y■ Position object

○ velocity■ MovementState

Stable value

● Spaceship○ position

■ x,y■ Position object

○ velocity■ MovementState

○ ...

○ Consistent and stable object!

Stable value

● Spaceship○ position

■ x,y■ Position object

○ velocity■ MovementState

○ ...

○ Consistent and stable object! NO!

Stable value

Stable value

● Creating the object

● Not consistent

● Object Oriented Approach

● Problems○ Stable value

○ history (snapshot)

○ Concurrent modification

Identity/state/value model

Snapshot & history

● Take a picture

● Look later at it again.

● Object Oriented Approach

● Problems○ Stable value

○ history (snapshot)

○ Concurrent modification

Identity/state/value model

Concurrent modification

● Guarantee consistency?

● Stop the world!

Clojure approach

● Remove ambiguity of definitions○ value○ state○ identity

Identity/state/value model

● Value○ fixed: 42 , "answer"

● Identity○ series of different values over time

Me, a car,

● State○ Value of an identity at a certain point in time

Identity/state/value model

● OOP○ complects state and identity

● Clojure○ Separation value / state / identity

○ Perception becomes possible

○ Consistency management trivial

Clojure reference model

:name Heart Of Gold:position (0,0) :velocity 100 km/s

ship1

Value

Ref

Clojure reference model

:name Heart Of Gold:position (0,0) :velocity 100 km/s

ship1

Value

Ref

:name Heart Of Gold:position (100,100):velocity 100 km/s

Value

Clojure reference model

:name Heart Of Gold:position (0,0) :velocity 100 km/s

ship1

Value

Ref

:name Heart Of Gold:position (100,100) :velocity 100 km/s

Value

Clojure reference model

● Perception without stopping the world

● Atomic updates○ Transactions

Why Clojure?

Simplicity

Expressiveness

Concurrency

Why Clojure?Are we there yet?

http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

Simple made easyhttp://www.infoq.com/presentations/Simple-Made-Easy

Out of The Tarpithttp://shaffner.us/cs/papers/tarpit.pdf

Why Clojure?

?

top related