Principals Of Programming
Languages
MS. LARAIB SAEED
Department of Computer Science
COMSATS University Islamabad
Wah Campus
Chapter 1
Preliminaries
1-2
Course Details
 Course Title: Theory of Programming Language
 Course Code: CSC315
 Credit Hours: 3(3,0)
1-3
Course Grading
 Quizzes (4) 15%
 Assignments (4) 10%
 Midterm 25%
 Terminal Exam 50%
1-4
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: laraibsaeed828@gmail.com
1-5
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
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
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
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
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
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
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
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
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
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
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
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
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
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
The von Neumann Architecture 1-20
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
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
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
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
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
Layered View of Computer
 The operating system and language implementation are layered over
machine interface of a computer
1-26
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
The Compilation Process 1-28
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
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
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
Pure Interpretation Process 1-32
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
Hybrid Implementation Process 1-34
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
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
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
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
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/
40

Chapter 1: Theory of programming languages

  • 1.
    Principals Of Programming Languages MS.LARAIB SAEED Department of Computer Science COMSATS University Islamabad Wah Campus
  • 2.
  • 3.
    Course Details  CourseTitle: Theory of Programming Language  Course Code: CSC315  Credit Hours: 3(3,0) 1-3
  • 4.
    Course Grading  Quizzes(4) 15%  Assignments (4) 10%  Midterm 25%  Terminal Exam 50% 1-4
  • 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: laraibsaeed828@gmail.com 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 StudyingConcepts 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 StudyingConcepts 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  Scientificapplications  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  Artificialintelligence  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 LanguageDesign  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
  • 20.
    The von NeumannArchitecture 1-20
  • 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 ofComputer  The operating system and language implementation are layered over machine interface of a computer 1-26
  • 27.
    Compilation  Translate high-levelprogram (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
  • 28.
  • 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  Notranslation  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
  • 32.
  • 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
  • 34.
  • 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  Thecollection 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 studyof 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  TheTIOBE 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/
  • 40.