lecture 1: introductionolivier/comp524/lecture01.pdf · lecture 1: introduction comp 514...
TRANSCRIPT
![Page 1: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/1.jpg)
The University of North Carolina at Chapel Hill
Lecture 1: Introduction
COMP 514 Programming Language Concepts Stephen OlivierJanuary 13, 2008
Based on slides and notes by A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts
![Page 2: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/2.jpg)
The University of North Carolina at Chapel Hill
Class Objectives.
•What are we going to do in this class?
•What does this entail?
Compare and contrast different programming languages.
Examine the way in which languages are designed and implemented.
![Page 3: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/3.jpg)
The University of North Carolina at Chapel Hill
Class Objectives.
•What are we going to do in this class?
•What does this entail?
Compare and contrast different programming languages.
Examine the way in which languages are designed and implemented.
![Page 4: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/4.jpg)
The University of North Carolina at Chapel Hill
Why do this?
1. For the fun of it!
2. Understanding the basic principles makes it easier to learn new languages.
3. Sometimes you need different features of different languages, and if you don’t know about other languages how can you use them?
4. More effectively utilize the languages you already know.
![Page 5: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/5.jpg)
The University of North Carolina at Chapel Hill
Why do this?
1. For the fun of it!
2. Understanding the basic principles makes it easier to learn new languages.
3. Sometimes you need different features of different languages, and if you don’t know about other languages how can you use them?
4. More effectively utilize the languages you already know.
For example, if you need “fine-grained” control over system memory, then you C++ would be better choice than Java. However, if you memory leaks are a big concern, then Java is a better choice than C++.
![Page 6: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/6.jpg)
The University of North Carolina at Chapel Hill
A very very very brief history of languages.
•In the beginning, ENIAC (Electronic Numerical Integrator and Computer) programers used patch cords.
•This gave them the raw power to compute trig tables.
![Page 7: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/7.jpg)
The University of North Carolina at Chapel Hill
Machine and Assembly Languages.
•The next major revolution was machine language, which is just binary (or hexadecimal).
•Very quickly people realized that humans cannot write error free programs using just zeroes and ones without going insane.
•Hence, came assembly language, which uses human readable abbreviations to stand for machine code.
![Page 8: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/8.jpg)
The University of North Carolina at Chapel Hill
Assembly language (example)
Start: lea A, a0 lea B, a1 lea C, a2 clr.w d0 clr.w d1 clr.w d2 add.w #5, d1 add.w #6, d2 move.w d1, (a0) move.w d2, (a1) add.w (a0), d0 add.w (a1), d0 move.w d0, (a2) jsr decout jsr newline jsr stop dataA: dc.w 1B: dc.w 1C: dc.w 1
![Page 9: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/9.jpg)
The University of North Carolina at Chapel Hill
Higher level languages
•Eventually, people realized that more complex programs are very difficult to write at the level of assembly language.
•So, eventually came higher level languages.
class Test { public static void main(String args[]) { int A, B, C; A=5; B=6; C=A+B; System.out.print(C); }}
![Page 10: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/10.jpg)
The University of North Carolina at Chapel Hill
Declarative and Imperative programming
•There are two types of programming languages: declarative and imperative.
• Declarative languages focus on what the computer should do.
• Imperative languages focus on how the computer should do something.
![Page 11: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/11.jpg)
The University of North Carolina at Chapel Hill
Quicksort
•Quicksort sorts an array by recursively sorting “sub-arrays” as less than or greater than pivot values.
1 3 4 2 5 8 6 7
6 7 81 2 4 3
3 4
X Pivot
Y Less then
Z Greater then
![Page 12: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/12.jpg)
The University of North Carolina at Chapel Hill
Quicksort in Haskell
qsort [] = []qsort (x:xs) = qsort lt_x ++ [x] ++ qsort ge_x where lt_x = [y | y <- xs, y < x] ge_x = [y | y <- xs, y >= x]
![Page 13: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/13.jpg)
The University of North Carolina at Chapel Hill
Quicksort in Haskell
qsort [] = []qsort (x:xs) = qsort lt_x ++ [x] ++ qsort ge_x where lt_x = [y | y <- xs, y < x] ge_x = [y | y <- xs, y >= x]
If input is empty return empty.
![Page 14: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/14.jpg)
The University of North Carolina at Chapel Hill
Quicksort in Haskell
qsort [] = []qsort (x:xs) = qsort lt_x ++ [x] ++ qsort ge_x where lt_x = [y | y <- xs, y < x] ge_x = [y | y <- xs, y >= x]
Otherwise, return a list with all the values less than xboth “qsort”ed and before x and all values greater
than x both “qsort”ed and after x.
![Page 15: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/15.jpg)
The University of North Carolina at Chapel Hill
Quicksort in Haskell
qsort [] = []qsort (x:xs) = qsort lt_x ++ [x] ++ qsort ge_x where lt_x = [y | y <- xs, y < x] ge_x = [y | y <- xs, y >= x]
This junk defines lt_x as all values less than x, and ge_x as all values greater than or equal to x.
![Page 16: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/16.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
![Page 17: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/17.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
Find the first element larger than the pivot value and the last element smaller than the pivot value.
![Page 18: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/18.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
If these values are on the “wrong side” of the pivot, swap them.
![Page 19: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/19.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
Repeat until no values are on the “wrong side.”
![Page 20: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/20.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
Swap the smallest value greater than or equal to the pivot with the pivot, which is at the end of the list
![Page 21: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/21.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
Finally, recurse on the two sides.
![Page 22: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/22.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
Notice how much more complex this program is in C (an imperative language) than
Haskell (a declarative language).
![Page 23: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/23.jpg)
The University of North Carolina at Chapel Hill
Quicksort in C
qsort( a, lo, hi ) int a[], hi, lo;{ int h, w, p, t; if (lo < hi) { w = lo; h = hi; p = a[hi]; do { while ((w < h) && (a[w] <= p)) w = w+1; while ((h > w) && (a[h] >= p)) h = h-1;
if (w < h) { t = a[w]; a[w] = a[h]; a[h] = t; } } while (w < h);
t = a[w]; a[w] = a[hi]; a[hi] = t;
qsort( a, lo, w-1 ); qsort( a, w+1, hi ); }}
However, without a very good compiler, the quicksort in C will likely run faster than in
Haskell!
![Page 24: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/24.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Scriptinge.g, Perl
![Page 25: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/25.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Functional languages are based on functions and recursion.
Scriptinge.g, Perl
![Page 26: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/26.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Dataflow languages focus on the flowof information between nodes.
Scriptinge.g, Perl
![Page 27: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/27.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Logic languages model programs as a series of logical statements.
Scriptinge.g, Perl
![Page 28: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/28.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Von Neumann languages allow for computation by focusing on manipulating
data elements.
Scriptinge.g, Perl
![Page 29: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/29.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Object-oriented languages allow for computation by modeling principles as a series
of semi-independent “objects” .
Scriptinge.g, Perl
![Page 30: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/30.jpg)
The University of North Carolina at Chapel Hill
Types of Languages
Declarative
Functionale.g, Haskell & Lisp
Dataflowe.g, Id & Val
Logice.g, Prolog
Von Neumanne.g, Fortran, Basic, & C
Object-Orientede.g, C++ & Java
Imperative
Scripting languages are a subset of von Neumann languages and are serve as “glue” between more robust languages in order to
facilitate rapid development.
Scriptinge.g, Perl
![Page 31: Lecture 1: Introductionolivier/comp524/Lecture01.pdf · Lecture 1: Introduction COMP 514 Programming Language Concepts Stephen Olivier January 13, 2008 Based on slides and notes by](https://reader034.vdocument.in/reader034/viewer/2022050413/5f89c6a16045620cf16d76a7/html5/thumbnails/31.jpg)
The University of North Carolina at Chapel Hill
Course Topics
• Tentative List:• Compilation & Interpretation• Syntax Specification & Analysis• Names, Binding, & Scope• Control Flow• Data Types• Subroutines & Control Abstraction• Concurrency• Code Improvement• Data Abstraction & Object Orientation• Scripting Languages: Perl, Python, Ruby, etc..• Functional Languages: ML, Lisp/Scheme, Haskell, etc…• Logic Languages: Prolog• and more…