static vs. dynamic typing toni schumacher

37
Concepts of Programming Languages: Static vs. Dynamic Typing Toni Schumacher Institute for Software Engineering and Programming Languages 23. November 2015 T. Schumacher 23. November 2015 1/31

Upload: others

Post on 28-Jan-2022

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Static vs. Dynamic Typing Toni Schumacher

Concepts of Programming Languages:Static vs. Dynamic Typing

Toni Schumacher

Institute for Software Engineering and Programming Languages

23. November 2015

T. Schumacher 23. November 2015 1/31

Page 2: Static vs. Dynamic Typing Toni Schumacher

Table of Contents

Motivation

TypingStatic TypingDynamic Typing

ComparisonStatic Typing

Advantages of Static TypingDisadvantages of Static Typing

Dynamic TypingAdvantages of Dynamic TypingDisadvantages of Dynamic Typing

Programming ConceptsType InferenceSubtypingGenerics

Outlook and ConclusionHybrid LanguagesConclusion

T. Schumacher 23. November 2015 2/31

Page 3: Static vs. Dynamic Typing Toni Schumacher

Motivation

Quote 1:Once syntactic verbosity [...] is removed from statically typedlanguages, there is absolutely no advantage in using a dynamicallytyped language.

jooq.org/2014/12/11/the-inconvenient-truth-about-dynamic-vs-static-typing/

Quote 2:With unit tests [...] the types will also get checked, so you may aswell go for dynamic typing and benefit from its advantages.

teamten.com/lawrence/writings/java-for-everything.html

T. Schumacher 23. November 2015 3/31

Page 4: Static vs. Dynamic Typing Toni Schumacher

Motivation

I Widely discussed topicI No exact/clear definitions

↪→ Which issues do we want to tackle?I Distinguish statically and dynamically typed languagesI Knowing benefits and disadvatages of bothI When to use which technique

T. Schumacher 23. November 2015 4/31

Page 5: Static vs. Dynamic Typing Toni Schumacher

Outline

Motivation

TypingStatic TypingDynamic Typing

ComparisonStatic Typing

Advantages of Static TypingDisadvantages of Static Typing

Dynamic TypingAdvantages of Dynamic TypingDisadvantages of Dynamic Typing

Programming ConceptsType InferenceSubtypingGenerics

Outlook and ConclusionHybrid LanguagesConclusion

T. Schumacher 23. November 2015 5/31

Page 6: Static vs. Dynamic Typing Toni Schumacher

Typing

Definition: Type SystemI Collection of type rules for a programming languageI Classifies expressions according to the kinds of values it computeI Assigns type information to values

Definition: Type CheckerI Checks types of values for correctnessI Tracks type violation

Differentations:I Strong / WeakI Optional / ExplicitI Static / Dynamic

T. Schumacher 23. November 2015 6/31

Page 7: Static vs. Dynamic Typing Toni Schumacher

Static Typing

Definition: Static TypingThe type checker tries to assign objects to their particular type during thecompile process.

T. Schumacher 23. November 2015 7/31

Page 8: Static vs. Dynamic Typing Toni Schumacher

Static Typing

Definition: Static TypingThe type checker tries to assign objects to their particular type during thecompile process.

T. Schumacher 23. November 2015 7/31

Page 9: Static vs. Dynamic Typing Toni Schumacher

Static Typing

I Failure: compile attempt of the program code is canceledI Considered as the origin of dynamic typingI E.g. Ada, C, C++, Java, Fortran, Haskell, ML, Pascal, Perl and Scala

T. Schumacher 23. November 2015 8/31

Page 10: Static vs. Dynamic Typing Toni Schumacher

Dynamic Typing

Definition: Dynamic TypingVariables are associated with their contained values during run-time bytagging them with identifiers such as num, bool or fun.

T. Schumacher 23. November 2015 9/31

Page 11: Static vs. Dynamic Typing Toni Schumacher

Dynamic Typing

Definition: Dynamic TypingVariables are associated with their contained values during run-time bytagging them with identifiers such as num, bool or fun.

T. Schumacher 23. November 2015 9/31

Page 12: Static vs. Dynamic Typing Toni Schumacher

Dynamic Typing

↪→ Is inherently a restricted form of static typing with only a single typeduring compile-time

I Failure: partial or complete failure running the programI E.g. Groovy, JavaScript, Objective-C, Perl, PHP, Prolog, Python, Ruby

and Smalltalk

T. Schumacher 23. November 2015 10/31

Page 13: Static vs. Dynamic Typing Toni Schumacher

Static - Dynamic

I No clear boundaries between bothI Programming languages can’t be equated with typing techniques

↪→ Can use both static and dynamic type checkingI E.g. in static languages the main focus is the static type-checker and the

dynamic typing (if existing) is not superficial

↪→ Leads to controverse discussions about the topic

