Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Not Everything is an Object        By Gary Short      Gibraltar Software
What this Session is not…• OO hating• Deep dive of Clojure• If you’ve written a Clojure App, you’ll probably  not learn an...
What this Session is…• Point out why OO dev is hard sometimes• Show you that there is an alternative• “It shouldn’t be thi...
Introduction• Gary Short• Head of Gibraltar Labs  – “Skunk Works” division of Gibraltar Software• MVP C#  – Python  – Node...
The Road to Herehttp://www.flickr.com/photos/fyngyrz/
Ada Lovelace• 1842 - 1843 Lovelace translated a memoir of  an Italian mathematician on Charles Baggage’s  newest proposed ...
The 1940s• Then in the 1940’s along comes the first  recognisable computers and we get  programming languages to go with t...
The 1950s• In the 1950s the first three modern programming  languages whose descendants are still in  widespread use today...
More 1950s•   1951 - Regional Assembly Language•   1952 - Autocode•   1954 - FORTRAN•   1954 - IPL (forerunner to LISP)•  ...
The 1960s•   1962 - APL•   1962 - Simula•   1964 - BASIC•   1964 - PL/I
The 1970s•   1970 - Pascal•   1970 - Forth•   1972 - C•   1972 - Smalltalk•   1972 - Prolog•   1973 - ML•   1975 - Scheme•...
The 1980s•   1983 - Ada•   1983 - C++•   1985 - Eiffel•   1986 - Erlang•   1987 - Perl•   1989 - FL
The 1990s•   1990 - Haskell•   1991 - Python•   1991 - Java•   1993 - Ruby•   1993 - Lua•   1994 - ANSI Common Lisp•   199...
Where we are Now http://www.flickr.com/photos/gtarded/
What OOP/D is Good For   http://www.flickr.com/photos/gserafini/
What is it Not Good For?  http://www.flickr.com/photos/aloshbennett/
Also, we really suck at OOM…
Also hierarchies are brittle…
Also, OOPs get complex real fast…
The Solution
What Does it Mean to be Functional?•   First order functions•   Function like constructs•   Stateless•   Immutable data
Clojure• A Lisp                 •   JVM• Dynamic                •   Java Interop• Functional             •   Fast   – Impu...
Introduction to Clojure•   Java.Lang.Object•   Arbitrary sized numbers•   Ratios: 18/20•   Nil is null and is treated as f...
Persistent Collections• Immutable  – Cheap to copy• Examples  – (1 2 3)     • List – sequential lookup time  – [1 2 3]    ...
Equality Vs Identity• Equality  – Two objects are equal     • Two cylinders maybe equal if their volumes are equal  – Iden...
Clojure is Impure so has Mutability• Var    – Mutable pointer to immutable data        • You can’t change the data        ...
The Reader• Other programming languages  – Compiler     • Text -> lexing and parsing -> AST• Clojure  – The Reader     • T...
The Evaluator• Compile Phase  – Traverses the data     • Symbol evaluation         – Symbols evaluate into Vars           ...
Special Forms• Reserved symbol   – Denotes special list evaluation      • Not a function call – it’s “something else”• Def...
Let’s Talk About the ‘crazy’ Syntax         (prn “Hello World!”)
Maybe it’s not so CrazyConsole.WriteLine(“Hello World”)
Looping
Tail Recursionhttp://www.flickr.com/photos/43911015@N05
Questions• gary.short@gibraltarsoftware.com• @garyshort• Facebook.com/theOtherGaryShort                                   ...
Próxima SlideShare
Cargando en…5
×

Not Everything is an Object - Rocksolid Tour 2013

727 visualizaciones

