35
GOING SWIFTLY FUNCTIONAL PUSHKAR N KULKARNI, IBM RUNTIMES @pushkar_nk pushkarnk

Going Swiftly Functional

Embed Size (px)

Citation preview

Page 1: Going Swiftly Functional

GOING SWIFTLY FUNCTIONAL

PUSHKAR N KULKARNI, IBM RUNTIMES

@pushkar_nk

pushkarnk

Page 2: Going Swiftly Functional

RECIPE

• INTRODUCTIONS• CLOSURES• MAP, FILTER, REDUCE, LAZY• CURRYING• PATTERN MATCHING• PURE FUNCTIONS, MEMOIZATION• FUNCTORS, APPLICATIVES, MONADS*

Page 3: Going Swiftly Functional

INTRODUCTIONS

• ABOUT ME• FUNCTIONAL PROGRAMMING• SWIFT

Page 4: Going Swiftly Functional

ABOUT ME

• WHO AM I ?• WHAT DO I DO ?• WHY AND HOW AM I HERE ?

Page 5: Going Swiftly Functional

WHAT WE DO @ IBM RUNTIMES

• J9 JAVA RUNTIME – OPEN SOURCE NOW• OPEN MANAGED RUNTIME (OMR) – GC AND JIT SERVICES• OPENJDK• NODE.JS & EXPRESS.JS• SWIFT FOUNDATION LIBRARIES AND DISPATCH*• KITURA – A WEBSERVICES FRAMEWORK FOR SWIFT*

Page 6: Going Swiftly Functional

THE BEGINNING OF ALL CREATION

Page 7: Going Swiftly Functional

FUNCTIONAL PROGRAMMINGTHE FOREFATHERS

CHURCH TURING*KLEENE

Page 8: Going Swiftly Functional

FUNCTIONAL PROGRAMMING

• MATHEMATICAL APPROACH: LAMBDA CALCULUS, CATEGORY THEORY

• VIS-À-VIS IMPERATIVE PROGRAMMING – PRAGMATIC APPROACH

Page 9: Going Swiftly Functional

EARLY ADOPTERS

• LISP – ALMOST THE SAME TIME AS FORTRAN• ML – INSPIRED F#, OCAML• MIRANDA – INSPIRED HASKELL • ERLANG• HASKELL – PURELY FUNCTIONAL• OCAML

Page 10: Going Swiftly Functional

… THEN ON THE JVM

• GROOVY• SCALA• CLOJURE• JAVA 8

Page 11: Going Swiftly Functional

MOVING AWAY FROM VIRTUAL MACHINES

• GO• RUST• SWIFT

Page 12: Going Swiftly Functional

MODERN NATIVE LANGUAGES

• FAST• SAFE• EXPRESSIVE

Page 13: Going Swiftly Functional

SWIFT

CHRIS LATTNER

Page 14: Going Swiftly Functional

SWIFT – A MODERN NATIVE LANGUAGE

• EXPECTED TO EVENTUALLY REPLACE OBJ-C• OPEN SOURCED IN DEC 2015 – SWIFT.ORG• INITIALLY RESTRICTED TO APPLE PLATFORMS, NOW

AVAILABLE ON LINUX• MULTI-PARADIGM, BORROWS HEAVILY• STATIC, INFERRED TYPING

Page 15: Going Swiftly Functional

SWIFT - MY PERCEPTION

• VERY INTUITIVE• BEAUTIFUL• GOOD COMPILE-TIME SAFETY • DECENT FP ASPECTS• MEMORY MANAGEMENT CAN BE PAINFUL AT TIMES

Page 16: Going Swiftly Functional

GOALS FOR THE NEXT 80 MIN

• APPRECIATE SOME GENERAL FUNCTIONAL CONCEPTS• START PLAYING AROUND WITH SWIFT’S FUNCTIONAL

CONSTRUCTS• SOLVE SIMPLE PROBLEMS• TRY APPRECIATING FUNCTORS, APPLICATIVES, MONADS

Page 17: Going Swiftly Functional

TOOLS

• DON’T HAVE A MAC? GOOGLE FOR “IBM SWIFT SANDBOX”• UBUNTU AND CLI FAN? VISIT DOWNLOADS PAGE ON

SWIFT.ORG• HAVE A MAC? XCODE PLAYGROUND

Page 18: Going Swiftly Functional

LET’S GET STARTED …

• LEARNING ONE CONCEPT AT A TIME• EXAMPLES ARE HIGHLY CONTRIVED AND ACADEMIC• CAN’T DO WITHOUT PRIME NUMBERS AND FIBONACCI

Page 19: Going Swiftly Functional

CLOSURES

