SlideShare a Scribd company logo
1 of 82
Download to read offline
Concepts of Programming
Languages
Eelco Visser




         Delft
                                                           TI1220
         University of
         Technology             Concepts of Programming Languages
         Challenge the future
Overview
today’s lecture

A new course

•   from IN1605-B to TI1220

What is this course about?

•   why study concepts of programming languages?

How is this course organized?

•   lectures and assignments

Introduction to Scala

•   writing and running Scala programs


                                                   TI1220 - Introduction   2
I
A New Course




               TI 1220 - Lecture 1: Introduction   3
A New Course
the only constant is change

IN1605-B: Algoritmen en Programmeertalen:
Programmeertalen

•   4 ECTS

•   Haskell + C

•   Peter Kluijt

TI1220: Concepten van Programmeertalen

•   6 ECTS

•   Scala + C + JavaScript

•   Eelco Visser

                                            TI1220 - Introduction   4
Under New Management
Eelco Visser

Lecturer

•   Dr. Eelco Visser

•   UHD in Software Engineering Research Group

•   http://eelcovisser.org

•   Contact: e.visser@tudelft.nl

    •   first ask student assistants

    •   send questions by email

    •   appointment if necessary



                                                 TI1220 - Introduction   5
My Research
software language design & engineering

Spoofax Language Workbench

•   design and implement languages & IDEs

•   from high-level declarative specification

Domain-specific language design

•   WebDSL: a DSL for web programming

•   Mobl: a DSL for mobile web applications

Interaction design

•   researchr.org: building a digital library


                                                TI1220 - Introduction   6
Examination Old Course

You can still sit for exams of IN1605-B

•   Provided you have finished the lab (practicum)


Sittings

•   Together with exam for this course (TI1220)

•   April 11, 2010

•   June 22, 2010




                                                     TI1220 - Introduction   7
Feedback Appreciated

An invitation to Murphy

•   New content

•   New software

•   New lectures, assignments, exams

•   New lecturer

•   New assistants (mostly)

Please let us know how it goes

•   report problems early

•   also let us know what goes right :)

                                          TI1220 - Introduction   8
II
Concepts of Programming Languages




                      TI 1220 - Lecture 1: Introduction   9
Computers Process Data



data       computer         data




                               TI1220 - Introduction 10
Programmable Computers



data       computer         data




           program

                               TI1220 - Introduction 11
Programming Language



data       computer       data




              L
           program

                             TI1220 - Introduction 12
Turing Machines
computability

Turing/Church Thesis

•   Every effective computation can be carried out by a
    Turing machine*

Corollary

•   All (Turing Complete) programming languages can
    express all effective computations

•   Why bother with new programming languages?




(*) see IN2505

                                                          TI1220 - Introduction 13
History of Programming Languages
         timeline

History of Programming Languages
  1954                         1960                                                1965                                               1970                           1975             1980             1985                 1990                 1995             2000   2001                          2002                                             2003                                               2004




                                                                                                                                                              1986      1990   1990   1991   1991   1993      1994   1995          1996   1996      1997   1997   2000      2001                        2001                                    2003                                     2003                                    2004
                  For more than half of the fifty years computer programmers have been    This timeline includes fifty of the more than 2500 documented
                  writing code, O’Reilly has provided developers with comprehensive,      programming languages. It is based on an original diagram created


www.oreilly.com
                  in-depth technical information. We’ve kept pace with rapidly changing   by Éric Lévénez (www.levenez.com), augmented with suggestions
                  technologies as new languages have emerged, developed, and              from O’Reilly authors, friends, and conference attendees.
                  matured. Whether you want to learn something new or need
                                                                                          For information and discussion on this poster,
                  answers to tough technical questions, you’ll find what you need
                                                                                          go to www.oreilly.com/go/languageposter.
                  in O’Reilly books and on the O’Reilly Network.
                                                                                                                                                                                                                                                                                   ©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417




   This timeline includes 50 of the more than 2500 documented programming languages.


                                                                                                                                                                                                                                                 TI1220 - Introduction 14
Programming Languages in TI

TI1200: Object-Oriented Programming

•   Java

TI1400: Computer Systems

•   Assembly

TI1500: Web- and Database Technology

•   HTML, PHP, SQL, JavaScript

TI1600: Multi-Agent Systems

•   Prolog, GOAL


                                       TI1220 - Introduction 15
“A programming language is low level when its
programs require attention to the irrelevant”
  Alan J. Perlis. Epigrams on Programming. SIGPLAN Notices, 17(9):7-13, 1982.




                                                    TI1220 - Introduction 16
Understanding Computation
purpose of programming languages

Encoding computation

•   Computer needs list of instructions to move its parts


Understanding computation

•   Discuss concepts

•   Formulate algorithms

•   Reason about problem solutions


Programming languages are for people

                                                            TI1220 - Introduction 17
Increasing the Level of Abstraction
concepts of programming languages
calc:
 push eBP                                   ; save old frame pointer
 mov eBP,eSP                                ; get new frame pointer
 sub eSP,localsize                          ; reserve place for locals
 .
 .                                          ; perform calculations, leave result in AX
 .
 mov eSP,eBP                                ; free space for locals
 pop eBP                                    ; restore old frame pointer
 ret paramsize                              ; free parameter space and return

push     eAX                            ;    pass some register result
push     byte[eBP+20]                   ;    pass some memory variable (FASM/TASM syntax)
push     3                              ;    pass some constant
call     calc                           ;    the returned result is now in eAX

http://en.wikipedia.org/wiki/Calling_convention



def f(x)={ ... }                                                 f(e1)
                                                                            TI1220 - Introduction 18
Programming Models
concepts of programming languages

Language provides model of computation

•   data & operations, composition & abstraction


Language targets application domain

•   Systems programming

•   Embedded systems

•   Web programming

•   Enterprise software



                                                   TI1220 - Introduction 19
Programming Language DNA
concepts of programming languages

Scope and binding

•   declaration and binding of names, free and bound
    occurrences, renaming, substitution

Data structures

•   product and sum types, records, recursive types

Modularization and data abstraction

•   modules, classes, higher-order functions, class-based
    vs prototype inheritance

Syntax and interpretation

                                                            TI1220 - Introduction 20
Why Study Concepts?
concepts of programming languages

Design abstractions for new domains

•   from library to language feature

•   apply PL techniques (MapReduce)

Learn new computational models

•   understand fundamental ideas underlying PLs

•   experience with variety of models

•   learn new languages in future

Choosing the right language


                                                  TI1220 - Introduction 21
Goals of this Course
concepts of programming languages

•   Understand programming languages and programs in
    terms of concepts that transcend individual languages

•   Consider advantages and disadvantages in the use of
    particular languages and concepts

•   Analyze programs in terms of concepts

•   Application of concepts in designing programs




                                                            TI1220 - Introduction 22
Approach
concepts of programming languages

Study three concrete languages

•   Scala + C + JavaScript

•   Learn to program in these languages

•   Learn concepts by using them in programming

•   Programming assignments about languages

Generalize

•   What are the underlying ideas?

•   Learn to learn new languages



                                                  TI1220 - Introduction 23
Scala
functional programming

•   Lecture 1: Getting Started with Scala

•   Lecture 2: Functional Objects

•   Lecture 3: Functions & Closures

•   Lecture 4: List Programming (Recursion)

•   Lecture 5: Trees & XML

•   Lecture 6: Composition, Inheritance, Traits

•   Lecture 7: Modular Programming

•   Assignment: interpreter for tiny functional language



                                                           TI1220 - Introduction 24
