Download Overview of programming languages

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

Go (programming language) wikipedia , lookup

Abstraction (computer science) wikipedia , lookup

Logic programming wikipedia , lookup

Falcon (programming language) wikipedia , lookup

Programming language wikipedia , lookup

C Sharp (programming language) wikipedia , lookup

Object-oriented programming wikipedia , lookup

Reactive programming wikipedia , lookup

Structured programming wikipedia , lookup

Functional programming wikipedia , lookup

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).
Appending the empty list to any list (X) returns an unchanged
list (X again).
append([Head|Tail], Y, [Head|Z]) :- append(Tail, Y, Z)
If Tail is appended to Y to get Z, then a list one element larger
[Head | Tail] can be appended to Y to get [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.