Publicado el

  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Not Everything is an Object - Rocksolid Tour 2013

  1. 1. Not Everything is an Object By Gary Short Gibraltar Software
  2. 2. What this Session is not…• OO hating• Deep dive of Clojure• If you’ve written a Clojure App, you’ll probably not learn anything.
  3. 3. What this Session is…• Point out why OO dev is hard sometimes• Show you that there is an alternative• “It shouldn’t be this hard”.
  4. 4. Introduction• Gary Short• Head of Gibraltar Labs – “Skunk Works” division of Gibraltar Software• MVP C# – Python – NodeJS• gary.short@gibraltarsoftware.com• @garyshort• Facebook.com/theOtherGaryShort 4
  5. 5. The Road to Herehttp://www.flickr.com/photos/fyngyrz/
  6. 6. Ada Lovelace• 1842 - 1843 Lovelace translated a memoir of an Italian mathematician on Charles Baggage’s newest proposed machine... the Analytical Engine. The article she wrote contained the entire specification of how to calculate Bernoulli numbers with the Engine. This is believed to be the first ever computer program.
  7. 7. The 1940s• Then in the 1940’s along comes the first recognisable computers and we get programming languages to go with them...• 1943 - Plankalkül (Konrad Zuse)• 1943 - Colossus• 1949 - C-10
  8. 8. The 1950s• In the 1950s the first three modern programming languages whose descendants are still in widespread use today were designed:• FORTRAN (1955), the "FORmula TRANslator", invented by John Backus et al.;• LISP, the "LISt Processor", invented by John McCarthy et al.;• COBOL, the COmmon Business Oriented Language, created by the Short Range Committee, heavily influenced by Grace Hopper.
  9. 9. More 1950s• 1951 - Regional Assembly Language• 1952 - Autocode• 1954 - FORTRAN• 1954 - IPL (forerunner to LISP)• 1955 - FLOW-MATIC (forerunner to COBOL)• 1957 - COMTRAN (forerunner to COBOL)• 1958 - LISP• 1958 - ALGOL 58• 1959 - FACT (forerunner to COBOL)• 1959 - COBOL
  10. 10. The 1960s• 1962 - APL• 1962 - Simula• 1964 - BASIC• 1964 - PL/I
  11. 11. The 1970s• 1970 - Pascal• 1970 - Forth• 1972 - C• 1972 - Smalltalk• 1972 - Prolog• 1973 - ML• 1975 - Scheme• 1978 - SQL
  12. 12. The 1980s• 1983 - Ada• 1983 - C++• 1985 - Eiffel• 1986 - Erlang• 1987 - Perl• 1989 - FL
  13. 13. The 1990s• 1990 - Haskell• 1991 - Python• 1991 - Java• 1993 - Ruby• 1993 - Lua• 1994 - ANSI Common Lisp• 1995 - JavaScript• 1995 - PHP• 1997 - Rebol
  14. 14. Where we are Now http://www.flickr.com/photos/gtarded/
  15. 15. What OOP/D is Good For http://www.flickr.com/photos/gserafini/
  16. 16. What is it Not Good For? http://www.flickr.com/photos/aloshbennett/
  17. 17. Also, we really suck at OOM…
  18. 18. Also hierarchies are brittle…
  19. 19. Also, OOPs get complex real fast…
  20. 20. The Solution
  21. 21. What Does it Mean to be Functional?• First order functions• Function like constructs• Stateless• Immutable data
  22. 22. Clojure• A Lisp • JVM• Dynamic • Java Interop• Functional • Fast – Impure • Persistent collections• “Lockless” Concurrency • Easy to learn.• Macros
  23. 23. Introduction to Clojure• Java.Lang.Object• Arbitrary sized numbers• Ratios: 18/20• Nil is null and is treated as false
  24. 24. Persistent Collections• Immutable – Cheap to copy• Examples – (1 2 3) • List – sequential lookup time – [1 2 3] • Vector – logarithmic lookup time – {“key” 1, 3 7, “foo” “bar”} • Hashmap – unordered, key value pairs
  25. 25. Equality Vs Identity• Equality – Two objects are equal • Two cylinders maybe equal if their volumes are equal – Identity • Two pointers to the same object – Clojure favours equality :-O
  26. 26. Clojure is Impure so has Mutability• Var – Mutable pointer to immutable data • You can’t change the data • But you can change what data the var points to• But vars hold global data, function defs etc .• This data won’t change• So why are vars mutable?• So we can patch running software. 
  27. 27. The Reader• Other programming languages – Compiler • Text -> lexing and parsing -> AST• Clojure – The Reader • Text -> lexing and parsing -> Literals (Data) • As soon as it reads a complete literal it’s passed to...
  28. 28. The Evaluator• Compile Phase – Traverses the data • Symbol evaluation – Symbols evaluate into Vars » Symbol Dog evaluates to a var in the current namespace » Symbol MyPets/Dog evaluates to var in namespace MyPets • List evaluation – Lists evaluate into function calls » (+ 1 2 3) • Process macros – Execute phase • Effects the special forms • Calls functions.
  29. 29. Special Forms• Reserved symbol – Denotes special list evaluation • Not a function call – it’s “something else”• Def, if, do, let, quote, var, fn, loop, recur, throw, tr y, ., new, set!• If a list starts with any of those it’s evaluated in a special way particular to that form• (if condition a b?)• (if (been_drinking) (hungover) (happy))• (if (have_beers) (drink))
  30. 30. Let’s Talk About the ‘crazy’ Syntax (prn “Hello World!”)
  31. 31. Maybe it’s not so CrazyConsole.WriteLine(“Hello World”)
  32. 32. Looping
  33. 33. Tail Recursionhttp://www.flickr.com/photos/43911015@N05
  34. 34. Questions• gary.short@gibraltarsoftware.com• @garyshort• Facebook.com/theOtherGaryShort 34

×