C
systems programming

•   Lecture 8: Memory Management

    •   stack vs heap

    •   pointers

•   Lecture 9: Implementing Objects

    •   function pointers

    •   simulating dynamic dispatch

•   Assignment: implementing OO in C




                                       TI1220 - Introduction 25
JavaScript
web programming

Prototype-Based Object-Oriented Language

•   Lecture 10: Prototypal Inheritance

    •   History: Smalltalk, Self (Squeak)

•   Lecture 11: Asynchronous functions

•   Lecture 12: DOM manipulation

•   Lecture 13: Regular expressions

•   Lecture 14: mobl: a domain-specific language for the
    mobile web

•   Assignment: playing with prototypes


                                                           TI1220 - Introduction 26
Meta-Programming
implementation of programming languages

Other courses consider internals of languages

•   IN2505: Fundamental Computer Science 2: Theory of Computation

    •   grammars and automata

•   IN4303: Compiler Construction

    •   translation of high-level source to machine language

•   IN4308: Model-Driven Software Development

    •   design of domain-specific software languages




                                                               TI1220 - Introduction 27
III
Course Organization




                      TI 1220 - Lecture 1: Introduction 28
Ingredients
course organization

This is a semester course

•   Q3 + Q4

Lectures

•   Tuesday morning

Practicum

•   on Tuesday or Thursday afternoon

•   Exercises + Graded Assignments

Exams


                                       TI1220 - Introduction 29
Exams
course organization

Exam 1

•   Monday 11 April, 2011, 9:00-12:00

•   E1: about material of Q3 (Scala)

Exam 2

•   Wednesday, 22 June, 2011, 9:00-12:00

•   If Exam 1 >= 6

•   then E2a: material of Q4 (C+JavaScript)

•   else E2b: material Q3+Q4 (Scala+C+JavaScript)



                                                    TI1220 - Introduction 30
Exams
course organization

Exam 3 (resit)

•   If Exam 2 < 6, even if Exam 1 >= 6

•   Wednesday, 24 August, 2011, 9:00-12:00

•   E3: material Q3+Q4 (Scala+C+JavaScript)


Note

•   next year programming exams




                                              TI1220 - Introduction 31
Practicum
course organization

Scala (Q3)

•   Exercises: hand in on paper to assistants at end of lab!

•   Assignment 1 (graded)

C (Q4)

•   Assignment 2 (graded)

JavaScript (Q4)

•   Assignment 3 (graded)

Graded assignments should be submitted as code


                                                           TI1220 - Introduction 32
Final Grade
course organization
val H = all exercises handed in

val A = 0.4*A1 + 0.3*A2 + 0.3*A3

val E2 = if(E1 >= 6) (E1 + E2a)/2

         else E2b

val E = if(E2 >= 6) E2 else E3

val G = if(H && Ai >= 6 && E >= 6)

          0.4*A + 0.6E

        else min(E, 5)

                                     TI1220 - Introduction 33
Practicum Groups
course organization

Tuesday: Group 1

•   mentor groups 1 to 6

Thursday: Group 2

•   mentor groups 7 to 12




                            TI1220 - Introduction 34
Practicum Assistants
course organization



      Tuesday             Thursday

  Maartje de Jonge   Sander van der Burg

 Laurent Verweijen     Bart van Vuuren

     Vlad Vergu           Peter Pul

  Joost Heijkoop



                                           TI1220 - Introduction 35
coffee break




               TI1220 - Introduction 36
IV
The Scala Programming Language




                           Term Rewriting 37
Programming Language Schools
imperative vs functional programming

Imperative Programming (Algol, C, Pascal)

•   programming with side effects

•   structured control-flow

Object-Oriented Programming (C++, Java)

•   imperative programming with data abstraction

Functional Programming (ML, Haskell)

•   functions as first-class citizens

•   immutable data (pure)


                                                   TI1220 - Introduction 38
Pizza
history


