5. Rules and Considerations
Be on time for every class. Late arrivals may be marked absent.
Active participation in discussions is encouraged.
All assignments must be submitted on time. Late submissions may result
in deductions.
Quizzes can be surprise or scheduled, so stay prepared.
For any queries, contact: [email protected]
1-5
6. Chapter 1 Topics
Reasons for Studying Concepts of Programming Languages
Programming Domains
Language Evaluation Criteria
Influences on Language Design
Language Categories
Language Design Trade-Offs
Implementation Methods
Programming Environments
1-6
7. Reasons for Studying Concepts of Programming
Languages
Increased ability to express ideas
• Write more efficient and effective programs
• Convey your thoughts and intentions clearly
• Develop a unique programming style
Improved background for choosing appropriate languages
• Understand the strengths and weaknesses of different languages
• Make informed decisions about language selection
• Adapt to new languages and technologies more easily
Increased ability to learn new languages
• Recognize similarities and differences between languages
• Transfer knowledge and skills to new languages
• Learn new languages more quickly and efficiently
1-7
8. Reasons for Studying Concepts of
Programming Languages
Better understanding of significance of implementation
• Data structures and algorithms
• Memory management and optimization
• Error handling and debugging
Overall advancement of computing
• Drive innovation and research in computer science
• Improve software development methodologies and tools
• Enhance the overall quality and reliability of software systems
1-8
9. Programming Domains
Scientific applications
Help scientists and researchers solve complex problems
Large number of floating point computations
Fortran
Business applications
Produce reports, use decimal numbers and characters
COBOL
1-9
10. Programming Domains
Artificial intelligence
Creating intelligent machines that can think and learn like humans
Symbols, Logic and Reasoning rather than numbers manipulated
LISP
Systems programming
Creating software that manages and controls computer hardware resources
Need efficiency because of continuous use
C
Web Software
Software refers to programs that run on the web, like websites, web applications,
and mobile apps.
Eclectic collection of languages: markup (e.g., XHTML), scripting (e.g., PHP),
general-purpose (e.g., Java)
1-10
11. Language Evaluation Criteria
Readability: the ease with which programs can be read and
understood
Writability: the ease with which a language can be used to create
programs
Reliability: conformance to specifications (i.e., performs to its
specifications)
Cost: the ultimate total cost
1-11
12. Evaluation Criteria: Readability
Overall simplicity
A manageable set of features and constructs
Few feature multiplicity (means of doing the same operation)
Minimal operator overloading
Orthogonality
A relatively small set of primitive constructs can be combined
in a relatively small number of ways
Every possible combination is legal
Control statements
The presence of well-known control structures (e.g., while
statement)
1-12
13. Evaluation Criteria: Readability
Data types and structures
The presence of adequate facilities for defining data structures
Syntax considerations
Identifier forms: flexible composition
Special words and methods of forming compound statements
Form and meaning: self-descriptive constructs, meaningful keywords
1-13
14. Evaluation Criteria: Writability
Simplicity and orthogonality
Few constructs, a small number of primitives, a small set of
rules for combining them
Support for abstraction
The ability to define and use complex structures or operations in
ways that allow details to be ignored
Expressivity
A set of relatively convenient ways of specifying operations
Example: the inclusion of for statement in many modern
languages
1-14
15. Evaluation Criteria: Reliability
Type checking
Testing for type errors
Exception handling
Intercept run-time errors and take corrective measures
Aliasing
Presence of two or more distinct referencing methods for the
same memory location
Readability and writability
A language that does not support “natural” ways of expressing
an algorithm will necessarily use “unnatural” approaches, and
hence reduced reliability
1-15
16. Evaluation Criteria: Cost
Training programmers to use language
Writing programs (closeness to particular applications)
Compiling programs
Executing programs
Language implementation system: availability of free compilers
Reliability: poor reliability leads to high costs
Maintaining programs
1-16
17. Evaluation Criteria: Others
Portability
The ease with which programs can be moved from one
implementation to another
Generality
How widely a programming language can be used for different types
of applications.
Well-definedness
How clear and precise the rules and definitions of a programming
language are.
1-17
18. Influences on Language Design
Computer Architecture
Languages are developed around the prevalent computer architecture,
known as the von Neumann architecture
Programming Methodologies
New software development methodologies (e.g., object-oriented
software development) led to new programming paradigms and by
extension, new programming languages
1-18
19. Computer Architecture Influence
Well-known computer architecture: Von Neumann
Imperative languages(How to perform a task), most dominant, because of von
Neumann computers
Data and programs stored in memory
Memory is separate from CPU
Instructions and data are piped from memory to CPU
Basis for imperative languages
• Variables model memory cells
• Assignment statements model piping
• Iteration is efficient
1-19
21. Programming Methodologies Influences
1950s and early 1960s: Simple applications; worry about machine efficiency
Late 1960s: People efficiency became important; readability, better control
structures
structured programming
top-down design and step-wise refinement
Late 1970s: Process-oriented to data-oriented
data abstraction
Middle 1980s: Object-oriented programming
Data abstraction + inheritance + polymorphism
1-21
22. Language Categories
Imperative
Central features are variables, assignment statements, and iteration
Examples: C, Pascal
Functional
Main means of making computations is by applying functions to given
parameters
Examples: LISP, Scheme
Logic
Rule-based (rules are specified in no particular order)
Example: Prolog
1-22
23. Language Categories
Object-oriented
Data abstraction, inheritance, late binding (Resolve meaning of a
symbol or identifier at run time)
Examples: Java, C++
Markup
New; not a programming per se, but used to specify the layout of
information in Web documents
Examples: XHTML, XML
1-23
24. Language Design Trade-Offs
Reliability vs. cost of execution
Conflicting criteria
Example: Java demands all references to array elements be checked for
proper indexing but that leads to increased execution costs
Readability vs. writability
Another conflicting criteria
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
Another conflicting criteria
Example: C++ pointers are powerful and very flexible but not reliably used
1-24
25. Implementation Methods
Compilation
Programs are translated into machine language
Pure Interpretation
Programs are interpreted by another program known as an interpreter
Hybrid Implementation Systems
A compromise between compilers and pure interpreters
1-25
26. Layered View of Computer
The operating system and language implementation are layered over
machine interface of a computer
1-26
27. Compilation
Translate high-level program (source language) into machine code (machine
language)
Slow translation, fast execution
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
1-27
29. Additional Compilation Terminologies
Load module (executable image): the user and system code
together
Linking and loading: the process of collecting system program
and linking them to user program
1-29
30. 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 a lot faster than the
above connection speed; the connection speed thus results in a
bottleneck
Known as von Neumann bottleneck; it is the primary limiting factor
in the speed of computers
1-30
31. Pure Interpretation
No translation
Easier implementation of programs (run- time errors can easily and
immediately displayed)
Slower execution (10 to 100 times slower than compiled programs)
Often requires more space
Significant comeback with some Web scripting languages (e.g.,
JavaScript)
Becoming rare on high-level languages
1-31
33. 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
Examples
Perl programs are partially compiled to detect errors before
interpretation
Initial implementations of Java were hybrid; the intermediate
form, byte code, provides portability to any machine that has a
byte code interpreter and a run-time system (together, these are
called Java Virtual Machine)
1-33
35. Just-in-Time Implementation Systems
Initially translate programs to an intermediate language
Then compile intermediate language into machine code
Machine code version is kept for subsequent calls
JIT systems are widely used for Java programs
.NET languages are implemented with a JIT system
1-35
36. 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
1-36
37. Programming Environments
The collection of tools used in software development
UNIX
An older operating system and tool collection
Nowadays often used through a GUI (e.g., CDE, KDE, or GNOME) that run
on top of UNIX
Borland JBuilder
An integrated development environment for Java
Microsoft Visual Studio.NET
A large, complex visual environment
Used to program in C#, Visual BASIC.NET, Jscript, J#, or C++
1-37
38. Summary
The study of programming languages is valuable for a number of reasons:
Increase our capacity to use different constructs
Enable us to choose languages more intelligently
Makes learning new languages easier
Most important criteria for evaluating programming languages include:
Readability, writability, reliability, cost
Major influences on language design have been machine architecture and
software development methodologies
The major methods of implementing programming languages are:
compilation, pure interpretation, and hybrid implementation
1-38
39. 39
TIOBI Index
The TIOBE Programming Community index is an indicator of the popularity
of programming languages.
The index is updated once a month.
The ratings are based on the number of skilled engineers world-wide,
courses and third-party vendors.
Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon,
YouTube and Baidu are used to calculate the ratings.
It is important to note that the TIOBE index is not about
the best programming language or the language in which most lines of
code have been written.
https://www.tiobe.com/tiobe-index/