Top Banner
GENERICS “0 TO 0”
61

Generics programming in Swift

Jan 11, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Generics programming in Swift

GENERICS“0 TO 0”

Page 2: Generics programming in Swift

TEXT

▸ A Comparative Study of Language Support for Generic Programming (R Gracia 2003)

▸ An Extended Comparative Study of Language Support for Generic Programming (R Gracia 2007)

Page 3: Generics programming in Swift

AGENDA

▸ Refine Queue

▸ Concepts/Protocols

▸ Common errors and why?

▸ Protocol Oriented Programming (IF⏲ )

▸ Finale: Swift vs Haskell in Generics

Page 4: Generics programming in Swift

INTRODUCTION

GENERICS

▸ Grouping of similar functionality into a single Thing

▸ Parametric Polymorphism [not Just polymorphism]

▸ Compile Time / Static Polymorphism

Page 5: Generics programming in Swift

QUEUE

Page 6: Generics programming in Swift

TEXT

QUEUE FOR INT

Page 7: Generics programming in Swift

TEXT

QUEUE FOR STRING

Page 8: Generics programming in Swift

TEXT

QUEUE FOR CGPOINT

Page 9: Generics programming in Swift

TEXT

1000’S OF THESE

▸ Cant be extended

Page 10: Generics programming in Swift

TEXT

WHAT IS CHANGING

Page 11: Generics programming in Swift

TEXT

IDEA 1

Page 12: Generics programming in Swift

TEXT

ANALYSE

▸ all value semantics conform to Any Protocol by default

▸ Is it Generic?

Page 13: Generics programming in Swift

TEXT

.

▸ NOT GENERIC

▸ Type Erasure Model

▸ Heterogeneous set capable

▸ Objectie-C NSArray is somehow similar to this

Page 14: Generics programming in Swift

TEXT

IDEA 2:

Page 15: Generics programming in Swift

TEXT

.

▸ Generic

▸ Type Safe

▸ Homogeneous set capable

▸ T==> type deduction from call site

Page 16: Generics programming in Swift

TEXT

Page 17: Generics programming in Swift

TEXT

SO WHAT??

▸ Reduces redundancy

Page 18: Generics programming in Swift

TEXT

SO WHAT??

▸ Type Safety

Page 19: Generics programming in Swift

TEXT

1-….

Page 20: Generics programming in Swift

TEXT

SO WHAT??

▸ Capability can be extended beyond the authors intention

▸ Originates from Set theory. Highly useful for FPs.

Page 21: Generics programming in Swift

TEXT

SO WHAT FOR US????

▸ Swift uses Generics all over the Standard Library

▸ Swift has a great support for Generics

▸ Generics are awesome when all the <> brackets and T: U: make sense

Page 22: Generics programming in Swift

TEXT

OOOH

Page 23: Generics programming in Swift

TEXT

ADD!!

Page 24: Generics programming in Swift

TYPELESS GENERICS

Page 25: Generics programming in Swift

TEXT

PROPER TYPED GENERICS

+ is not defined on all types: unfortunately!!!

Page 26: Generics programming in Swift

+

CONCEPTS

▸ + means lhs and rhs can be added. It is a concept.

▸ In C++ are just documented. No language support.

YUK

Page 27: Generics programming in Swift

TEXT

CONCEPT == PROTOCOL

▸ Protocol to our rescue.

Page 28: Generics programming in Swift

TEXT

SO……

▸ Expressive

▸ No Lies to the compiler

Page 29: Generics programming in Swift

TEXT

FULL PICTURE

Page 30: Generics programming in Swift

TEXT

FULL PICTURE

Page 31: Generics programming in Swift

TEXT

FULL PICTURE

Page 32: Generics programming in Swift

TEXT

AT CALL SITE

Page 33: Generics programming in Swift

TEXT

HOW IT COMPILES?

▸ during compile time a concrete function is created in place of generic function. This is Separate Compilation.

▸ LLVM is smarter than this.

Page 34: Generics programming in Swift

TEXT

TYPES

▸ A grouping of data structure

▸ Int, String, NavigationBarAppereance, classes.

Page 35: Generics programming in Swift

TEXT

TYPES

▸ Protocols that are complete by themselves are proper types

Page 36: Generics programming in Swift

TEXT

WHAT ARE NOT TYPES?

▸ Items that can not completely defined in isolation