POPL 1997                             Philip Wadler, Martin Odersky, Gilad Bracha, Dave Stoutamire (source: http://lamp.epfl.ch/pizza/gj/)




•   "Pizza into Java: Translating theory into practice", Martin Odersky and
    Philip Wadler. Proc. 24th ACM Symposium on Principles of Programming
    Languages, Paris, France, January 1997.

Extending Java with Functional Concepts

•   Parametric polymorphism (generics)

•   First-class functions (function pointers)

•   Algebraic data types (class cases and pattern matching)

Continued in GJ and Java Generics

                                                                                      TI1220 - Introduction 39
Scala
history

A Scalable Language

•   object-oriented + functional programming

Properties

•   compatible (combines with Java)

•   concise (sugar + abstractions)

•   high-level

•   statically typed

Designed by Martin Odersky et al. at EPFL


                                               TI1220 - Introduction 40
Scala in Industry
history

Scala at Twitter

•   Ruby-on-Rails did not scale

•   Replaced back-end processing (API) with Scala

BankSimple

•   Back-end services in Scala or Clojure



Alex Payne

•   Programming Scala by Wampler & Payne


                                                    TI1220 - Introduction 41
Programming in Scala
Book

Programming in Scala
A comprehensive step-by-step guide

by Martin Odersky, Lex Spoon, and Bill Venners


http://www.artima.com/shop/programming_in_scala


Available as e-book (PDF)

Lectures are based on book; not everything in book is on slides; reading
book is required; see Literature slides at end of each lecture for required
reading!




                                                                       TI1220 - Introduction 42
Installing Scala

Download Interpreter & Compiler

•   Make your own installation (assignment 1)

•   http://www.scala-lang.org/downloads

Editors

•   Emacs, Vi, <your favorite editor>

Integrated Development Environments

•   Plugins for Eclipse, IntelliJ, NetBeans




                          B:2.1                 TI1220 - Introduction 43
The Scala Interpreter



$ scala
Welcome to Scala version 2.8.0.final (Java HotSpot(TM)
64-Bit Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information..




                 B:2.1                    TI1220 - Introduction 44
V
Variables and Functions




            B:2           Term Rewriting 45
Evaluating Expressions
repl: read, eval, print loop


scala> 1 + 2
res0: Int = 3

scala> res0 * 3
res1: Int = 9

scala> println("Hello, world!")
Hello, world!




                  B:2.1           TI1220 - Introduction 46
Variable Declaration and Use
binding values to names

scala> val msg = "Hello, world!"
msg: java.lang.String = Hello, world!

scala> val msg2: java.lang.String =
     | "Hello again, world!"
msg2: java.lang.String = Hello again, world!

scala> val msg3: String = "Hello yet again, world!"
msg3: String = Hello yet again, world!

scala> println(msg)
Hello, world!




                 B:2.2                    TI1220 - Introduction 47
Immutable and Mutable Variables
changing value bound to name


scala> msg = "Goodbye cruel world!"
<console>:6: error: reassignment to val
       msg = "Goodbye cruel world!"

scala> var greeting = "Hello, world!"
greeting: java.lang.String = Hello, world!

scala> greeting = "Leave me alone, world!"
greeting: java.lang.String = Leave me alone, world!




                 B:2.3                       TI1220 - Introduction 48
Function Definition and Call
binding functions to names


scala> def max(x: Int, y: Int): Int = {
         if (x > y) x
         else y
       }
max: (x: Int,y: Int)Int

scala> max(3, 5)
res2: Int = 5


scala> def max2(x: Int, y: Int) = if (x > y) x else y
max: (x: Int,y: Int)Int



                   B:2.3                  TI1220 - Introduction 49
Unit
the type of side effects




scala> def greet() = println("Hello, world!")
greet: ()Unit

scala> greet()
Hello, world!




                 B:2.3                    TI1220 - Introduction 50
Scala Scripts



//file: hello.scala
println("Hello, world, from a script!")




$ scala hello.scala
Hello, world, from a script!




                 B:2.4                    TI1220 - Introduction 51
Scala Scripts
with arguments


//file: helloarg.scala
// Say hello to the first argument
println("Hello, "+ args(0) +"!")



$ scala helloarg.scala delft
Hello, delft!




                 B:2.4               TI1220 - Introduction 52
Control-Flow
imperative style
// file: printargs.scala
var i = 0
while (i < args.length) {
  if (i != 0)
    print(" ")
  print(args(i))
  i += 1
}
println()



$ scala printargs.scala imperative style
imperative style



                   B:2.5                   TI1220 - Introduction 53
Control-Flow
functional style



// file: printargsfun.scala
args.foreach(arg => println(arg))



$ scala printargsfun.scala first class functions
first
class
functions




                   B:2.5                  TI1220 - Introduction 54
Control-Flow
functional style



for (arg <- args)
  println(arg)




                    B:2.5   TI1220 - Introduction 55
Functional Style

Functional style

•   functions are values

•   operations map input values to output values

    •   instead of changing values in place (side effects)

A balanced attitude

•   Prefer vals, immutable objects, and methods without side effects.

•   Use vars, mutable objects, and methods with side effects when you have
    a specific need and justification for them.




                           B:3.11                            TI1220 - Introduction 56
$ scala linecounts.scala linecounts.scala
22 | import scala.io.Source
 0 |
55 | def widthOfLength(s: String) = s.length.toString.length
 0 |
22 | if (args.length > 0) {
54 |   val lines = Source.fromFile(args(0)).getLines.toList
37 |   val longestLine = lines.reduceLeft(
49 |        (a, b) => if (a.length > b.length) a else b
 3 |   )
43 |   val maxWidth = widthOfLength(longestLine)
23 |   for (line <- lines) {
50 |      val numSpaces = maxWidth - widthOfLength(line)
33 |      val padding = " " * numSpaces
47 |      println(padding + line.length +" | "+ line)
 3 |   }
 1 | }
 4 | else
46 |   Console.err.println("Please enter filename")


                    B:3.12                   TI1220 - Introduction 57
Print Lines
charcounts

import scala.io.Source
if (args.length > 0) {
  for (line <- Source.fromFile(args(0)).getLines)
    println(line.length + " | " + line)
} else
  Console.err.println("Please enter filename")


                 $ scala countchars1.scala countchars1.scala
                 22 | import scala.io.Source
                 22 | if (args.length > 0) {
                 49 | for (line <- Source.fromFile(args(0)).getLines)
                 37 |    println(line.length + " " + line)
                 6 | } else
                 46 | Console.err.println("Please enter filename")


                 B:2.3                        TI1220 - Introduction 58
Width of Longest Line
charcounts


def widthOfLength(s: String) = s.length.toString.length

val lines = Source.fromFile(args(0)).getLines.toList

val longestLine = lines.reduceLeft(
  (a, b) => if (a.length > b.length) a else b
)

val maxWidth = widthOfLength(longestLine)




                 B:3.12                     TI1220 - Introduction 59
Print Lines with Length
charcounts



for (line <- lines) {
  val numSpaces = maxWidth - widthOfLength(line)

    val padding = " " * numSpaces

    println(padding + line.length +" | "+ line)
}




                   B:3.12                   TI1220 - Introduction 60
import scala.io.Source

def widthOfLength(s: String) = s.length.toString.length

if (args.length > 0) {
  val lines = Source.fromFile(args(0)).getLines.toList
  val longestLine = lines.reduceLeft(
       (a, b) => if (a.length > b.length) a else b
  )
  val maxWidth = widthOfLength(longestLine)
  for (line <- lines) {
     val numSpaces = maxWidth - widthOfLength(line)
     val padding = " " * numSpaces
     println(padding + line.length +" | "+ line)
  }
}
else
  Console.err.println("Please enter filename")



                 B:3.12                   TI1220 - Introduction 61
VI
Classes and Objects




           B:2.3      Term Rewriting 62
Class: Object Blueprint
declaration and instantiation



class ChecksumAccumulator {}

val acc = new ChecksumAccumulator
val csa = new ChecksumAccumulator




                 B:4.1              TI1220 - Introduction 63
Fields (Instance Variables)
object state



class ChecksumAccumulator {
  var sum = 0
}

val acc = new ChecksumAccumulator
val csa = new ChecksumAccumulator

acc.sum = 3




                 B:4.1              TI1220 - Introduction 64
Reference vs Content
object state

class ChecksumAccumulator {
  var sum = 0
}

val acc = new ChecksumAccumulator
val csa = new ChecksumAccumulator

acc.sum = 3

// Won’t compile, because acc is a val
acc = new ChecksumAccumulator




                 B:4.1                   TI1220 - Introduction 65
Data Hiding
object state




class ChecksumAccumulator {
  private var sum = 0
}

val acc = new ChecksumAccumulator
acc.sum = 5 // Won’t compile, because sum is private




                 B:4.1                    TI1220 - Introduction 66
Methods
object behavior


class ChecksumAccumulator {
  private var sum = 0
  def add(b: Byte): Unit = {
    sum += b
  }
  def checksum(): Int = {
    return ~(sum & 0xFF) + 1
  }
}




                  B:4.1        TI1220 - Introduction 67
Methods
parameters are vals



def add(b: Byte): Unit = {
  b = 1 // This won’t compile, because b is a val
  sum += b
}




                 B:4.1                    TI1220 - Introduction 68
Methods
sugar




// file: ChecksumAccumulator.scala
class ChecksumAccumulator {
  private var sum = 0
  def add(b: Byte) { sum += b }
  def checksum(): Int = ~(sum & 0xFF) + 1
}




                 B:4.1                      TI1220 - Introduction 69
Singleton Objects
defining ‘static’ methods
import scala.collection.mutable.Map
object ChecksumAccumulator {
  private val cache = Map[String, Int]()
  def calculate(s: String): Int =
    if (cache.contains(s))
      cache(s)
    else {
      val acc = new ChecksumAccumulator
      for (c <- s)
         acc.add(c.toByte)
      val cs = acc.checksum()
      cache += (s -> cs)
      cs
    }
}

                 B:4.3                     TI1220 - Introduction 70
Using Singleton Objects
methods and state



ChecksumAccumulator.calculate("Every value is an object.")




                 B:4.3                    TI1220 - Introduction 71
Scala Application

// file: Summer.scala
import ChecksumAccumulator.calculate
object Summer {
  def main(args: Array[String]) {
    for (arg <- args)
      println(arg + ": " + calculate(arg))
  }
}


$ scalac ChecksumAccumulator.scala Summer.scala
$ scala Summer of love
of: -213
love: -182



                     B:4.4                        TI1220 - Introduction 72
VII
Summary




          Term Rewriting 73
Summary
lessons learned

Programming languages are for people

•   to reason about solutions for problems

Declaration and use

•   binding values to names, referring to values using
    names

Immutable values

•   cannot be changed once created (no side effects)

Objects

•   data structures with methods

                         B:2.3                           TI1220 - Introduction 74
Exam Question

What happens when we execute the following code:

val greetStrings = new Array[String](3)
greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!n"

(a) Error: greetStrings is an immutable variable that cannot
    be assigned to
(b) Error: Array is a immutable data structure that cannot
    be assigned to
(c) No error: greetStrings is a mutable variable that can be
    assigned to
(d) No error: Array is a mutable data structure that can be
    assigned to


                        B:2.3                             TI1220 - Introduction 75
Exercises Week 1
getting started with Scala

Set up your Scala environment

•   download and install Scala interpreter and compiler

Scala basics

•   evaluating expressions

•   defining functions

•   running scripts

•   making applications

•   hand in on paper to student assistants!



                          B:2.3                           TI1220 - Introduction 76
Literature
required reading

Programming in Scala

•   Chapter 1: A Scalable Language

•   Chapter 2: First Steps in Scala

•   Chapter 3: Next Steps in Scala

•   Chapter 4: Classes and Objects

•   Chapter 5: Basic Types and Operations




                                            TI1220 - Introduction 77
Literature
http://researchr.org/bibliography/ti1220




                                       TI1220 - Introduction 78
Outlook
coming next

Functional programming

•   Lecture 2: Functional Objects
    •   Chapters 6, 7

•   Lecture 3: Functions & Closures
    •   Chapters 8, 9

•   Lecture 4: List Programming
    •   Chapters 15, 16, 17

Lab Week 1

•   Getting started with Scala



                              B:2.3   TI1220 - Introduction 79
IX
Notes




        Term Rewriting 80
Pictures
copyrights
Slide 1:
   Kinetica by Paul Downey, Some rights reserved
Slide 2:
   McPhillips’ Map of the City of Winnipeg by Manitoba Historical Maps, some rights reserved
Slide 4:
    The Blue Hour by Andreas Wonisch, Some rights reserved
Slide 5:
   by Eelco Visser, Some rights reserved
Slide 8:
    I’m listening by Melvin Gaal, some rights reserved
Slide 10:
    Bombe detail by Garret Coakley, Some rights reserved
Slide 13:
    Alan Turing by oalfonso, some rights reserved
Slide 14:
    History of Programming Languages by O’Reilly
Slide:
    ABZ-DNA by dulhunk, some rights reserved
Slide 32, 34:
   Envelopes by benchilada, some rights reserved
Slide 33:
   Report card by Carosaurus, some rights reserved
Slide 36:
   paper coffee cup by Shutterstock, some rights reserved


                                B:2.3                                       TI1220 - Introduction 81
Pictures
copyrights
Slide 40:
    Dinner at Roussillon (Martin Odersky) by Miles Sabin, some rights reserved
Slide 41:
    Portrait: Alex Payne by Dave Fayram, some rights reserved
Slide 43:
     “Plumbing Nightmare” by Natalie Wilkie, some rights reserved
Slide 72:
    HIV: The Moleskine Summary by Niels Olson
Slide 75, 76:
    remember to thank all the books you haven’t read over the past three years
    by Natalia Osiatynska, Some rights reserved
Slide 7, 73:
    Stupid Exam by Remi Carreiro, Some rights reserved
Slide 74:
   Practice makes perfect by Simon Probert
Slide 10:
   Bombe detail by Garret Coakley, Some rights reserved
Slide 29:
   1.12.2011 <recipes> 362/365 by Phil Roeder, Some rights reserved
Slide 22,23:
   China Tibet Himalaya by Bernhard Goldbach, Some rights reserved
Slide 17:
   Thinking at Hell’s gate by innoxiuss, Some rights reserved


                                B:2.3                                       TI1220 - Introduction 82

More Related Content

Similar to Concepts of Programming Languages

Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)Dastan Kamaran
 
Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)Dastan Kamaran
 
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
Introduction to Python GUI development with Delphi for Python - Part 1:   Del...Introduction to Python GUI development with Delphi for Python - Part 1:   Del...
Introduction to Python GUI development with Delphi for Python - Part 1: Del...Embarcadero Technologies
 
