0% found this document useful (0 votes)
15 views53 pages

01-introduction plc

The document is a lecture on the concepts of programming languages by Patrick Donnelly from Montana State University. It covers the importance of studying programming languages, their properties (syntax, names, types, semantics), various programming paradigms, language design considerations, and characteristics of successful programming languages. Additionally, it discusses compilation methods, reliability, and support for programming languages.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views53 pages

01-introduction plc

The document is a lecture on the concepts of programming languages by Patrick Donnelly from Montana State University. It covers the importance of studying programming languages, their properties (syntax, names, types, semantics), various programming paradigms, language design considerations, and characteristics of successful programming languages. Additionally, it discusses compilation methods, reliability, and support for programming languages.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 53

Concepts of Programming Languages

Lecture 1 - Introduction

Patrick Donnelly

Montana State University

Spring 2014

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 1 / 46
Textbook

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 2 / 46
Administrivia

Website:

http://nisl.cs.montana.edu/~pdonnelly/CSCI305/

Reading:

Chapter 1

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 3 / 46
A good programming language is a conceptual universe
for thinking about programming.

A. Perlis

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 4 / 46
Reasons for Studying Programming Languages

Increased ability to express ideas

Improved background for choosing appropriate languages

Increased ability to learn new languages

Better understanding of significance of implementation

Better use of languages that are already known

Overall advancement of computing

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 5 / 46
Principles

Programming languages have four properties:


Syntax
Names
Types
Semantics

For any language:


Its designers must define these properties
Its programmers must master these properties

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 6 / 46
Syntax

Definition
The syntax of a programming language is a precise description of all
its grammatically correct programs.

When studying syntax, we ask questions like:

What is the grammar for the language?

What is the basic vocabulary?

How are syntax errors detected?

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 7 / 46
Names
Various kinds of entities in a program have names:
variables
types
functions
parameters
classes
objects

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 8 / 46
Names
Various kinds of entities in a program have names:
variables
types
functions
parameters
classes
objects

Named entities are bound in a running program to:


Scope
Visibility
Type
Lifetime

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 8 / 46
Types
Definition
A type is a collection of values and a collection of operations on those
values.

Simple types: Structured types


numbers Strings,
characters lists,
booleans, . . . etc. trees,
hash tables, . . . etc..

Definition
A language’s type system can help to:
Determine legal operations
Detect type errors

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 9 / 46
Semantics

Definition
The meaning of a program is called its semantics.

In studying semantics, we ask questions like:

When a program is running, what happens to the values of the


variables?

What does each statement mean?

What underlying model governs run-time behavior, such as


function call?

How are objects allocated to memory at run-time?

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 10 / 46
Paradigms

Definition
A programming paradigm is a pattern of problem-solving thought that
underlies a particular genre of programs and languages.

There are four main programming paradigms:

Imperative

Object-oriented

Functional

Logic

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 11 / 46
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

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 12 / 46
The von Neumann-Eckert Model

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 13 / 46
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#
Python

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 14 / 46
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

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 15 / 46
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:


Datalog
Prolog

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 16 / 46
Special Topics

Concurrency:

e.g., Client-server programs

Correctness:

How can we prove that a program does what it is


supposed to do under all circumstances?

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 17 / 46
On Language Design
Design Constraints:

Computer architecture

Technical setting

Standards

Legacy systems

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 18 / 46
On Language Design
Design Constraints:

Computer architecture

Technical setting

Standards

Legacy systems

Outcomes and Goals:

1 How does a programming language emerge and become


successful?
2 What key characteristics make an ideal programming language?

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 18 / 46
Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 19 / 46
Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 20 / 46
Language Design Trade-Offs

Reliability vs. cost of execution


Example: Java demands all references to array elements be
checked for proper indexing, which leads to increased execution
costs

Readability vs. writability


Example: APL provides many powerful operators (and a large
number of new symbols), allowing complex computations to be
written in a compact program but at the cost of poor readability

Writability (flexibility) vs. reliability


Example: C++ pointers are powerful and very flexible but are
unreliable

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 21 / 46
Compilation

Compiler – translate high-level program (source language) into


machine code (machine language)
Programs are translated into machine language; includes JIT
systems
Slow translation, fast execution
Use: Large commercial applications

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 22 / 46
Compilation

Compiler – translate high-level program (source language) into


machine code (machine language)
Programs are translated into machine language; includes JIT
systems
Slow translation, fast execution
Use: Large commercial applications

Example compiled languages:


Fortran, Cobol, C, C++

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 22 / 46
Compilation
Compilation process has several phases:

lexical analysis: converts characters in the source program into


lexical units

syntax analysis: transforms lexical units into parse trees which


represent the syntactic structure of program

