Download lecture01_Overview

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Programming Languages
2nd edition
Tucker and Noonan
Chapter 1
Overview
A good programming language is a conceptual
universe for thinking about programming.
A. Perlis
Copyright © 2006 The McGraw-Hill Companies, Inc.
Paradigms of Programming Languages
A programming paradigm is a pattern of problemsolving thought that underlies a particular genre of
programs and languages.
There are four main programming paradigms:
– Imperative
– Object-oriented
– Functional
– Logic (declarative)
Copyright © 2006 The McGraw-Hill Companies, Inc.
Imperative Paradigm
Follows the classic von Neumann-Eckert model:
– Program and data are indistinguishable in memory
– Program = a sequence of commands
– State = values of all variables when program runs
– Large programs use procedural abstraction
Example imperative languages:
– Cobol, Fortran, C, Ada, Perl, …
Copyright © 2006 The McGraw-Hill Companies, Inc.
The von Neumann-Eckert Model
Copyright © 2006 The McGraw-Hill Companies, Inc.
Object-oriented (OO) Paradigm
An OO Program is a collection of objects that interact by
passing messages that transform the state.
When studying OO, we learn about:
– Sending Messages
– Inheritance
– Polymorphism
Example OO languages:
Smalltalk, Java, C++, C#, and Python
Copyright © 2006 The McGraw-Hill Companies, Inc.
Functional Paradigm
Functional programming models a computation as a
collection of mathematical functions.
– Input = domain
– Output = range
Functional languages are characterized by:
– Functional composition
– Recursion
Example functional languages:
– Lisp, Scheme, ML, Haskell, …
Copyright © 2006 The McGraw-Hill Companies, Inc.
Functional vs Imperative
• Compute Factorial Function
– In Imperative Programming Languages:
fact(int n) {
if (n <= 1) return 1;
else
return n * fact(n-1); }
– In Functional Programming Languages: Scheme
(define (fact n)
(if (< n 1) 1 (* n (fact (- n 1)))
))
Copyright © 2006 The McGraw-Hill Companies, Inc.
Logic Paradigm
Logic programming declares what outcome the program
should accomplish, rather than how it should be
accomplished.
When studying logic programming we see:
– Programs as sets of constraints on a problem
– Programs that achieve all possible solutions
– Programs that are nondeterministic
Example logic programming languages:
– Prolog
Copyright © 2006 The McGraw-Hill Companies, Inc.
Logic vs Imperative
• Concatenate two strings:
– In Imperative Programming Languages:
– In Logic Programming Languages: Prolog
append([], X , X).
The empty list concatenated with any other list, say X, returns
that other list, X, as the result
append([Head|Tail], Y, [Head|Z]) :- append(Tail, Y, Z)
If Z is the result of concatenating lists Tail and Y, then
Concatenating any new list [Head|Tail] with Y gives the
result [Head | Z]
Copyright © 2006 The McGraw-Hill Companies, Inc.
Example
append([english, russian], [spanish], L)
H= english, Tail = [russian], Y=[spanish], L=[english|Z]
append([russian],[spanish],[Z])
H=russian, Tail=[], Y=[spanish], [Z]=[russian|Z’]
append([],[spanish],[Z’]).
X =[spanish], Z’ = [spanish]
append([], [spanish], [spanish])
Copyright © 2006 The McGraw-Hill Companies, Inc.
A Brief History of Programming Languages
Copyright © 2006 The McGraw-Hill Companies, Inc.
What makes a successful language?
Key characteristics:
– Simplicity and readability
– Clarity about binding
– Reliability
– Support
– Abstraction
– Orthogonality
– Efficient implementation
Copyright © 2006 The McGraw-Hill Companies, Inc.
Simplicity and Readability
• Small instruction set
– Is a smaller number of instructions better?
• Simple syntax
– More than one way to accomplish a particular op,
– A single op has more than one meaning
• Benefits:
– Ease of learning
– Ease of programming
Copyright © 2006 The McGraw-Hill Companies, Inc.
Reliability
A language is reliable if:
– Program behavior is the same on different platforms
• E.g., early versions of Fortran
– Type errors are detected
• E.g., C vs Haskell
– Semantic errors are properly trapped
• E.g., C vs C++
– Memory leaks are prevented
• E.g., C vs Java
Copyright © 2006 The McGraw-Hill Companies, Inc.
Language Support
• Accessible (public domain) compilers/interpreters
• Good texts and tutorials
• Wide community of users
• Integrated with development environments (IDEs)
Copyright © 2006 The McGraw-Hill Companies, Inc.
Abstraction in Programming
• Data
– Programmer-defined types/classes
– Class libraries
• Procedural
– Programmer-defined functions
– Standard function libraries
Copyright © 2006 The McGraw-Hill Companies, Inc.
Orthogonality
A language is orthogonal if its features are built upon a
small, mutually independent set of primitive
operations.
• Fewer exceptional rules = conceptual simplicity
– E.g., restricting types of arguments to a function
• Tradeoffs with efficiency
Copyright © 2006 The McGraw-Hill Companies, Inc.
Compilers and Virtual Machines
Compiler – produces machine code
Interpreter – executes instructions on a virtual
machine
• Example compiled languages:
– Fortran, Cobol, C, C++
• Example interpreted languages:
– Scheme, Haskell, Python
• Hybrid compilation/interpretation
– The Java Virtual Machine (JVM)
Copyright © 2006 The McGraw-Hill Companies, Inc.
The Compiling Process
Copyright © 2006 The McGraw-Hill Companies, Inc.
The Interpreting Process
Copyright © 2006 The McGraw-Hill Companies, Inc.
Related documents