Making Swift Even More Functional

48
Making Swift Even More Functional - Swift Summit

Transcript of Making Swift Even More Functional

Page 1: Making Swift Even More Functional

Making Swift Even More Functional

- Swift Summit

Page 2: Making Swift Even More Functional

Hello, I’m Veronica Ray!

Page 3: Making Swift Even More Functional

Swift is great, but it could be better

Time to make change is now

Page 4: Making Swift Even More Functional

–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.”

Page 5: Making Swift Even More Functional

– 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.”

Page 6: Making Swift Even More Functional

– Functional Programming In Swift

“Functional programming…emphasizes the importance of programming with values,

free of mutable state or other side effects.”

Page 7: Making Swift Even More Functional

CLASS VS

STRUCT

Page 8: Making Swift Even More Functional

WHY FUNCTIONAL?

•Helps you write clear and concise code

•Makes concurrency easier

•Reduces complexity

Page 9: Making Swift Even More Functional

vs

Page 10: Making Swift Even More Functional

SIMPLICITY

Page 11: Making Swift Even More Functional
Page 12: Making Swift Even More Functional

COMPARED TO SCALA

Page 13: Making Swift Even More Functional
Page 14: Making Swift Even More Functional

Too many custom operators and not opinionated enough

Page 15: Making Swift Even More Functional

FP IN SWIFT•list comprehensions

•tail call optimization

Page 16: Making Swift Even More Functional

FP IN SWIFT•list comprehensions

•tail call optimization

Page 17: Making Swift Even More Functional

LIST COMPREHENSIONS

Page 18: Making Swift Even More Functional

POWERFUL

Page 19: Making Swift Even More Functional

PYTHON

Page 20: Making Swift Even More Functional

PYTHON

Page 21: Making Swift Even More Functional

BYTE CODE

Page 22: Making Swift Even More Functional

PYTHON FOR LOOP

Page 23: Making Swift Even More Functional

BYTE CODE IS 23 LINES!

Page 24: Making Swift Even More Functional

vs

Page 25: Making Swift Even More Functional

BYTE CODE IS THE SAME

Page 26: Making Swift Even More Functional

SPELLING CORRECTOR

Page 27: Making Swift Even More Functional

CONCISENESSReading code

Writing code

Page 28: Making Swift Even More Functional

ADDING IT TO SWIFT

Page 29: Making Swift Even More Functional

FP IN SWIFT•list comprehensions

•tail call optimization

Page 30: Making Swift Even More Functional

RECURSION

Page 31: Making Swift Even More Functional

TAIL CALL

Page 32: Making Swift Even More Functional

TAIL RECURSIVE CALL

Page 33: Making Swift Even More Functional

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

Page 34: Making Swift Even More Functional

NOT TAIL RECURSIVE

Page 35: Making Swift Even More Functional

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

Page 36: Making Swift Even More Functional

TAIL CALL OPTIMIZATION

Page 37: Making Swift Even More Functional

NOT GUANRANTEED

Page 38: Making Swift Even More Functional

SWIFT CODE

Page 39: Making Swift Even More Functional

BYTE CODE

jne to the label containing the conditional jump

Page 40: Making Swift Even More Functional

BLOW OUT THE STACK

Page 41: Making Swift Even More Functional

HOPE?

Page 42: Making Swift Even More Functional

CHANGE YOUR BYTECODE

CHANGE YOUR LIFE

Page 43: Making Swift Even More Functional

RECURSION KILLS

Page 44: Making Swift Even More Functional

RADAR

Page 45: Making Swift Even More Functional

LEARN MORE

Page 46: Making Swift Even More Functional

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

Page 47: Making Swift Even More Functional

WHEN SWIFT GOES OPEN SOURCE

Page 48: Making Swift Even More Functional

TIME TO MAKE CHANGE IS NOW