semantics analysis: generate intermediate code

code generation: machine code is generated

Load module (executable image): the user and system code


together

Linking and loading: the process of collecting system program units


and linking them to a user program

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 23 / 46
Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 24 / 46
Von Neumann Bottleneck

Connection speed between a computer’s memory and its processor


determines the speed of a computer

Program instructions often can be executed much faster than the


speed of the connection; the connection speed thus results in a
bottleneck

Known as the von Neumann bottleneck; it is the primary limiting


factor in the speed of computers

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 25 / 46
Pure Interpretation
Interpreter – executes instructions on a virtual machine

Programs are interpreted by another program known as an


interpreter
No translation
Easier implementation of programs (run-time errors can easily and
immediately be displayed)
Slower execution (10 to 100 times slower than compiled programs)
Often requires more space
Now rare for traditional high-level languages but recent comeback
with some Web scripting languages (e.g., JavaScript, PHP)
Use: Small programs or when efficiency is not an issue

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 26 / 46
Pure Interpretation
Interpreter – executes instructions on a virtual machine

Programs are interpreted by another program known as an


interpreter
No translation
Easier implementation of programs (run-time errors can easily and
immediately be displayed)
Slower execution (10 to 100 times slower than compiled programs)
Often requires more space
Now rare for traditional high-level languages but recent comeback
with some Web scripting languages (e.g., JavaScript, PHP)
Use: Small programs or when efficiency is not an issue

Example interpreted languages:


Scheme, Haskell, Python
Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 26 / 46
The Interpreting Process

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 27 / 46
Hybrid Implementation Systems

A compromise between compilers and pure interpreters

A high-level language program is translated to an intermediate


language that allows easy interpretation

Faster than pure interpretation

Use: Small and medium systems when efficiency is not the first
concern

Example Hybrid compilation/interpretation


The Java Virtual Machine (JVM)
Perl programs are partially compiled to detect errors before
interpretation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 28 / 46
Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 29 / 46
Just-in-Time Implementation Systems

Initially translate programs to an intermediate language

Then compile the intermediate language of the subprograms into


machine code when they are called

Machine code version is kept for subsequent calls

JIT systems are widely used for Java programs

.NET languages are implemented with a JIT system

In essence, JIT systems are delayed compilers

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 30 / 46
Preprocessors

Preprocessor macros (instructions) are commonly used to specify that


code from another file is to be included

A preprocessor processes a program immediately before the program


is compiled to expand embedded preprocessor macros

A well-known example: C preprocessor expands #include,


#define, and similar macros

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 31 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 32 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 33 / 46
Simplicity and Readability

Small instruction set:


e.g., Java vs Scheme

Simple syntax:
e.g., C/C++/Java vs Python

Benefits:
Ease of learning
Ease of programming

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 34 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 35 / 46
Clarity about Binding
A language element is bound to a property at the time that property is
defined for it.

Definition
A binding is the association between an object and a property of that
object.

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 36 / 46
Clarity about Binding
A language element is bound to a property at the time that property is
defined for it.

Definition
A binding is the association between an object and a property of that
object.

Examples
a variable and its type
a variable and its value

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 36 / 46
Clarity about Binding
A language element is bound to a property at the time that property is
defined for it.

Definition
A binding is the association between an object and a property of that
object.

Examples
a variable and its type
a variable and its value

Early binding takes place at compile-time.

Late binding takes place at run time


Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 36 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 37 / 46
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

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 38 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 39 / 46
Language Support

Accessible (public domain) compilers/interpreters

Good texts and tutorials

Wide community of users

Integrated with development environments (IDEs)

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 40 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 41 / 46
Abstraction in Programming

Data:

Programmer-defined types/classes
Class libraries

Procedural:

Programmer-defined functions
Standard function libraries

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 42 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 43 / 46
Orthogonality

Definition
A language is orthogonal if its features are built upon a small,
mutually independent set of primitive operations.

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 44 / 46
Orthogonality

Definition
A language is orthogonal if its features are built upon a small,
mutually independent set of primitive operations.

Fewer exceptional rules = conceptual simplicity

Example
restricting types of arguments to a function

Tradeoffs with efficiency

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 44 / 46
Characteristics of a Successful Language

Simplicity and readability

Clarity about binding

Reliability

Support

Abstraction

Orthogonality

Efficient implementation

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 45 / 46
Efficient Implementation

Embedded systems
Real-time responsiveness (e.g., navigation)
Failures of early Ada implementations

Web applications
Responsiveness to users (e.g., Google search)

Corporate database applications


Efficient search and updating

AI applications
Modeling human behaviors

Patrick Donnelly (Montana State University) Concepts of Programming Languages Spring 2014 46 / 46

You might also like