Slide 1

Slide 1 text

Making Swift Even More Functional - Swift Summit

Slide 2

Slide 2 text

Hello, I’m Veronica Ray!

Slide 3

Slide 3 text

Swift is great, but it could be better Time to make change is now

Slide 4

Slide 4 text

–The Recurse Center User’s Manual “Be rigorous. Understand how and why your code works. Understand your tools. If you're working with a framework (like Sinatra or Flask), learning to use it is just scratching the surface. Go deeper. Learn how it works.”

Slide 5

Slide 5 text

– Functional Programming In Swift “Functional programmers emphasize that each program can be repeatedly broken into smaller and smaller pieces; all these pieces can be assembled using function application to define a complete program.”

Slide 6

Slide 6 text

– Functional Programming In Swift “Functional programming… emphasizes the importance of programming with values, free of mutable state or other side effects.”

Slide 7

Slide 7 text

CLASS VS STRUCT

Slide 8

Slide 8 text

WHY FUNCTIONAL? •Helps you write clear and concise code •Makes concurrency easier •Reduces complexity

Slide 9

Slide 9 text

vs

Slide 10

Slide 10 text

SIMPLICITY

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

COMPARED TO SCALA

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Too many custom operators and not opinionated enough

Slide 15

Slide 15 text

FP IN SWIFT •list comprehensions •tail call optimization

Slide 16

Slide 16 text

FP IN SWIFT •list comprehensions •tail call optimization

Slide 17

Slide 17 text

LIST COMPREHENSIONS

Slide 18

Slide 18 text

POWERFUL

Slide 19

Slide 19 text

PYTHON

Slide 20

Slide 20 text

PYTHON

Slide 21

Slide 21 text

BYTE CODE

Slide 22

Slide 22 text

PYTHON FOR LOOP

Slide 23

Slide 23 text

BYTE CODE IS 23 LINES!

Slide 24

Slide 24 text

vs

Slide 25

Slide 25 text

BYTE CODE IS THE SAME

Slide 26

Slide 26 text

SPELLING CORRECTOR

Slide 27

Slide 27 text

CONCISENESS Reading code Writing code

Slide 28

Slide 28 text

ADDING IT TO SWIFT

Slide 29

Slide 29 text

FP IN SWIFT •list comprehensions •tail call optimization

Slide 30

Slide 30 text

RECURSION

Slide 31

Slide 31 text

TAIL CALL

Slide 32

Slide 32 text

TAIL RECURSIVE CALL

Slide 33

Slide 33 text

STACK TRACE (fact 3) (fact-tail 3 1) (fact-tail 2 3) (fact-tail 1 6) (fact-tail 0 6) 6

Slide 34

Slide 34 text

NOT TAIL RECURSIVE

Slide 35

Slide 35 text

STACK TRACE (fact 3) (* 3 (fact 2)) (* 3 (* 2 (fact 1))) (* 3 (* 2 (* 1 (fact 0)))) (* 3 (* 2 (* 1 1))) (* 3 (* 2 1))

Slide 36

Slide 36 text

TAIL CALL OPTIMIZATION

Slide 37

Slide 37 text

NOT GUANRANTEED

Slide 38

Slide 38 text

SWIFT CODE

Slide 39

Slide 39 text

BYTE CODE jne to the label containing the conditional jump

Slide 40

Slide 40 text

BLOW OUT THE STACK

Slide 41

Slide 41 text

HOPE?

Slide 42

Slide 42 text

CHANGE YOUR BYTECODE CHANGE YOUR LIFE

Slide 43

Slide 43 text

RECURSION KILLS

Slide 44

Slide 44 text

RADAR

Slide 45

Slide 45 text

LEARN MORE

Slide 46

Slide 46 text

•Functional Swift Conference •Open Radar •Dev Forums •Twitter •Natasha The Robot’s Blog

Slide 47

Slide 47 text

WHEN SWIFT GOES OPEN SOURCE

Slide 48

Slide 48 text

TIME TO MAKE CHANGE IS NOW