Chtp4 01
Chtp4 01Chtp4 01
Chtp4 01manedar
 
Delphi 1 to Delphi XE7: 20 years of Continuous Innovation by David I
Delphi 1 to Delphi XE7: 20 years of Continuous Innovation by David IDelphi 1 to Delphi XE7: 20 years of Continuous Innovation by David I
Delphi 1 to Delphi XE7: 20 years of Continuous Innovation by David IDavid Intersimone
 
Introduction to Computers, the Internet and the Web
Introduction to Computers, the Internet and the WebIntroduction to Computers, the Internet and the Web
Introduction to Computers, the Internet and the WebAndy Juan Sarango Veliz
 
IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...
IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...
IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...John Head
 
Leitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progrLeitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progrPROF COMPUTAÇÃO Bordoni
 
Introduction to course
Introduction to courseIntroduction to course
Introduction to coursenikit meshram
 
C++programing
C++programingC++programing
C++programingrmvvr143
 
Programing paradigm &amp; implementation
Programing paradigm &amp; implementationPrograming paradigm &amp; implementation
Programing paradigm &amp; implementationBilal Maqbool ツ
 
Applications of the Reverse Engineering Language REIL
Applications of the Reverse Engineering Language REILApplications of the Reverse Engineering Language REIL
Applications of the Reverse Engineering Language REILzynamics GmbH
 

Similar to Concepts of Programming Languages (20)

Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)
 
Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)Oop lecture1-chapter1(review of java)
Oop lecture1-chapter1(review of java)
 
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
Introduction to Python GUI development with Delphi for Python - Part 1:   Del...Introduction to Python GUI development with Delphi for Python - Part 1:   Del...
Introduction to Python GUI development with Delphi for Python - Part 1: Del...
 
Chtp4 01
Chtp4 01Chtp4 01
Chtp4 01
 
Compilers.pptx
Compilers.pptxCompilers.pptx
Compilers.pptx
 
Delphi Unicode Migration for Mere Mortals
Delphi Unicode Migration for Mere MortalsDelphi Unicode Migration for Mere Mortals
Delphi Unicode Migration for Mere Mortals
 
C programming Introduction
C programming IntroductionC programming Introduction
C programming Introduction
 
Unit1 pps
Unit1 ppsUnit1 pps
Unit1 pps
 
Delphi 1 to Delphi XE7: 20 years of Continuous Innovation by David I
Delphi 1 to Delphi XE7: 20 years of Continuous Innovation by David IDelphi 1 to Delphi XE7: 20 years of Continuous Innovation by David I
Delphi 1 to Delphi XE7: 20 years of Continuous Innovation by David I
 
Introduction to Computers, the Internet and the Web
Introduction to Computers, the Internet and the WebIntroduction to Computers, the Internet and the Web
Introduction to Computers, the Internet and the Web
 
IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...
IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...
IamLUG 2011: The Never Ending Integration Story: How to Integrate Your Lotus ...
 
Leitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progrLeitura complementar 07 - Linha do tempo, ling.progr
Leitura complementar 07 - Linha do tempo, ling.progr
 
Introduction to F#
Introduction to F#Introduction to F#
Introduction to F#
 
Introduction to course
Introduction to courseIntroduction to course
Introduction to course
 
C++programing
C++programingC++programing
C++programing
 
C++programing
C++programingC++programing
C++programing
 
The History of Programming Languages
The History of Programming LanguagesThe History of Programming Languages
The History of Programming Languages
 
Programing paradigm &amp; implementation
Programing paradigm &amp; implementationPrograming paradigm &amp; implementation
Programing paradigm &amp; implementation
 
Applications of the Reverse Engineering Language REIL
Applications of the Reverse Engineering Language REILApplications of the Reverse Engineering Language REIL
Applications of the Reverse Engineering Language REIL
 