• UNNAMED BLOCKS OF CODE THAT CAN BE PASSED AROUND• THEY CAPTURE THE CONTEXT – ALL “VALUES” IN SCOPE• MAJOR USE-CASE - ASYNCHRONOUS PROGRAMMING

Page 20: Going Swiftly Functional

CLOSURES

• BASIC SYNTAX, TYPE INFERENCE, IMPLICIT RETURN• SHORTHAND ARGUMENT NAMES, OPERATOR METHODS• TRAILING CLOSURES• EXAMPLE: A GENERIC BINARY OPERATOR

Page 21: Going Swiftly Functional

HIGHER ORDER FUNCTIONS

• HIGHER ORDER FUNCTION - A FUNCTION THAT TAKES A FUNCTION AS AN ARGUMENT OR RETURNS A FUNCTION

• INTEGRALS AND DERIVATIVES ARE HIGHER ORDER FUNCTIONS

• ALL OTHER FUNCTIONS ARE OF THE FIRST ORDER

Page 22: Going Swiftly Functional

HIGHER ORDER FUNCTIONS

• PASSING CLOSURES TO FUNCTIONS• RETURNING CLOSURES FROM FUNCTION• EXAMPLE: EXTEND THE BINARY OPERATOR EXAMPLE

Page 23: Going Swiftly Functional

MAP-FILTER-REDUCE

THREE COMMON OPERATIONS ON SEQUENCES1. APPLY THE SAME TRANSFORMATION TO ALL ELEMENTS - MAP2. SELECT A FEW ELEMENTS BASED ON A PREDICATE - FILTER3. REDUCE ALL ELEMENTS TO A SINGLE ELEMENT – REDUCE

EXAMPLE: SUM OF SQUARES OF ALL PRIMES BETWEEN 2 AND N

Page 24: Going Swiftly Functional
Page 25: Going Swiftly Functional

LAZY SEQUENCES

• EAGER OPERATIONS LIKE MAP, FILTER ARE IMPLEMENTED LAZILY

• COMPUTATIONS ARE DEFERRED UNTIL RESULTS ARE IN DEMAND

• CLOSURES STORED AND EXECUTED ON DEMAND• AVOID NEEDLESS STORAGE AND COMPUTATION• EXAMPLE: INFINITE SEQUENCES, LAZY ARRAYS

Page 26: Going Swiftly Functional

QUIZ

Page 27: Going Swiftly Functional

CURRYING

• APPLY ONE ARGUMENT AT A TIME FOR MULTI-ARGUMENT FUNCTIONS

• HELPS SPECIALIZE ABSTRACT FUNCTIONS• RELEVANT IN THE CONTEXT OF HIGHER-ORDER FUNCTIONS• IMPROVES READABILITY• EXAMPLE: APPENDING ARTICLES TO NOUNS!

Page 28: Going Swiftly Functional

PATTERN MATCHING

• MAKE DECISION MAKING ELEGANT• TYPE-TESTING WITH ENUMS – LIKE ADTS IN HASKELL• POWERFUL SWITCH STATEMENT• EXAMPLE: THE ARRAY-LIST AND LIST-ARRAY EXAMPLES

Page 29: Going Swiftly Functional

PURE FUNCTIONS

• PURE FUNCTIONS – FUNCTIONS WITHOUT SIDE EFFECTS• REFERENTIAL TRANSPARENCY• PURE FUNCTIONS ALWAYS RETURN THE SAME VALUE FOR

GIVEN ARGUMENTS• CAN THE FUNCTION REMEMBER VALUES?

Page 30: Going Swiftly Functional

MEMOIZATION

• PROVIDES RUNTIME SUPPORT FOR FP• USEFUL MOSTLY IN RECURSIVE PURE FUNCTIONS• CACHING VALUES – ONLY FOR PURE FUNCTIONS• PERFORMANCE BOOST – AVOID REPEATED CALCULATIONS• EXAMPLE: FIBONACCI!

Page 31: Going Swiftly Functional

FUNCTORS – SIMPLISTIC DEFINITION

A

F: A B

BF ->

F ->

Page 32: Going Swiftly Functional

APPLICATIVES - SIMPLISTIC DEFINITION

A B

F: A B

F: A -> B

A

F: A -> B

Page 33: Going Swiftly Functional

MONADS - SIMPLISTIC DEFINITION

BF: A

A BF ->

F ->

Page 34: Going Swiftly Functional

THIS WOULDN’T HAVE BEEN POSSIBLE WITHOUT …

• STACKOVERFLOW.COM• ADITYA BHARGAVA’S BLOG ON FUNCTORS, APPLICATIVES,

MONADS• REALM.IO• SO MANY OTHER BLOGGERS

Page 35: Going Swiftly Functional

YOU MADE MY DAY!