▸ Don’t know what is the type of Self until conformed by some concrete Type

Page 37: Generics programming in Swift

TEXT

WHAT ARE NOT TYPES?

▸ Items that can not completely defined in isolation

▸ Element is unknown unless conformed by somebody

Page 38: Generics programming in Swift

TEXT

SO..

▸ They are Generic placeholders (Incomplete Types)

▸ so is Array,

▸ But not Array<Int>. Its a complete Type.

Page 39: Generics programming in Swift

TEXT

THUS

▸ Protocols with Self requirement or associatedType requirement are not complete by themselves

▸ Thus, they cant be used like a Type

▸ They can be used to constrain other Types

▸ Examples:

▸ Queue<T>

▸ Array<T>

Page 40: Generics programming in Swift

TEXT

2. TYPE CONSTRAINTS

Reduce function over a Collection Type only when the elements are SignedInteger

Page 41: Generics programming in Swift

TEXT

NOTE:

▸ Make note that Swift provided “T:Comparable” which specifies T can be anything that conforms to a concept/protocol Comparable. Whereas, T == Int would mean T must be a Integer type.

Page 42: Generics programming in Swift

TEXT

GENERICS VS LOOKS GENERICS

Page 43: Generics programming in Swift

TEXT

TYPE ERASURE MODEL

▸ Generic Placeholder gives Type safety and feedback on code analysis

▸ Concrete Type parameter casts the provided argument into the Type method accepts. Hence, losing Type information. Type Erasure Polymorphism model or Not So Swift Model

Page 44: Generics programming in Swift

CODE

Page 45: Generics programming in Swift

CODE

Page 46: Generics programming in Swift

TEXT

ARRAY OF PROTOCOL

▸ Array of Concrete Type cannot be implicitly converted to Array of Another Type

▸ But a single Concrete Type can be converted to

Page 47: Generics programming in Swift

CODE

Page 48: Generics programming in Swift

▸ Protocol are a special construct which occupies 40 bytes

▸ Int are 8 bytes on 64 bit machine

▸ Array<Int> == Array<8byte contagious memory>

▸ Array<AType> == Array<40Byte contagious memory>

▸ Swift wont transform :=> performance, memory, type loss

TEXT

WHY?

Page 49: Generics programming in Swift

TEXT

MIXIN, DEFAULT IMPLEMENTATION

▸ DEMO

▸ Protocol Oriented Programming

▸ Avoid Subclassing

▸ Careful about: Static vs Dynamic Dispatch!!!!

Page 50: Generics programming in Swift

TEXT

Page 51: Generics programming in Swift

TEXT

Page 52: Generics programming in Swift

TEXT

Page 53: Generics programming in Swift

TEXT

AT THE CALL SITE

Page 54: Generics programming in Swift

TEXT

AT CALL SITE

Page 55: Generics programming in Swift

TEXT

ANOTHER CLASS

Page 56: Generics programming in Swift

TEXT

WHAT WE GOT!

▸ Protocol Oriented Programming

▸ We can subclass only from 1 parent. This makes multiple inheritance easy without actually inheriting

▸ Retroactive modeling (WHAT)

Page 57: Generics programming in Swift

TEXT

RETROATTIVE MODELING

▸ Ability to add functionality after the Type has been defined completely.

▸ Even though Array is made by Swift Team we were able to extend it with useful function after 2 years finally.

Page 58: Generics programming in Swift

TEXT

GENERICS SUPPORT FOR SWIFT

Page 59: Generics programming in Swift

TEXT

Great Support For Generics

Page 60: Generics programming in Swift

TEXT

ANY QUESTION?

👠

Page 61: Generics programming in Swift

REFERENCES

▸ Programming". http://www.osl.iu.edu/publications/prints/2005/garcia05:_extended_comparing05.pdf. N.p., 2016. Web. 22 May 2016.

▸ "Generics In Swift, Part 2 · Episteme And Techne". Austinzheng.com. N.p., 2015. Web. 23 May 2016.

▸ Cook, Nate. "Are Swift Generics Separately Compiled?". Stackoverflow.com. N.p., 2016. Web. 24 May 2016.

▸ "Mixin". Wikipedia. N.p., 2016. Web. 24 May 2016.

▸ Tsai, Michael. "Michael Tsai - Blog - How Swift Implements Generics". Mjtsai.com. N.p., 2016. Web. 24 May 2016.