going swiftly functional

Post on 16-Apr-2017

44 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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!

top related