SLIDE 1 mi n i ma l i s m v e r s u s t y p e s
H i s h a m Mu h a mma d
< h i s h a m@k
g h q . c
SLIDE 2
mi n i ma l i s m L u a : fj t s i n my h e a d
SLIDE 3
g
SLIDE 4 t y p e s p a i r
r
r a mmi n g wi t h t h e c
u t e r
SLIDE 5 u n t y p e d : n
y p e s a t a l l
a s s e mb l y , u n ( i ) t y p e d l a mb d a c a l c u l u s
t y p e d : t y p e s e x i s t !
s t r i n g a n d n u mb e r a r e d i fg e r e n t t h i n g s
( e v e n i f y
c a n d
1 " + 2 )
SLIDE 6 d y n a mi c a l l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s d
' t
L u a , S c h e me , E r l a n g , P y t h
, R u b y , P H P , e t c .
s t a t i c a l l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s h a v e t y p e s
C , J a v a , G
C # , R u s t , H a s k e l l , e t c .
SLIDE 7 s t r
g l y t y p e d we a k l y t y p e d
SLIDE 8 d y n a mi c a l l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s d
' t
L u a , S c h e me , E r l a n g , P y t h
, R u b y , P H P , e t c .
s t a t i c a l l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s h a v e t y p e s
C , J a v a , G
C # , R u s t , H a s k e l l , e t c .
SLIDE 9 wh a t h a p p e n s wh e n we p u t mi n i ma l i s m a n d t y p e s t
e t h e r ?
SLIDE 10 a b r i e f h i s t
y
t y p i n g L u a
SLIDE 11 2 1 3 : T i d a l L
k
h t t p s : / / g i t h u b . c
f a b 1 3 n / me t a l u a / b l
/ t i l
s r c / t i l
r e a d me . md
SLIDE 12 2 1 5 : T y p e d L u a
h t t p s : / / g i t h u b . c
a n d r e mm/ t y p e d l u a
SLIDE 13 2 1 7 : T i t a n
h t t p s : / / g i t h u b . c
t i t a n
a n g / t i t a n
SLIDE 14 2 1 8 : P a l l e n e
h t t p s : / / g i t h u b . c
p a l l e n e
a n g / p a l l e n e
SLIDE 15
a n d y e t
SLIDE 16 wh y i s i t s
a r d ?
SLIDE 17
c e y
a d d t y p e s a n d t h e wh
e e n c h i l a d a t h a t c
s wi t h i t , t h e n t h e l a n g u a g e i s n
g e r mi n i ma l i s t i c , r i g h t ?
SLIDE 18
c e y
a d d t y p e s a n d t h e wh
e e n c h i l a d a t h a t c
s wi t h i t , t h e n t h e l a n g u a g e i s n
g e r mi n i ma l i s t i c , r i g h t ? t y p e s ma k e
r t i n y l a n g u a g e s c
l i c a t e d ?
SLIDE 19 t h e p r
l e m i s k i n d a t h e
p
i t e
SLIDE 20
d y n a mi c a l l y t y p e d l a n g u a g e s h a v e
H U G E
t y p e s y s t e ms
SLIDE 21 t y p e s y s t e m: s e t
r u l e s t h a t d e s c r i b e wh a t a r e t h e v a l i d i n t e r a c t i
s
v a l u e s i n c
r e c t p r
r a ms
SLIDE 22 t y p e s y s t e m: s e t
r u l e s t h a t d e s c r i b e wh a t a r e t h e v a l i d i n t e r a c t i
s
v a l u e s i n c
r e c t p r
r a ms i t ' s i n y
r h e a d !
SLIDE 23 y
a r e t h e t y p e c h e c k e r
SLIDE 24
- bj.x, obj.y = get_coords()
c a n ' t d
h a t : y e s t e r d a y I c h a n g e d get_coords f r
return x, y t
SLIDE 25 wh a t a r e t h e r u l e s i n y
r h e a d ?
SLIDE 26 d y n a mi c a l l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s d
' t
L u a , S c h e me , E r l a n g , P y t h
, R u b y , P H P , e t c .
s t a t i c a l l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s h a v e t y p e s
C , J a v a , G
C # , R u s t , H a s k e l l , e t c .
d e p e n d e n t l y t y p e d : v a l u e s h a v e t y p e s , v a r i a b l e s h a v e t y p e s . . . a n d t y p e s h a v e v a l u e s ! a n d t y p e s !
I d r i s , A g d a . . . n
t h a t ma n y y e t !
SLIDE 27
function f(a, b)
SLIDE 28 function f(a, b) a : i n t e g e r b : i f a < 2 5 6 t h e n s t r i n g e l s e a r r a y
s t r i n g s
SLIDE 29 function f(a, b) a : i n t e g e r b : i f a < 2 5 6 t h e n s t r i n g e l s e a r r a y
s t r i n g s red: integer green: integer blue: integer
SLIDE 30 function f(a, b) a : i n t e g e r b : i f a < 2 5 6 t h e n s t r i n g e l s e a r r a y
s t r i n g s red: integer green: integer blue: integer f(red, {1, 2, 3})
SLIDE 31 C u r r y
r d c
r e s p
d e n c e p r
i t i
s ↔ t y p e s l
i c ↔ t y p e s y s t e m
SLIDE 32
b t w , a r i t h me t i c s i s u n d e c i d a b l e
SLIDE 33
local t = {} local ok, err = load_values_into_table(t) if not ok then return nil, "failed! " .. err end return { r = t[1], g = t[2], b = t[3] }
SLIDE 34 L u a : t a b l e i s t h e
l y s t r u c t u r e d t y p e
SLIDE 35
e v e r y t h i n g i s a t a b l e a t a b l e i s a n y t h i n g
SLIDE 36
e v e r y t h i n g i s a t a b l e a t a b l e i s a n y t h i n g a n a r r a y
SLIDE 37 e v e r y t h i n g i s a t a b l e a t a b l e i s a n y t h i n g a n a r r a y a d i c t i
a r y
SLIDE 38 e v e r y t h i n g i s a t a b l e a t a b l e i s a n y t h i n g a n a r r a y a d i c t i
a r y a s t r u c t
SLIDE 39 e v e r y t h i n g i s a t a b l e a t a b l e i s a n y t h i n g a n a r r a y a d i c t i
a r y a s t r u c t a n
j e c t
SLIDE 40 e v e r y t h i n g i s a t a b l e a t a b l e i s a n y t h i n g a n a r r a y a d i c t i
a r y a s t r u c t a n
j e c t a d i c t i
a r y ma p p i n g
j e c t s t
t r i n g s
a r r a y s d e p e n d i n g
wh e t h e r fj e l d x
t h e k e y
j e c t i s t r u e
f a l s e
SLIDE 41
e x p r e s s i v e n e s s
SLIDE 42 n
r e a l l y wh a t a l a n g u a g e c a n e x p r e s s b u t h
c a n y
e x p r e s s i t
SLIDE 43 d y n a mi c a l l y t y p e d l a n g u a g e s a r e s u p e r e x p r e s s i v e l i k e a b l a n k s h e e t
p a p e r
SLIDE 44 t y p e c h e c k e r wo r k s b
h f
g
( " T h a n k y
f
c a t c h i n g my s i l l y t y p
" )
a n d b a d
( " n
I _ k n
t h a t t h i s u s e
t h e v a r i a b l e i s s a f e ! " )
SLIDE 45 e x p r e s s i v e n e s s i s t h e f e e l
a l a n g u a g e
SLIDE 46
local t = {} t.name = "items" t[1] = 100 t[2] = 200
SLIDE 47 h e r e ' s t h e d i l e mma : h
mu c h
t h e l a n g u a g e d
c h a n g e ?
SLIDE 48 i f y
wa n t t
k e i t f e e l l i k e L u a , t h e n t h e t y p e c h e c k e r i s s u p e r c
l e x i f y
wa n t t
n i s h y
r t y p e c h e c k e r , y
h a v e t
k e c u t s s
wh e r
SLIDE 49 t wo
t i
s
wh e r e t
k e c u t s
SLIDE 50 c u t
p r
r a mme r e x p r e s s i v e n e s s
{ name = "items", items = {100, 200} } return x, y a n d return nil, err
v s .
return x, y a n d return nil, nil, err
SLIDE 51 c u t
t h e c
r e c t n e s s
t h e t y p e c h e c k e r
SLIDE 52 " e v e r y p r
r a m t h e t y p e c h e c k e r a c c e p t s h a s c
r e c t t y p e s " " e v e r y p r
r a m t h a t t h e t y p e c h e c k e r r e j e c t s h a s wr
g t y p e s "
SLIDE 53 t h e mo r e s
h i s t i c a t e d y
r t y p e s y s t e m, t h e d e e p e r y
a r e i n r e s e a r c h t e r r i t
y
SLIDE 54 s
n d n e s s v s . u s a b i l i t y ( v s . p e r f
ma n c e ! ) T y p e d L u a T y p e d C l
u r e T y p e d R a c k e t
SLIDE 56
T y p e S c r i p t
SLIDE 57 u s a b i l i t y a b
e a l l e l s e
h t t p s : / / g i t h u b . c
Mi c r
t / T y p e S c r i p t / wi k i / T y p e S c r i p t
e s i g n
l s
SLIDE 58 i n t e n t i
a l l y u n s
n d
SLIDE 59 i n t e n t i
a l l y u n s
n d
SLIDE 60 wh a t a b
t L u a ?
SLIDE 61 e x p l
i n g t h i s d e s i g n s p a c e t l : mi n i ma l i s t i c L u a t y p e c h e c k e r
wh a t ' s t h e mi n i mu m s e t
f e a t u r e s s
h a t i t c a n c h e c k i t s e l f ?
SLIDE 62 t l t l . t l : c u r r e n t l y f a i l s wi t h 3 8 4 t y p e e r r
s
SLIDE 63 t l t l . t l : c u r r e n t l y f a i l s wi t h 3 8 4 t y p e e r r
s (
e we e k a g
t wa s 1 4 9 3 ! )
SLIDE 64 T y p e S c r i p t : J a v a S c r i p t
i k e
( f e a t u r e s , f e a t u r e s , f e a t u r e s ! )
t l : a i mi n g f
L u a
i k e
( a b a l a n c e b e t we e n f u n c t i
a l i t y a n d s ma l l s i z e )
SLIDE 65 h t t p : / / g i t h u b . c
h i s h a mh m/ t l
SLIDE 67 L u a a n d t y p e s : t
e c
t i n u e d ! t h a n k y