Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Julia’s type system and
multiple dispatch
杜岳華
Julia Taiwan 發起人
Type
 Everything in Julia is an object.
 An object has its own type.
Type Declaration
 Type is similar to class in object-oriented
programming.
 But it has more meanings……
Type Declaration
 Concrete type
type Dog
name::AbstractString
color::AbstractString
end
dog = Dog(“Tom”, “brown”)
Name: T...
Type Declaration
 Abstract type
abstract Animal
Julia's type
abstract Animal type Dog <: Animal
name::AbstractString
color::AbstractString
end
More similar to struct in C...
Type Hierarchy
Ref:https://en.wikibooks.org/wiki/Introducing_Julia/Types
Type Hierarchy
Type System
 動態的,但擁有一些靜態型別系統的優點
 函式參數不加上型別,參數會被設成Any,加上型別
可以增加效能跟系統的穩健性
 參數化型別可以實現generic type
 型別系統是以階層式(hierarchical...
Type System
Tuple
Union
Algebraic type
 Tuple
 (1, 2, 3)
 immutable
 Union
 Union{Integer, AbstractString}
 I don't figure out the key scena...
The "nothing"
 The singleton of type Void, the only object belongs
to the type Void.
 While function does not return, it...
Union{Integer, Void}?
 No! Nullable!
 Sometimes, you are not sure a function gives a
result, then you can use Nullable.
However…
 Single inheritance
 Abstract types cannot be instantiated.
 Concrete types cannot be inherited.
 So concrete...
http://www.quickmeme.com/meme/36b
esu
It cannot be reused!
 The major reason to use object-oriented programming
is reusability.
 However……
 Behaviors are not...
Hopefully, we have……
 Parametric type
 Multiple dispatch
Parametric type
 The generic programming of Julia
 It help draw out the type of fields.
 Flexibility and constraints
ty...
Before talking about multiple
dispatch…
 Let's review polymorphism!
Polymorphism
 Dog and Cat have voice.
 But their voices are different!
 Subclass繼承superclass的method,
method會依據不同的subcla...
Polymorphism
 polymorphism不只是單單放在物件導向的繼承上,只要
符合同樣的function會依據不同型別而有不同行為就算
 若是依據維基百科的定義:
 Polymorphism is the provision ...
Ad hoc polymorphism
 依據傳入參數的型別組合,決定要使用哪一個
function,而為不同參數的型別組合定義不同行為是
特設的,而不是源自於內建的型別系統
 E.g. Function overloading, oper...
Parametric polymorphism
 parametric polymorphism提供一種行為框架,直接
定義一個function,然後依據傳入的型別做操作
 E.g. C++的template (但是他定義的是data ty...
Subtyping
 The type of polymorphism in OOP.
 Subclass 繼承了superclass的method介面,但是實
作是依據subclass的method內容
 我們通常把subclass當成...
Multiple dispatch
 It deals with “how to choose a function?”
double
double
args
Single dispatch
 or dynamic dispatch
Python code
class Foo:
...
def double(x):
return 2*x
class Bar:
...
def double(x):
r...
Back to multiple dispatch
Julia code
function double(obj::Foo, x)
return 2*x
end
function double(obj::Bar, x)
return strin...
You can add/override them easily.
function double(obj::Foo, x)
return 2*x
end
function double(obj::Bar, x)
return string(x...
Parametric method
 Generic function
function compare{T <: Real}(x::T, y::T)
if x > y
return 1
elseif x == y
return 0
else...
Parametric method
 聰明的設計讓multiple dispatch替你"回答問題"
same_type{T}(x::T, y::T) = true
same_type(x, y) = false
same_type(1, 2...
避免模糊語意
g(x::Float64, y) = 2x + y
g(x, y::Float64) = x + 2y
g(x::Float64, y::Any) = 2x + y
g(x::Any, y::Float64) = x + 2y
從精確到廣泛是個好順序
g(x::Float64, y::Float64) = 2x + 2y
g(x::Float64, y) = 2x + y
g(x, y::Float64) = x + 2y
g(2.0, 3) # 7.0
g(2, 3...
Constructors
 要建構一個object,constructor是少不了的
 There are 2 major kinds of constructor:
 Inner constructor
 Outer construc...
Outer constructor
 顧名思義,這是一個定義在型別定義之外的
constructor,他跟一般的method沒什麼不同
type Foo
bar
baz
End
Foo(x) = Foo(x,x)
Foo() = Foo(0)...
Outer constructor
 你可以很簡單的在型別宣告之外加上很多不同的
constructor,如同其他語言的constructor
overloading一般
 擴充功能的時候很好用
Inner constructor
 inner constructor,只能有一個
 使用`new`是inner constructor的特權
type OrderedPair
x::Real
y::Real
OrderedPair(x,...
Outer and inner constructor
Inner
Outer OuterOuter
Parametric Constructors
 Constructor can be parametric!
type Point{T<:Real}
x::T
y::T
end
type Point{T<:Real}
x::T
y::T
P...
Break!
 Next, the OOP in Julia!
OOP in Julia
 先來複習一下:
 Encapsulation (封裝): 定義fields跟methods,甚至存取權
限
 Inheritance (繼承): 組織類別之間的關係,以便重用
 Polymorphism (多...
Julia的哲學
 Polymorphism
 Multiple dispatch佔了重要的角色
 解耦子型別繼承了不想要的方法
 Inheritance
 Julia的型別系統佔了重要的角色
 只描述型別之間關係,而非實作
 E...
以往OOP方式
 Subtyping + single dispatch
 E.g. C++, Java, Python……
但是subtyping通常會有個問題……
 當inheritance發生的時候,superclass的行為都會被
subclass繼承,如此一來,確認superclass跟
subclass的關係就需要無比精確,不然subclass就會
繼承...
精巧設計
 Parametric polymorphism + multiple dispatch
 E.g. Julia, Common Lisp (?)
 Subtyping
 面對一個類別並定義他的行為
 Julia
 希望你...
OOP in Julia style
abstract Animal
immutable Dog <: Animal
color::AbstractString
species::AbstractString
end
immutable Cat...
OOP in Julia style
function color(a::Animal)
return a.color
end
function voice(d::Dog)
return "bark"
end
function voice(c:...
OOP in Julia style
d1 = Dog("yellow", "Labrador")
voice(d1) # "bark“
c1 = Cat("brown", "?")
voice(c1) # "meow"
OOP in traditional style
type Foo
bar::Int64
baz::Function
function Foo(x::Int64)
this = new()
this.bar = x
function baz(i...
OOP in traditional style
foo = Foo(10)
foo.bar # 10
foo.baz("Hello world!") # Hello world!
foo.baz(5) # 50
Julia’s object vs OOP
In software engineering aspect…
 Separation of interface and implementation is an
important issue…
bar()
Abstract type as an interface
Fooabstract Foo
function bar(obj::Foo, x)
……
end
Method signature as an interface
function bar(obj::Foo, x)
end
bar()
Foo
Julia tastes good!
http://images.clipartpanda.com/taste-clipart-dT8oABxEc.jpeg
What kind of language Julia belongs
to?
 We usually say that Java and Python are object-
oriented languages.
 So, how ab...
Object-oriented
programming
metaprogramming
https://img.xiaomac.com/playes/2007/0305008E9.JPG
Elegant but complicated type
system
Programming paradigms
 Pseudo-object-oriented programming
 Functional programming
 Metaprogramming
Q&A
Thank you for attention
Upcoming SlideShare
Loading in …5
×

of

YouTube videos are no longer supported on SlideShare

View original on YouTube

20170113 julia’s type system and multiple dispatch Slide 2 20170113 julia’s type system and multiple dispatch Slide 3 20170113 julia’s type system and multiple dispatch Slide 4 20170113 julia’s type system and multiple dispatch Slide 5 20170113 julia’s type system and multiple dispatch Slide 6 20170113 julia’s type system and multiple dispatch Slide 7 20170113 julia’s type system and multiple dispatch Slide 8 20170113 julia’s type system and multiple dispatch Slide 9 20170113 julia’s type system and multiple dispatch Slide 10 20170113 julia’s type system and multiple dispatch Slide 11 20170113 julia’s type system and multiple dispatch Slide 12 20170113 julia’s type system and multiple dispatch Slide 13 20170113 julia’s type system and multiple dispatch Slide 14 20170113 julia’s type system and multiple dispatch Slide 15 20170113 julia’s type system and multiple dispatch Slide 16 20170113 julia’s type system and multiple dispatch Slide 17 20170113 julia’s type system and multiple dispatch Slide 18 20170113 julia’s type system and multiple dispatch Slide 19 20170113 julia’s type system and multiple dispatch Slide 20 20170113 julia’s type system and multiple dispatch Slide 21 20170113 julia’s type system and multiple dispatch Slide 22 20170113 julia’s type system and multiple dispatch Slide 23 20170113 julia’s type system and multiple dispatch Slide 24 20170113 julia’s type system and multiple dispatch Slide 25 20170113 julia’s type system and multiple dispatch Slide 26 20170113 julia’s type system and multiple dispatch Slide 27 20170113 julia’s type system and multiple dispatch Slide 28 20170113 julia’s type system and multiple dispatch Slide 29 20170113 julia’s type system and multiple dispatch Slide 30 20170113 julia’s type system and multiple dispatch Slide 31 20170113 julia’s type system and multiple dispatch Slide 32 20170113 julia’s type system and multiple dispatch Slide 33 20170113 julia’s type system and multiple dispatch Slide 34 20170113 julia’s type system and multiple dispatch Slide 35 20170113 julia’s type system and multiple dispatch Slide 36 20170113 julia’s type system and multiple dispatch Slide 37 20170113 julia’s type system and multiple dispatch Slide 38 20170113 julia’s type system and multiple dispatch Slide 39 20170113 julia’s type system and multiple dispatch Slide 40 20170113 julia’s type system and multiple dispatch Slide 41 20170113 julia’s type system and multiple dispatch Slide 42 20170113 julia’s type system and multiple dispatch Slide 43 20170113 julia’s type system and multiple dispatch Slide 44 20170113 julia’s type system and multiple dispatch Slide 45 20170113 julia’s type system and multiple dispatch Slide 46 20170113 julia’s type system and multiple dispatch Slide 47 20170113 julia’s type system and multiple dispatch Slide 48 20170113 julia’s type system and multiple dispatch Slide 49 20170113 julia’s type system and multiple dispatch Slide 50 20170113 julia’s type system and multiple dispatch Slide 51 20170113 julia’s type system and multiple dispatch Slide 52 20170113 julia’s type system and multiple dispatch Slide 53 20170113 julia’s type system and multiple dispatch Slide 54 20170113 julia’s type system and multiple dispatch Slide 55 20170113 julia’s type system and multiple dispatch Slide 56 20170113 julia’s type system and multiple dispatch Slide 57 20170113 julia’s type system and multiple dispatch Slide 58 20170113 julia’s type system and multiple dispatch Slide 59 20170113 julia’s type system and multiple dispatch Slide 60 20170113 julia’s type system and multiple dispatch Slide 61
Upcoming SlideShare
20170217 julia小程式到專案發布之旅
Next
Download to read offline and view in fullscreen.

5 Likes

Share

Download to read offline

20170113 julia’s type system and multiple dispatch

Download to read offline

Julia Taiwan 2nd meetup

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

20170113 julia’s type system and multiple dispatch

  1. 1. Julia’s type system and multiple dispatch 杜岳華 Julia Taiwan 發起人
  2. 2. Type  Everything in Julia is an object.  An object has its own type.
  3. 3. Type Declaration  Type is similar to class in object-oriented programming.  But it has more meanings……
  4. 4. Type Declaration  Concrete type type Dog name::AbstractString color::AbstractString end dog = Dog(“Tom”, “brown”) Name: Tom Color: brown
  5. 5. Type Declaration  Abstract type abstract Animal
  6. 6. Julia's type abstract Animal type Dog <: Animal name::AbstractString color::AbstractString end More similar to struct in C instead of class in OOP. You cannot declare any fields in it.
  7. 7. Type Hierarchy Ref:https://en.wikibooks.org/wiki/Introducing_Julia/Types
  8. 8. Type Hierarchy
  9. 9. Type System  動態的,但擁有一些靜態型別系統的優點  函式參數不加上型別,參數會被設成Any,加上型別 可以增加效能跟系統的穩健性  參數化型別可以實現generic type  型別系統是以階層式(hierarchical)架構建立的, 明確描述型別之間的關係
  10. 10. Type System Tuple Union
  11. 11. Algebraic type  Tuple  (1, 2, 3)  immutable  Union  Union{Integer, AbstractString}  I don't figure out the key scenario to use it……
  12. 12. The "nothing"  The singleton of type Void, the only object belongs to the type Void.  While function does not return, it returns nothing!
  13. 13. Union{Integer, Void}?  No! Nullable!  Sometimes, you are not sure a function gives a result, then you can use Nullable.
  14. 14. However…  Single inheritance  Abstract types cannot be instantiated.  Concrete types cannot be inherited.  So concrete type can only be the leaf in the hierarchy.
  15. 15. http://www.quickmeme.com/meme/36b esu
  16. 16. It cannot be reused!  The major reason to use object-oriented programming is reusability.  However……  Behaviors are not inherited.  Fields are not inherited.  It cannot be reused!!
  17. 17. Hopefully, we have……  Parametric type  Multiple dispatch
  18. 18. Parametric type  The generic programming of Julia  It help draw out the type of fields.  Flexibility and constraints type Coordinate{T <: Integer} x::T y::T end
  19. 19. Before talking about multiple dispatch…  Let's review polymorphism!
  20. 20. Polymorphism  Dog and Cat have voice.  But their voices are different!  Subclass繼承superclass的method, method會依據不同的subclass有不同 的行為 Animal Dog Cat
  21. 21. Polymorphism  polymorphism不只是單單放在物件導向的繼承上,只要 符合同樣的function會依據不同型別而有不同行為就算  若是依據維基百科的定義:  Polymorphism is the provision of a single interface to entities of different types.  多型為不同型別的實體提供了單一介面  C++的函式多載(function overloading)跟運算子多載 (operator overloading)
  22. 22. Ad hoc polymorphism  依據傳入參數的型別組合,決定要使用哪一個 function,而為不同參數的型別組合定義不同行為是 特設的,而不是源自於內建的型別系統  E.g. Function overloading, operator overloading  operator overloading其實是function overloading的 特例!  𝑓 𝑡𝑦𝑝𝑒1 𝑎1, 𝑡𝑦𝑝𝑒2 𝑎2, 𝑡𝑦𝑝𝑒3 𝑎3 . . .  1 + 2 ≡ +(1, 2) ≡ 𝑎𝑑𝑑(1, 2)
  23. 23. Parametric polymorphism  parametric polymorphism提供一種行為框架,直接 定義一個function,然後依據傳入的型別做操作  E.g. C++的template (但是他定義的是data type而不是 function)  泛型(generic programming),就是parametric polymorphism的一種表現方式  在其他語言中generic functions
  24. 24. Subtyping  The type of polymorphism in OOP.  Subclass 繼承了superclass的method介面,但是實 作是依據subclass的method內容  我們通常把subclass當成superclass的子型別 (subtype)
  25. 25. Multiple dispatch  It deals with “how to choose a function?” double double args
  26. 26. Single dispatch  or dynamic dispatch Python code class Foo: ... def double(x): return 2*x class Bar: ... def double(x): return str(x)*2 double double args Foo Bar
  27. 27. Back to multiple dispatch Julia code function double(obj::Foo, x) return 2*x end function double(obj::Bar, x) return string(x)*2 end double double args (obj::Foo, x::Any) (obj::Bar, x::Any)
  28. 28. You can add/override them easily. function double(obj::Foo, x) return 2*x end function double(obj::Bar, x) return string(x)*2 end Open-close principle function double(obj::Bar, x) return “2”*x end
  29. 29. Parametric method  Generic function function compare{T <: Real}(x::T, y::T) if x > y return 1 elseif x == y return 0 else return -1 end end
  30. 30. Parametric method  聰明的設計讓multiple dispatch替你"回答問題" same_type{T}(x::T, y::T) = true same_type(x, y) = false same_type(1, 2) # true same_type(1, 2.0) # false
  31. 31. 避免模糊語意 g(x::Float64, y) = 2x + y g(x, y::Float64) = x + 2y g(x::Float64, y::Any) = 2x + y g(x::Any, y::Float64) = x + 2y
  32. 32. 從精確到廣泛是個好順序 g(x::Float64, y::Float64) = 2x + 2y g(x::Float64, y) = 2x + y g(x, y::Float64) = x + 2y g(2.0, 3) # 7.0 g(2, 3.0+) # 8.0 g(2.0, 3.0) # 10.0
  33. 33. Constructors  要建構一個object,constructor是少不了的  There are 2 major kinds of constructor:  Inner constructor  Outer constructor
  34. 34. Outer constructor  顧名思義,這是一個定義在型別定義之外的 constructor,他跟一般的method沒什麼不同 type Foo bar baz End Foo(x) = Foo(x,x) Foo() = Foo(0) Foo(2) # Foo(2, 2) Foo() # Foo(0, 0)
  35. 35. Outer constructor  你可以很簡單的在型別宣告之外加上很多不同的 constructor,如同其他語言的constructor overloading一般  擴充功能的時候很好用
  36. 36. Inner constructor  inner constructor,只能有一個  使用`new`是inner constructor的特權 type OrderedPair x::Real y::Real OrderedPair(x, y) = x > y ? error("out of order") : new(x, y) end
  37. 37. Outer and inner constructor Inner Outer OuterOuter
  38. 38. Parametric Constructors  Constructor can be parametric! type Point{T<:Real} x::T y::T end type Point{T<:Real} x::T y::T Point(x, y) = new(x, y) end Point{T<:Real}(x::T, y::T) = Point{T}(x, y) =
  39. 39. Break!  Next, the OOP in Julia!
  40. 40. OOP in Julia  先來複習一下:  Encapsulation (封裝): 定義fields跟methods,甚至存取權 限  Inheritance (繼承): 組織類別之間的關係,以便重用  Polymorphism (多型): 使可以同樣的methods根據不同的 類別展現出不同的行為
  41. 41. Julia的哲學  Polymorphism  Multiple dispatch佔了重要的角色  解耦子型別繼承了不想要的方法  Inheritance  Julia的型別系統佔了重要的角色  只描述型別之間關係,而非實作  Encapsulation  若是中介的隱私狀態是不需要的,那封裝也是不需要的!
  42. 42. 以往OOP方式  Subtyping + single dispatch  E.g. C++, Java, Python……
  43. 43. 但是subtyping通常會有個問題……  當inheritance發生的時候,superclass的行為都會被 subclass繼承,如此一來,確認superclass跟 subclass的關係就需要無比精確,不然subclass就會 繼承到不必要的行為  有些語言設法將method綁定在class上的作法打破, 像是Swift、Scala或Rust,用trait
  44. 44. 精巧設計  Parametric polymorphism + multiple dispatch  E.g. Julia, Common Lisp (?)  Subtyping  面對一個類別並定義他的行為  Julia  希望你在定義行為的時候考慮到整個type hierarchy,你需要對 某群 (特定範圍)的type定義行為  善用泛型,讓你在定義行為的時候可以收放自如
  45. 45. OOP in Julia style abstract Animal immutable Dog <: Animal color::AbstractString species::AbstractString end immutable Cat <: Animal color::AbstractString species::AbstractString end
  46. 46. OOP in Julia style function color(a::Animal) return a.color end function voice(d::Dog) return "bark" end function voice(c::Cat) return "meow" end
  47. 47. OOP in Julia style d1 = Dog("yellow", "Labrador") voice(d1) # "bark“ c1 = Cat("brown", "?") voice(c1) # "meow"
  48. 48. OOP in traditional style type Foo bar::Int64 baz::Function function Foo(x::Int64) this = new() this.bar = x function baz(input::AbstractString) println(input) end function baz(input::Int64) println(input * 10) end this.baz = baz return this end end
  49. 49. OOP in traditional style foo = Foo(10) foo.bar # 10 foo.baz("Hello world!") # Hello world! foo.baz(5) # 50
  50. 50. Julia’s object vs OOP
  51. 51. In software engineering aspect…  Separation of interface and implementation is an important issue…
  52. 52. bar() Abstract type as an interface Fooabstract Foo function bar(obj::Foo, x) …… end
  53. 53. Method signature as an interface function bar(obj::Foo, x) end bar() Foo
  54. 54. Julia tastes good! http://images.clipartpanda.com/taste-clipart-dT8oABxEc.jpeg
  55. 55. What kind of language Julia belongs to?  We usually say that Java and Python are object- oriented languages.  So, how about Julia?  Julia majors in metaprogramming, and minors in object-oriented programming.
  56. 56. Object-oriented programming metaprogramming https://img.xiaomac.com/playes/2007/0305008E9.JPG
  57. 57. Elegant but complicated type system
  58. 58. Programming paradigms  Pseudo-object-oriented programming  Functional programming  Metaprogramming
  59. 59. Q&A
  60. 60. Thank you for attention
  • TammyLevingston

    Dec. 1, 2021
  • YinChenLiao1

    Jan. 13, 2019
  • BabaBai

    Dec. 11, 2017
  • BennyChin4

    Jan. 15, 2017
  • AquaMac

    Jan. 14, 2017

Julia Taiwan 2nd meetup

Views

Total views

794

On Slideshare

0

From embeds

0

Number of embeds

0

Actions

Downloads

24

Shares

0

Comments

0

Likes

5

×