TEI CONFERENCE 2016 LINHD Presentation
TEI CONFERENCE 2016 LINHD PresentationTEI CONFERENCE 2016 LINHD Presentation
TEI CONFERENCE 2016 LINHD Presentation
 

More from Eelco Visser

CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingCS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingEelco Visser
 
CS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesCS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesEelco Visser
 
CS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | ParsingCS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | ParsingEelco Visser
 
CS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definitionCS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definitionEelco Visser
 
CS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: IntroductionCS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: IntroductionEelco Visser
 
A Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation RulesA Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation RulesEelco Visser
 
Declarative Type System Specification with Statix
Declarative Type System Specification with StatixDeclarative Type System Specification with Statix
Declarative Type System Specification with StatixEelco Visser
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionEelco Visser
 
Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)Eelco Visser
 
Compiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory ManagementCompiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory ManagementEelco Visser
 
Compiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | InterpretersCompiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | InterpretersEelco Visser
 
Compiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code GenerationCompiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code GenerationEelco Visser
 
Compiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual MachinesCompiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual MachinesEelco Visser
 
Compiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone FrameworksCompiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone FrameworksEelco Visser
 
Compiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow AnalysisCompiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow AnalysisEelco Visser
 
Compiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint ResolutionCompiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint ResolutionEelco Visser
 
Compiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type ConstraintsCompiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type ConstraintsEelco Visser
 
Compiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingCompiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingEelco Visser
 
Compiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static AnalysisCompiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static AnalysisEelco Visser
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingEelco Visser
 

More from Eelco Visser (20)

CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term RewritingCS4200 2019 | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
 
CS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic ServicesCS4200 2019 | Lecture 4 | Syntactic Services
CS4200 2019 | Lecture 4 | Syntactic Services
 
CS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | ParsingCS4200 2019 | Lecture 3 | Parsing
CS4200 2019 | Lecture 3 | Parsing
 
CS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definitionCS4200 2019 | Lecture 2 | syntax-definition
CS4200 2019 | Lecture 2 | syntax-definition
 
CS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: IntroductionCS4200 2019 Lecture 1: Introduction
CS4200 2019 Lecture 1: Introduction
 
A Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation RulesA Direct Semantics of Declarative Disambiguation Rules
A Direct Semantics of Declarative Disambiguation Rules
 
Declarative Type System Specification with Statix
Declarative Type System Specification with StatixDeclarative Type System Specification with Statix
Declarative Type System Specification with Statix
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler Construction
 
Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)Domain Specific Languages for Parallel Graph AnalytiX (PGX)
Domain Specific Languages for Parallel Graph AnalytiX (PGX)
 
Compiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory ManagementCompiler Construction | Lecture 15 | Memory Management
Compiler Construction | Lecture 15 | Memory Management
 
Compiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | InterpretersCompiler Construction | Lecture 14 | Interpreters
Compiler Construction | Lecture 14 | Interpreters
 
Compiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code GenerationCompiler Construction | Lecture 13 | Code Generation
Compiler Construction | Lecture 13 | Code Generation
 
Compiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual MachinesCompiler Construction | Lecture 12 | Virtual Machines
Compiler Construction | Lecture 12 | Virtual Machines
 
Compiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone FrameworksCompiler Construction | Lecture 11 | Monotone Frameworks
Compiler Construction | Lecture 11 | Monotone Frameworks
 
Compiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow AnalysisCompiler Construction | Lecture 10 | Data-Flow Analysis
Compiler Construction | Lecture 10 | Data-Flow Analysis
 
Compiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint ResolutionCompiler Construction | Lecture 9 | Constraint Resolution
Compiler Construction | Lecture 9 | Constraint Resolution
 
Compiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type ConstraintsCompiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 8 | Type Constraints
 
Compiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type CheckingCompiler Construction | Lecture 7 | Type Checking
Compiler Construction | Lecture 7 | Type Checking
 
Compiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static AnalysisCompiler Construction | Lecture 6 | Introduction to Static Analysis
Compiler Construction | Lecture 6 | Introduction to Static Analysis
 
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term RewritingCompiler Construction | Lecture 5 | Transformation by Term Rewriting
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
 

Recently uploaded

Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfJemuel Francisco
 
FILIPINO PSYCHology sikolohiyang pilipino
FILIPINO PSYCHology sikolohiyang pilipinoFILIPINO PSYCHology sikolohiyang pilipino
FILIPINO PSYCHology sikolohiyang pilipinojohnmickonozaleda
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Celine George
 
What is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPWhat is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPCeline George
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxAnupkumar Sharma
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfMr Bounab Samir
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...Postal Advocate Inc.
 
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptxSherlyMaeNeri
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 
ACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfSpandanaRallapalli
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxMaryGraceBautista27
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatYousafMalik24
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomnelietumpap1
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONHumphrey A Beña
 

Recently uploaded (20)

Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdfGrade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
Grade 9 Quarter 4 Dll Grade 9 Quarter 4 DLL.pdf
 
FILIPINO PSYCHology sikolohiyang pilipino
FILIPINO PSYCHology sikolohiyang pilipinoFILIPINO PSYCHology sikolohiyang pilipino
FILIPINO PSYCHology sikolohiyang pilipino
 
Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17Field Attribute Index Feature in Odoo 17
Field Attribute Index Feature in Odoo 17
 
What is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERPWhat is Model Inheritance in Odoo 17 ERP
What is Model Inheritance in Odoo 17 ERP
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
 
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptxLEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
 
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdfLike-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
Like-prefer-love -hate+verb+ing & silent letters & citizenship text.pdf
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
 
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
call girls in Kamla Market (DELHI) 🔝 >༒9953330565🔝 genuine Escort Service 🔝✔️✔️
 
Judging the Relevance and worth of ideas part 2.pptx
Judging the Relevance  and worth of ideas part 2.pptxJudging the Relevance  and worth of ideas part 2.pptx
Judging the Relevance and worth of ideas part 2.pptx
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
ACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdfACC 2024 Chronicles. Cardiology. Exam.pdf
ACC 2024 Chronicles. Cardiology. Exam.pdf
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptx
 
Earth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice greatEarth Day Presentation wow hello nice great
Earth Day Presentation wow hello nice great
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
ENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choomENGLISH6-Q4-W3.pptxqurter our high choom
ENGLISH6-Q4-W3.pptxqurter our high choom
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATIONTHEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
THEORIES OF ORGANIZATION-PUBLIC ADMINISTRATION
 