T. Schumacher 23. November 2015 11/31

Page 14: Static vs. Dynamic Typing Toni Schumacher

Outline

Motivation

TypingStatic TypingDynamic Typing

ComparisonStatic Typing

Advantages of Static TypingDisadvantages of Static Typing

Dynamic TypingAdvantages of Dynamic TypingDisadvantages of Dynamic Typing

Programming ConceptsType InferenceSubtypingGenerics

Outlook and ConclusionHybrid LanguagesConclusion

T. Schumacher 23. November 2015 12/31

Page 15: Static vs. Dynamic Typing Toni Schumacher

Advantages of Static Typing

I Earlier detection of programming mistakesI More opportunities for compiler optimizations

↪→ Increased runtime efficiency and reduced memory usageI Better developing experienceI Better documentation in form of type annotations

T. Schumacher 23. November 2015 13/31

Page 16: Static vs. Dynamic Typing Toni Schumacher

Disadvantages of Static Typing

I Too rigidI Can’t handle changing requirementsI Code is less reusableI Define some exceptions as dynamic errors (e.g. array-out-of-bound)I Should be more complete

↪→ Complex and overly complicated concepts addedI Can’t handle a changing variable type

Example: Changing variable type

1 employeeName = 9;2 employeeName = "Steve";

↪→ Type error

T. Schumacher 23. November 2015 14/31

Page 17: Static vs. Dynamic Typing Toni Schumacher

Disadvantages of Static Typing

I Too rigidI Can’t handle changing requirementsI Code is less reusableI Define some exceptions as dynamic errors (e.g. array-out-of-bound)I Should be more complete

↪→ Complex and overly complicated concepts addedI Can’t handle a changing variable type

Example: Changing variable type

1 employeeName = 9;2 employeeName = "Steve";

↪→ Type error

T. Schumacher 23. November 2015 14/31

Page 18: Static vs. Dynamic Typing Toni Schumacher

Disadvantages of Static Typing

I Too rigidI Can’t handle changing requirementsI Code is less reusableI Define some exceptions as dynamic errors (e.g. array-out-of-bound)I Should be more complete

↪→ Complex and overly complicated concepts addedI Can’t handle a changing variable type

Example: Changing variable type

1 employeeName = 9;2 employeeName = "Steve";

↪→ Type error

T. Schumacher 23. November 2015 14/31

Page 19: Static vs. Dynamic Typing Toni Schumacher

Advantages of Dynamic Typing

I Better for prototyping systems with changing or unknown requirementsI Allows programs to generate types and functionality based on run-time

data

↪→ Much more flexible

Example: Eval function in dynamic languages

1 function example(str){2 var x = 10;3 var y = 20;4 var a = eval("x * y");5 var b = eval("2 + 2");6 var c = eval("x + 17");7 var d = eval(str);8 }

T. Schumacher 23. November 2015 15/31

Page 20: Static vs. Dynamic Typing Toni Schumacher

Advantages of Dynamic Typing

I Better for prototyping systems with changing or unknown requirementsI Allows programs to generate types and functionality based on run-time

data

↪→ Much more flexible

Example: Eval function in dynamic languages

1 function example(str){2 var x = 10;3 var y = 20;4 var a = eval("x * y");5 var b = eval("2 + 2");6 var c = eval("x + 17");7 var d = eval(str);8 }

T. Schumacher 23. November 2015 15/31

Page 21: Static vs. Dynamic Typing Toni Schumacher

Advantages of Dynamic Typing

I Better interaction with systems or modules with unpredictable changingoutput

I Important for data intensive programming

↪→ Indispensable for dealing with truly dynamic program behavior

T. Schumacher 23. November 2015 16/31

Page 22: Static vs. Dynamic Typing Toni Schumacher

Disadvantages of Dynamic Typing

I Significantly more runtime errors

↪→ More costs in development processI More effort of writing exceptionsI Late detection of errors

↪→ Complex troubleshooting and error fixingI Type checker must check all classes during run-time

↪→ Worse execution time

T. Schumacher 23. November 2015 17/31

Page 23: Static vs. Dynamic Typing Toni Schumacher

Programming Concepts

I Advantages and disadvantage of both typing techniques applied onimportant programming concepts:

1. Type Inference2. Subtyping3. Genercis

T. Schumacher 23. November 2015 18/31

Page 24: Static vs. Dynamic Typing Toni Schumacher

Type Inference

Definition: Type InferenceI Process of finding a type for a program within a given type system

I Type inference 6= dynamic typingI Allows you to omit type information when declaring a variable

Example: Type inference in SML

1 fun fak(n) = if (n = 0) then 1 else n * fak(n-1);

I Relies on the availability of static type information

↪→ Redundant for dynamic languagesI Only in statically typed languages like SML, Haskel, F# etc.

T. Schumacher 23. November 2015 19/31

