Post on 16-Apr-2017
transcript
GOING SWIFTLY FUNCTIONAL
PUSHKAR N KULKARNI, IBM RUNTIMES
@pushkar_nk
pushkarnk
RECIPE
• INTRODUCTIONS• CLOSURES• MAP, FILTER, REDUCE, LAZY• CURRYING• PATTERN MATCHING• PURE FUNCTIONS, MEMOIZATION• FUNCTORS, APPLICATIVES, MONADS*
INTRODUCTIONS
• ABOUT ME• FUNCTIONAL PROGRAMMING• SWIFT
ABOUT ME
• WHO AM I ?• WHAT DO I DO ?• WHY AND HOW AM I HERE ?
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*
THE BEGINNING OF ALL CREATION
FUNCTIONAL PROGRAMMINGTHE FOREFATHERS
CHURCH TURING*KLEENE
FUNCTIONAL PROGRAMMING
• MATHEMATICAL APPROACH: LAMBDA CALCULUS, CATEGORY THEORY
• VIS-À-VIS IMPERATIVE PROGRAMMING – PRAGMATIC APPROACH
EARLY ADOPTERS
• LISP – ALMOST THE SAME TIME AS FORTRAN• ML – INSPIRED F#, OCAML• MIRANDA – INSPIRED HASKELL • ERLANG• HASKELL – PURELY FUNCTIONAL• OCAML
… THEN ON THE JVM
• GROOVY• SCALA• CLOJURE• JAVA 8
MOVING AWAY FROM VIRTUAL MACHINES
• GO• RUST• SWIFT
MODERN NATIVE LANGUAGES
• FAST• SAFE• EXPRESSIVE
SWIFT
CHRIS LATTNER
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
SWIFT - MY PERCEPTION
• VERY INTUITIVE• BEAUTIFUL• GOOD COMPILE-TIME SAFETY • DECENT FP ASPECTS• MEMORY MANAGEMENT CAN BE PAINFUL AT TIMES
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
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
LET’S GET STARTED …
• LEARNING ONE CONCEPT AT A TIME• EXAMPLES ARE HIGHLY CONTRIVED AND ACADEMIC• CAN’T DO WITHOUT PRIME NUMBERS AND FIBONACCI
CLOSURES
• UNNAMED BLOCKS OF CODE THAT CAN BE PASSED AROUND• THEY CAPTURE THE CONTEXT – ALL “VALUES” IN SCOPE• MAJOR USE-CASE - ASYNCHRONOUS PROGRAMMING
CLOSURES
• BASIC SYNTAX, TYPE INFERENCE, IMPLICIT RETURN• SHORTHAND ARGUMENT NAMES, OPERATOR METHODS• TRAILING CLOSURES• EXAMPLE: A GENERIC BINARY OPERATOR
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
HIGHER ORDER FUNCTIONS
• PASSING CLOSURES TO FUNCTIONS• RETURNING CLOSURES FROM FUNCTION• EXAMPLE: EXTEND THE BINARY OPERATOR EXAMPLE
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
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
QUIZ
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!
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
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?
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!
FUNCTORS – SIMPLISTIC DEFINITION
A
F: A B
BF ->
F ->
APPLICATIVES - SIMPLISTIC DEFINITION
A B
F: A B
F: A -> B
A
F: A -> B
MONADS - SIMPLISTIC DEFINITION
BF: A
A BF ->
F ->
THIS WOULDN’T HAVE BEEN POSSIBLE WITHOUT …
• STACKOVERFLOW.COM• ADITYA BHARGAVA’S BLOG ON FUNCTORS, APPLICATIVES,
MONADS• REALM.IO• SO MANY OTHER BLOGGERS
YOU MADE MY DAY!