Concepts of Programming Languages

  • 1. Concepts of Programming Languages Eelco Visser Delft TI1220 University of Technology Concepts of Programming Languages Challenge the future
  • 2. Overview today’s lecture A new course • from IN1605-B to TI1220 What is this course about? • why study concepts of programming languages? How is this course organized? • lectures and assignments Introduction to Scala • writing and running Scala programs TI1220 - Introduction 2
  • 3. I A New Course TI 1220 - Lecture 1: Introduction 3
  • 4. A New Course the only constant is change IN1605-B: Algoritmen en Programmeertalen: Programmeertalen • 4 ECTS • Haskell + C • Peter Kluijt TI1220: Concepten van Programmeertalen • 6 ECTS • Scala + C + JavaScript • Eelco Visser TI1220 - Introduction 4
  • 5. Under New Management Eelco Visser Lecturer • Dr. Eelco Visser • UHD in Software Engineering Research Group • http://eelcovisser.org • Contact: e.visser@tudelft.nl • first ask student assistants • send questions by email • appointment if necessary TI1220 - Introduction 5
  • 6. My Research software language design & engineering Spoofax Language Workbench • design and implement languages & IDEs • from high-level declarative specification Domain-specific language design • WebDSL: a DSL for web programming • Mobl: a DSL for mobile web applications Interaction design • researchr.org: building a digital library TI1220 - Introduction 6
  • 7. Examination Old Course You can still sit for exams of IN1605-B • Provided you have finished the lab (practicum) Sittings • Together with exam for this course (TI1220) • April 11, 2010 • June 22, 2010 TI1220 - Introduction 7
  • 8. Feedback Appreciated An invitation to Murphy • New content • New software • New lectures, assignments, exams • New lecturer • New assistants (mostly) Please let us know how it goes • report problems early • also let us know what goes right :) TI1220 - Introduction 8
  • 9. II Concepts of Programming Languages TI 1220 - Lecture 1: Introduction 9
  • 10. Computers Process Data data computer data TI1220 - Introduction 10
  • 11. Programmable Computers data computer data program TI1220 - Introduction 11
  • 12. Programming Language data computer data L program TI1220 - Introduction 12
  • 13. Turing Machines computability Turing/Church Thesis • Every effective computation can be carried out by a Turing machine* Corollary • All (Turing Complete) programming languages can express all effective computations • Why bother with new programming languages? (*) see IN2505 TI1220 - Introduction 13
  • 14. History of Programming Languages timeline History of Programming Languages 1954 1960 1965 1970 1975 1980 1985 1990 1995 2000 2001 2002 2003 2004 1986 1990 1990 1991 1991 1993 1994 1995 1996 1996 1997 1997 2000 2001 2001 2003 2003 2004 For more than half of the fifty years computer programmers have been This timeline includes fifty of the more than 2500 documented writing code, O’Reilly has provided developers with comprehensive, programming languages. It is based on an original diagram created www.oreilly.com in-depth technical information. We’ve kept pace with rapidly changing by Éric Lévénez (www.levenez.com), augmented with suggestions technologies as new languages have emerged, developed, and from O’Reilly authors, friends, and conference attendees. matured. Whether you want to learn something new or need For information and discussion on this poster, answers to tough technical questions, you’ll find what you need go to www.oreilly.com/go/languageposter. in O’Reilly books and on the O’Reilly Network. ©2004 O’Reilly Media, Inc. O’Reilly logo is a registered trademark of O’Reilly Media, Inc. All other trademarks are property of their respective owners. part#30417 This timeline includes 50 of the more than 2500 documented programming languages. TI1220 - Introduction 14
  • 15. Programming Languages in TI TI1200: Object-Oriented Programming • Java TI1400: Computer Systems • Assembly TI1500: Web- and Database Technology • HTML, PHP, SQL, JavaScript TI1600: Multi-Agent Systems • Prolog, GOAL TI1220 - Introduction 15
  • 16. “A programming language is low level when its programs require attention to the irrelevant” Alan J. Perlis. Epigrams on Programming. SIGPLAN Notices, 17(9):7-13, 1982. TI1220 - Introduction 16
  • 17. Understanding Computation purpose of programming languages Encoding computation • Computer needs list of instructions to move its parts Understanding computation • Discuss concepts • Formulate algorithms • Reason about problem solutions Programming languages are for people TI1220 - Introduction 17
  • 18. Increasing the Level of Abstraction concepts of programming languages calc: push eBP ; save old frame pointer mov eBP,eSP ; get new frame pointer sub eSP,localsize ; reserve place for locals . . ; perform calculations, leave result in AX . mov eSP,eBP ; free space for locals pop eBP ; restore old frame pointer ret paramsize ; free parameter space and return push eAX ; pass some register result push byte[eBP+20] ; pass some memory variable (FASM/TASM syntax) push 3 ; pass some constant call calc ; the returned result is now in eAX http://en.wikipedia.org/wiki/Calling_convention def f(x)={ ... } f(e1) TI1220 - Introduction 18
  • 19. Programming Models concepts of programming languages Language provides model of computation • data & operations, composition & abstraction Language targets application domain • Systems programming • Embedded systems • Web programming • Enterprise software TI1220 - Introduction 19
  • 20. Programming Language DNA concepts of programming languages Scope and binding • declaration and binding of names, free and bound occurrences, renaming, substitution Data structures • product and sum types, records, recursive types Modularization and data abstraction • modules, classes, higher-order functions, class-based vs prototype inheritance Syntax and interpretation TI1220 - Introduction 20
  • 21. Why Study Concepts? concepts of programming languages Design abstractions for new domains • from library to language feature • apply PL techniques (MapReduce) Learn new computational models • understand fundamental ideas underlying PLs • experience with variety of models • learn new languages in future Choosing the right language TI1220 - Introduction 21
  • 22. Goals of this Course concepts of programming languages • Understand programming languages and programs in terms of concepts that transcend individual languages • Consider advantages and disadvantages in the use of particular languages and concepts • Analyze programs in terms of concepts • Application of concepts in designing programs TI1220 - Introduction 22
  • 23. Approach concepts of programming languages Study three concrete languages • Scala + C + JavaScript • Learn to program in these languages • Learn concepts by using them in programming • Programming assignments about languages Generalize • What are the underlying ideas? • Learn to learn new languages TI1220 - Introduction 23
  • 24. Scala functional programming • Lecture 1: Getting Started with Scala • Lecture 2: Functional Objects • Lecture 3: Functions & Closures • Lecture 4: List Programming (Recursion) • Lecture 5: Trees & XML • Lecture 6: Composition, Inheritance, Traits • Lecture 7: Modular Programming • Assignment: interpreter for tiny functional language TI1220 - Introduction 24
  • 25. C systems programming • Lecture 8: Memory Management • stack vs heap • pointers • Lecture 9: Implementing Objects • function pointers • simulating dynamic dispatch • Assignment: implementing OO in C TI1220 - Introduction 25
  • 26. JavaScript web programming Prototype-Based Object-Oriented Language • Lecture 10: Prototypal Inheritance • History: Smalltalk, Self (Squeak) • Lecture 11: Asynchronous functions • Lecture 12: DOM manipulation • Lecture 13: Regular expressions • Lecture 14: mobl: a domain-specific language for the mobile web • Assignment: playing with prototypes TI1220 - Introduction 26
  • 27. Meta-Programming implementation of programming languages Other courses consider internals of languages • IN2505: Fundamental Computer Science 2: Theory of Computation • grammars and automata • IN4303: Compiler Construction • translation of high-level source to machine language • IN4308: Model-Driven Software Development • design of domain-specific software languages TI1220 - Introduction 27
  • 28. III Course Organization TI 1220 - Lecture 1: Introduction 28
  • 29. Ingredients course organization This is a semester course • Q3 + Q4 Lectures • Tuesday morning Practicum • on Tuesday or Thursday afternoon • Exercises + Graded Assignments Exams TI1220 - Introduction 29
  • 30. Exams course organization Exam 1 • Monday 11 April, 2011, 9:00-12:00 • E1: about material of Q3 (Scala) Exam 2 • Wednesday, 22 June, 2011, 9:00-12:00 • If Exam 1 >= 6 • then E2a: material of Q4 (C+JavaScript) • else E2b: material Q3+Q4 (Scala+C+JavaScript) TI1220 - Introduction 30
  • 31. Exams course organization Exam 3 (resit) • If Exam 2 < 6, even if Exam 1 >= 6 • Wednesday, 24 August, 2011, 9:00-12:00 • E3: material Q3+Q4 (Scala+C+JavaScript) Note • next year programming exams TI1220 - Introduction 31
  • 32. Practicum course organization Scala (Q3) • Exercises: hand in on paper to assistants at end of lab! • Assignment 1 (graded) C (Q4) • Assignment 2 (graded) JavaScript (Q4) • Assignment 3 (graded) Graded assignments should be submitted as code TI1220 - Introduction 32
  • 33. Final Grade course organization val H = all exercises handed in val A = 0.4*A1 + 0.3*A2 + 0.3*A3 val E2 = if(E1 >= 6) (E1 + E2a)/2 else E2b val E = if(E2 >= 6) E2 else E3 val G = if(H && Ai >= 6 && E >= 6) 0.4*A + 0.6E else min(E, 5) TI1220 - Introduction 33
  • 34. Practicum Groups course organization Tuesday: Group 1 • mentor groups 1 to 6 Thursday: Group 2 • mentor groups 7 to 12 TI1220 - Introduction 34
  • 35. Practicum Assistants course organization Tuesday Thursday Maartje de Jonge Sander van der Burg Laurent Verweijen Bart van Vuuren Vlad Vergu Peter Pul Joost Heijkoop TI1220 - Introduction 35
  • 36. coffee break TI1220 - Introduction 36
  • 37. IV The Scala Programming Language Term Rewriting 37
  • 38. Programming Language Schools imperative vs functional programming Imperative Programming (Algol, C, Pascal) • programming with side effects • structured control-flow Object-Oriented Programming (C++, Java) • imperative programming with data abstraction Functional Programming (ML, Haskell) • functions as first-class citizens • immutable data (pure) TI1220 - Introduction 38
  • 39. Pizza history POPL 1997 Philip Wadler, Martin Odersky, Gilad Bracha, Dave Stoutamire (source: http://lamp.epfl.ch/pizza/gj/) • "Pizza into Java: Translating theory into practice", Martin Odersky and Philip Wadler. Proc. 24th ACM Symposium on Principles of Programming Languages, Paris, France, January 1997. Extending Java with Functional Concepts • Parametric polymorphism (generics) • First-class functions (function pointers) • Algebraic data types (class cases and pattern matching) Continued in GJ and Java Generics TI1220 - Introduction 39
  • 40. Scala history A Scalable Language • object-oriented + functional programming Properties • compatible (combines with Java) • concise (sugar + abstractions) • high-level • statically typed Designed by Martin Odersky et al. at EPFL TI1220 - Introduction 40
  • 41. Scala in Industry history Scala at Twitter • Ruby-on-Rails did not scale • Replaced back-end processing (API) with Scala BankSimple • Back-end services in Scala or Clojure Alex Payne • Programming Scala by Wampler & Payne TI1220 - Introduction 41
  • 42. Programming in Scala Book Programming in Scala A comprehensive step-by-step guide by Martin Odersky, Lex Spoon, and Bill Venners http://www.artima.com/shop/programming_in_scala Available as e-book (PDF) Lectures are based on book; not everything in book is on slides; reading book is required; see Literature slides at end of each lecture for required reading! TI1220 - Introduction 42
  • 43. Installing Scala Download Interpreter & Compiler • Make your own installation (assignment 1) • http://www.scala-lang.org/downloads Editors • Emacs, Vi, <your favorite editor> Integrated Development Environments • Plugins for Eclipse, IntelliJ, NetBeans B:2.1 TI1220 - Introduction 43
  • 44. The Scala Interpreter $ scala Welcome to Scala version 2.8.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22). Type in expressions to have them evaluated. Type :help for more information.. B:2.1 TI1220 - Introduction 44
  • 45. V Variables and Functions B:2 Term Rewriting 45
  • 46. Evaluating Expressions repl: read, eval, print loop scala> 1 + 2 res0: Int = 3 scala> res0 * 3 res1: Int = 9 scala> println("Hello, world!") Hello, world! B:2.1 TI1220 - Introduction 46
  • 47. Variable Declaration and Use binding values to names scala> val msg = "Hello, world!" msg: java.lang.String = Hello, world! scala> val msg2: java.lang.String = | "Hello again, world!" msg2: java.lang.String = Hello again, world! scala> val msg3: String = "Hello yet again, world!" msg3: String = Hello yet again, world! scala> println(msg) Hello, world! B:2.2 TI1220 - Introduction 47
  • 48. Immutable and Mutable Variables changing value bound to name scala> msg = "Goodbye cruel world!" <console>:6: error: reassignment to val msg = "Goodbye cruel world!" scala> var greeting = "Hello, world!" greeting: java.lang.String = Hello, world! scala> greeting = "Leave me alone, world!" greeting: java.lang.String = Leave me alone, world! B:2.3 TI1220 - Introduction 48
  • 49. Function Definition and Call binding functions to names scala> def max(x: Int, y: Int): Int = { if (x > y) x else y } max: (x: Int,y: Int)Int scala> max(3, 5) res2: Int = 5 scala> def max2(x: Int, y: Int) = if (x > y) x else y max: (x: Int,y: Int)Int B:2.3 TI1220 - Introduction 49
  • 50. Unit the type of side effects scala> def greet() = println("Hello, world!") greet: ()Unit scala> greet() Hello, world! B:2.3 TI1220 - Introduction 50
  • 51. Scala Scripts //file: hello.scala println("Hello, world, from a script!") $ scala hello.scala Hello, world, from a script! B:2.4 TI1220 - Introduction 51
  • 52. Scala Scripts with arguments //file: helloarg.scala // Say hello to the first argument println("Hello, "+ args(0) +"!") $ scala helloarg.scala delft Hello, delft! B:2.4 TI1220 - Introduction 52
  • 53. Control-Flow imperative style // file: printargs.scala var i = 0 while (i < args.length) { if (i != 0) print(" ") print(args(i)) i += 1 } println() $ scala printargs.scala imperative style imperative style B:2.5 TI1220 - Introduction 53
  • 54. Control-Flow functional style // file: printargsfun.scala args.foreach(arg => println(arg)) $ scala printargsfun.scala first class functions first class functions B:2.5 TI1220 - Introduction 54
  • 55. Control-Flow functional style for (arg <- args) println(arg) B:2.5 TI1220 - Introduction 55
  • 56. Functional Style Functional style • functions are values • operations map input values to output values • instead of changing values in place (side effects) A balanced attitude • Prefer vals, immutable objects, and methods without side effects. • Use vars, mutable objects, and methods with side effects when you have a specific need and justification for them. B:3.11 TI1220 - Introduction 56
  • 57. $ scala linecounts.scala linecounts.scala 22 | import scala.io.Source 0 | 55 | def widthOfLength(s: String) = s.length.toString.length 0 | 22 | if (args.length > 0) { 54 | val lines = Source.fromFile(args(0)).getLines.toList 37 | val longestLine = lines.reduceLeft( 49 | (a, b) => if (a.length > b.length) a else b 3 | ) 43 | val maxWidth = widthOfLength(longestLine) 23 | for (line <- lines) { 50 | val numSpaces = maxWidth - widthOfLength(line) 33 | val padding = " " * numSpaces 47 | println(padding + line.length +" | "+ line) 3 | } 1 | } 4 | else 46 | Console.err.println("Please enter filename") B:3.12 TI1220 - Introduction 57
  • 58. Print Lines charcounts import scala.io.Source if (args.length > 0) { for (line <- Source.fromFile(args(0)).getLines) println(line.length + " | " + line) } else Console.err.println("Please enter filename") $ scala countchars1.scala countchars1.scala 22 | import scala.io.Source 22 | if (args.length > 0) { 49 | for (line <- Source.fromFile(args(0)).getLines) 37 | println(line.length + " " + line) 6 | } else 46 | Console.err.println("Please enter filename") B:2.3 TI1220 - Introduction 58
  • 59. Width of Longest Line charcounts def widthOfLength(s: String) = s.length.toString.length val lines = Source.fromFile(args(0)).getLines.toList val longestLine = lines.reduceLeft( (a, b) => if (a.length > b.length) a else b ) val maxWidth = widthOfLength(longestLine) B:3.12 TI1220 - Introduction 59
  • 60. Print Lines with Length charcounts for (line <- lines) { val numSpaces = maxWidth - widthOfLength(line) val padding = " " * numSpaces println(padding + line.length +" | "+ line) } B:3.12 TI1220 - Introduction 60
  • 61. import scala.io.Source def widthOfLength(s: String) = s.length.toString.length if (args.length > 0) { val lines = Source.fromFile(args(0)).getLines.toList val longestLine = lines.reduceLeft( (a, b) => if (a.length > b.length) a else b ) val maxWidth = widthOfLength(longestLine) for (line <- lines) { val numSpaces = maxWidth - widthOfLength(line) val padding = " " * numSpaces println(padding + line.length +" | "+ line) } } else Console.err.println("Please enter filename") B:3.12 TI1220 - Introduction 61
  • 62. VI Classes and Objects B:2.3 Term Rewriting 62
  • 63. Class: Object Blueprint declaration and instantiation class ChecksumAccumulator {} val acc = new ChecksumAccumulator val csa = new ChecksumAccumulator B:4.1 TI1220 - Introduction 63
  • 64. Fields (Instance Variables) object state class ChecksumAccumulator { var sum = 0 } val acc = new ChecksumAccumulator val csa = new ChecksumAccumulator acc.sum = 3 B:4.1 TI1220 - Introduction 64
  • 65. Reference vs Content object state class ChecksumAccumulator { var sum = 0 } val acc = new ChecksumAccumulator val csa = new ChecksumAccumulator acc.sum = 3 // Won’t compile, because acc is a val acc = new ChecksumAccumulator B:4.1 TI1220 - Introduction 65
  • 66. Data Hiding object state class ChecksumAccumulator { private var sum = 0 } val acc = new ChecksumAccumulator acc.sum = 5 // Won’t compile, because sum is private B:4.1 TI1220 - Introduction 66
  • 67. Methods object behavior class ChecksumAccumulator { private var sum = 0 def add(b: Byte): Unit = { sum += b } def checksum(): Int = { return ~(sum & 0xFF) + 1 } } B:4.1 TI1220 - Introduction 67
  • 68. Methods parameters are vals def add(b: Byte): Unit = { b = 1 // This won’t compile, because b is a val sum += b } B:4.1 TI1220 - Introduction 68
  • 69. Methods sugar // file: ChecksumAccumulator.scala class ChecksumAccumulator { private var sum = 0 def add(b: Byte) { sum += b } def checksum(): Int = ~(sum & 0xFF) + 1 } B:4.1 TI1220 - Introduction 69
  • 70. Singleton Objects defining ‘static’ methods import scala.collection.mutable.Map object ChecksumAccumulator { private val cache = Map[String, Int]() def calculate(s: String): Int = if (cache.contains(s)) cache(s) else { val acc = new ChecksumAccumulator for (c <- s) acc.add(c.toByte) val cs = acc.checksum() cache += (s -> cs) cs } } B:4.3 TI1220 - Introduction 70
  • 71. Using Singleton Objects methods and state ChecksumAccumulator.calculate("Every value is an object.") B:4.3 TI1220 - Introduction 71
  • 72. Scala Application // file: Summer.scala import ChecksumAccumulator.calculate object Summer { def main(args: Array[String]) { for (arg <- args) println(arg + ": " + calculate(arg)) } } $ scalac ChecksumAccumulator.scala Summer.scala $ scala Summer of love of: -213 love: -182 B:4.4 TI1220 - Introduction 72
  • 73. VII Summary Term Rewriting 73
  • 74. Summary lessons learned Programming languages are for people • to reason about solutions for problems Declaration and use • binding values to names, referring to values using names Immutable values • cannot be changed once created (no side effects) Objects • data structures with methods B:2.3 TI1220 - Introduction 74
  • 75. Exam Question What happens when we execute the following code: val greetStrings = new Array[String](3) greetStrings(0) = "Hello" greetStrings(1) = ", " greetStrings(2) = "world!n" (a) Error: greetStrings is an immutable variable that cannot be assigned to (b) Error: Array is a immutable data structure that cannot be assigned to (c) No error: greetStrings is a mutable variable that can be assigned to (d) No error: Array is a mutable data structure that can be assigned to B:2.3 TI1220 - Introduction 75
  • 76. Exercises Week 1 getting started with Scala Set up your Scala environment • download and install Scala interpreter and compiler Scala basics • evaluating expressions • defining functions • running scripts • making applications • hand in on paper to student assistants! B:2.3 TI1220 - Introduction 76
  • 77. Literature required reading Programming in Scala • Chapter 1: A Scalable Language • Chapter 2: First Steps in Scala • Chapter 3: Next Steps in Scala • Chapter 4: Classes and Objects • Chapter 5: Basic Types and Operations TI1220 - Introduction 77
  • 79. Outlook coming next Functional programming • Lecture 2: Functional Objects • Chapters 6, 7 • Lecture 3: Functions & Closures • Chapters 8, 9 • Lecture 4: List Programming • Chapters 15, 16, 17 Lab Week 1 • Getting started with Scala B:2.3 TI1220 - Introduction 79
  • 80. IX Notes Term Rewriting 80
  • 81. Pictures copyrights Slide 1: Kinetica by Paul Downey, Some rights reserved Slide 2: McPhillips’ Map of the City of Winnipeg by Manitoba Historical Maps, some rights reserved Slide 4: The Blue Hour by Andreas Wonisch, Some rights reserved Slide 5: by Eelco Visser, Some rights reserved Slide 8: I’m listening by Melvin Gaal, some rights reserved Slide 10: Bombe detail by Garret Coakley, Some rights reserved Slide 13: Alan Turing by oalfonso, some rights reserved Slide 14: History of Programming Languages by O’Reilly Slide: ABZ-DNA by dulhunk, some rights reserved Slide 32, 34: Envelopes by benchilada, some rights reserved Slide 33: Report card by Carosaurus, some rights reserved Slide 36: paper coffee cup by Shutterstock, some rights reserved B:2.3 TI1220 - Introduction 81
  • 82. Pictures copyrights Slide 40: Dinner at Roussillon (Martin Odersky) by Miles Sabin, some rights reserved Slide 41: Portrait: Alex Payne by Dave Fayram, some rights reserved Slide 43: “Plumbing Nightmare” by Natalie Wilkie, some rights reserved Slide 72: HIV: The Moleskine Summary by Niels Olson Slide 75, 76: remember to thank all the books you haven’t read over the past three years by Natalia Osiatynska, Some rights reserved Slide 7, 73: Stupid Exam by Remi Carreiro, Some rights reserved Slide 74: Practice makes perfect by Simon Probert Slide 10: Bombe detail by Garret Coakley, Some rights reserved Slide 29: 1.12.2011 <recipes> 362/365 by Phil Roeder, Some rights reserved Slide 22,23: China Tibet Himalaya by Bernhard Goldbach, Some rights reserved Slide 17: Thinking at Hell’s gate by innoxiuss, Some rights reserved B:2.3 TI1220 - Introduction 82