Page 25: Static vs. Dynamic Typing Toni Schumacher

Subtyping

Definition: SubtypingI Reflexive and transitive relation over typesI Satisfies subsumption:

I If a term has type A, which is a subtype of a type B, then the term also hastype B

I Ability to override existing super types with a related datatypeI Static type-checker has the type information needed to automatically lift

inferred variables to required types

T. Schumacher 23. November 2015 20/31

Page 26: Static vs. Dynamic Typing Toni Schumacher

Subtyping

Example: Subtyped addition on nullable integers in C#

1 int? a = null;2 int? b = 1;3 int? c = a + b;

I Dynamic type-checker associates values with classes

↪→ Exclude value types immediatelyI Very inefficient with dynamic type checkerI Construct of dynamic typing needs to be rebuild to implement subtyping

T. Schumacher 23. November 2015 21/31

Page 27: Static vs. Dynamic Typing Toni Schumacher

Generics

Definition: GenericsI Reference type that has one or more type parameters

↪→ Parameterized typeI Specifying a type argument to declare and instantiate a constructed type

I Help to avoid writing the same code multiple times

Dynamic type checking:I Type informations are at first available at runtime

↪→ Any collection or method is automatically generic

↪→ Create highly reusable libraries

Example: Generics in dynamically typed languages

1 new Set<object.getClass()>(object);

T. Schumacher 23. November 2015 22/31

Page 28: Static vs. Dynamic Typing Toni Schumacher

Generics

Static type checking:I Write a new function for any element type and any kind of collection

Example: Generics in statically typed languages

1 class Set{2 public Set(boolean b) { ... }3 public Set(int i) { ... }4 .. other constructors.5 }6 new Set<Object>(object);

↪→ Endless number of types

T. Schumacher 23. November 2015 23/31

Page 29: Static vs. Dynamic Typing Toni Schumacher

Generics

Static type checking:I Write a new function for any element type and any kind of collection

Example: Generics in statically typed languages

1 class Set{2 public Set(boolean b) { ... }3 public Set(int i) { ... }4 .. other constructors.5 }6 new Set<Object>(object);

↪→ Endless number of types

T. Schumacher 23. November 2015 23/31

Page 30: Static vs. Dynamic Typing Toni Schumacher

Generics

I Better: dynamically scoped variables like arbitrary type T

Example: Usage of Generics in C#

1 interface IEnumerator<T> {2 T Current{get;}3 }

↪→ Generics are not impossible in static typing

↪→ Much more easier to implement with dynamic type checking

T. Schumacher 23. November 2015 24/31

Page 31: Static vs. Dynamic Typing Toni Schumacher

Outline

Motivation

TypingStatic TypingDynamic Typing

ComparisonStatic Typing

Advantages of Static TypingDisadvantages of Static Typing

Dynamic TypingAdvantages of Dynamic TypingDisadvantages of Dynamic Typing

Programming ConceptsType InferenceSubtypingGenerics

Outlook and ConclusionHybrid LanguagesConclusion

T. Schumacher 23. November 2015 25/31

Page 32: Static vs. Dynamic Typing Toni Schumacher

Hybrid Languages

I Dynamic type checking and static type checking appear to beincompatible

I Can coexist harmoniouslyI Different techniques of solving this misery:

I Static type-checker verifies what it can and dynamic checks verify the restI Distinguish between statically typed and dynamically typed variables

T. Schumacher 23. November 2015 26/31

Page 33: Static vs. Dynamic Typing Toni Schumacher

Hybrid Languages

Example: Static and dynamic variables in C#

1 class ExampleClass{2 public ExampleClass() { }3 public void exampleMethod1(int i) {}4 }5 static void Main(string[] args){6 ExampleClass ec = new ExampleClass();7 //would cause compiler error8 ec.exampleMethod1(10, 4);9

10 dynamic dynamic_ec = new ExampleClass();11 // no compiler error, but cause run-time exception.12 dynamic_ec.exampleMethod1(10, 4);13 }

T. Schumacher 23. November 2015 27/31

Page 34: Static vs. Dynamic Typing Toni Schumacher

Conclusion

Questions?

T. Schumacher 23. November 2015 28/31

Page 35: Static vs. Dynamic Typing Toni Schumacher

Conclusion

Static or Dynamic type checking?

T. Schumacher 23. November 2015 29/31

Page 36: Static vs. Dynamic Typing Toni Schumacher

Conclusion

My opinion:I Dynamic typing for small programs and scripts (fast development, no

major safety requirements)I Static typing mechanisms for applications relevant to securityI Fully expressive language supports the interplay between static and

dynamic techniquesI Static typing where possible and dynamic typing when needed

xkcd.com

T. Schumacher 23. November 2015 30/31

Page 37: Static vs. Dynamic Typing Toni Schumacher

Conclusion

Thank you for your attention.

T. Schumacher 23. November 2015 31/31