Clojure - Why does it matter?

31
Clojure Why does it matter? @friemens

description

An introduction to Clojure at why you should take a closer look.

Transcript of Clojure - Why does it matter?

Page 1: Clojure - Why does it matter?

ClojureWhy does it matter?

@friemens

Page 2: Clojure - Why does it matter?

● Published 2008 by Rich Hickey.

● Dynamically typed.

● Compiles to bytecode.

A pragmatic Lisp for the JVM

Page 3: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 4: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 5: Clojure - Why does it matter?

Few ubiquitous data structures and powerful core library.

Simple Complicated

Data encapsulated behind specific APIs of OO classes.

Immutable data. Mutable class instances & synchronization.

Embedded „code generators“.

External DSL tooling.

Pure functions. Side effects & dependence on context.

Page 6: Clojure - Why does it matter?

Design is deconstruction

Small libraries,no big frameworks!

HTTPserver

Middle-warefunctions

Routingfunction

Handlerfunctions

Page renderer

Page 7: Clojure - Why does it matter?

Deconstructing the database

DatomicA modular, facts-baseddatabase system.

Storage service

TransactorQuery Cache

Peer library

Application

Database

Page 8: Clojure - Why does it matter?

State and Identity

OO style (conflated) Clojure style (separated)

Page 9: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 10: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 11: Clojure - Why does it matter?

Huh? Lisp?

Lisp!

Other Languages

Time

Expressive Power

Page 12: Clojure - Why does it matter?

The elegance of Lisp

Page 13: Clojure - Why does it matter?

http://xkcd.com/297

Page 14: Clojure - Why does it matter?

Functional programming

Functions as values

Powerful data structures

„[...] a unit tester's wet dream.“

No assignments

Laziness

Page 15: Clojure - Why does it matter?

Example: Square root approximation

gn+1 := (n/gn + gn) / 2

Page 16: Clojure - Why does it matter?

Concise code

public <K,V> Map<V, K> revertKeysVals(Map<K, V> src) { final Map<V, K> dst = new HashMap<V, K>(); for (Map.Entry<K, V> e : src.entrySet()) { dst.put(e.getValue(), e.getKey()); } return dst;}

(defn revert-kv [m] (->> m (map (juxt second first)) (into {})))

Page 17: Clojure - Why does it matter?

Prefer purity

Pure functions

Side effects

Context

Page 18: Clojure - Why does it matter?

Code is data, or: why does Lisp look different?

Code

Data

Page 19: Clojure - Why does it matter?

Common How it could be

Buildconfig

DSL grammar

Settings

Serialization

XML

Xtext

.properties

JSON

Debugoutput

Anything

EDN

EDN

EDN

EDN

EDN

Clojure is a superset of Extensible Data Notation

Page 20: Clojure - Why does it matter?

A powerful language allows for simpler tools

Page 21: Clojure - Why does it matter?

Interactive development

Demo

Page 22: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 23: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 24: Clojure - Why does it matter?

Persistent datastructures

0 1 2 3 4 5 6 6 7 8 9

10

7

Page 25: Clojure - Why does it matter?

Concurrency support

Actor style:Pulsar librarySoftware

TransactionalMemory CSP style:

core.async library

Widely used:Synchronization and LockingJava

Clojure

Page 26: Clojure - Why does it matter?

Advanced libraries

core.logic

core.async

core.typed

core.reducers

Datomic

map + fold parallelized

Logic programming

CSP style programming

Optional type system

Facts-based database

Page 27: Clojure - Why does it matter?

Internal DSLs just happen

HTTP routing

UI form description

Data access

Page 28: Clojure - Why does it matter?

Full stack Clojure

Browser

App Server

Database

ClojureScript

Clojure

Datomic

Page 29: Clojure - Why does it matter?

&Simplicity

Advanced stuff

Lisp

Deconstruction

Page 30: Clojure - Why does it matter?

Advanced thinking

Expressive power

Fosters dev skills

Advanced concurrency support

Perfect for unit testing

What's in for you?

Concise data manipulation

Interactive programming

Page 31: Clojure - Why does it matter?

Thank you. Questions?

@friemens www.itemis.de