logo
 
Introduction
CptS 355 - Programming Language Design
Washington State University
Home
Calendar
Syllabus
Resources
People
Project turn-in

Thought questions

  • There are over 3000 programming languages. Why?
  • New programming languages are still being invented, why? New application domains, improved ways of expressing ideas, ...
  • If many languages are the norm, why do we teach you to program in only one language in CS 121/122? Must assume no prior familiarity with programming.
  • Which language is better or worse? We will present some criteria for evaluating languages, in a very non-rigorous manner.
  • With so many languages, what should we study? Like Biology 101, we study abstractions.

What is a Programming Language?

"Programming languages provide the abstractions, organizing principles, and control structures that programmers use to write programs."

Common features

  • universality - it can compute anything that can be computed (too strict in my opinion)
  • implementability - it can be implemented -- point ahead to Ch. 2

Why learn about Programming Language?

  • Expression of ideas will improve - Improved potential for expression leads to improved thinking. You can improve your programming/problem solving because new languages give you new vocabulary for thinking.
  • Some languages are especially suited for some applications - knowing about them can improve your ability to choose an appropriate language.
  • Practice learning new languages quickly.
  • Understand implementation - sometimes limits language features.
  • Historical perspective - why did language X become mainstream?

Programming domains

  • Scientific computing - 1950s, 1960s, Fortran
  • Business applications - 1960s, COBOL
  • AI - 1950s, Lisp, Prolog
  • Systems prog. - 1960s - IBM and PL/S, Unix and C
  • Scripting languages - awk, tcl, javascript, perl, python, visual basic
  • Special purpose - PostScript

Influences

  • Hardware
    • Imperative languages model changes in state (e.g., in the values in registers, memory, and on disk).
    • Languages - C, C++, Java, Pascal, perl, python,
    • Parallel machines - there are languages for parallel computing
  • Mathematics
    • Lambda calculus - LISP
    • Functional languages view programs as functions - ML, Scheme, LISP: characterized by use of higher-order functions
    • Logic programming view programs as mathematical proofs: a program computes by trying to prove a theorem - Prolog
  • Programming Methodology
    • 1960s - larger and larger systems
    • 1970s - top-down design - Pascal
    • late 1970s, early 80s - data-oriented design (ADTs) Ada and Modula
    • 1980s - object-oriented design - C++, Smalltalk
    • 1990s - concurrency; graphics; libraries - Java
    • throughout - increasing trend to use of types
  • Special purpose languages
    • Visual languages for designing user interfaces - Visual Basic
    • Markup Languages - HTML, XML, SGML

Computer Language Levels

  • low-level -- close to the machine instruction set, examples are machine language and assembler language (symbolic machine code)
  • high-level -- make it easier for humans, examples are C and Pascal
  • very high-level -- give a general idea of what computer should do, let it do it, example is Prolog

Criteria for Evaluating Languages

Readability, writability, reliability, maintainability, ...

Cost

Cost is another way to evaluate languages. Various kinds of costs.
  • Training.
  • Writing.
  • Compilation (in terms of time and size of produced code)
  • Execution. A dominant cost in some applications. Often, optimization can reduce the cost, at the expense of increasing the cost of compilation/writing/and or training.
  • Language implementation - is the compiler free?
  • Reliability - Failure in produced code/run-time environment can be very costly, think of a program running an X-ray machine.
  • Maintenance - Useful code is always refined, updated, debugged. This cost can outweigh development cost.

Source of Information

These lecture notes are based on Chapter 1 in "Programming Language Concepts and Paradigms" by David Watt, Chapter 1 in "Programming Languages" by Robert Sebesta and Chapter 1 of Concepts in Programming Languages by John C. Mitchell.
                                                                                                                                                                                                                                                                                                                                             
  (c) 2003 Curtis Dyreson, (c) 2004 Carl H. Hauser           E-mail questions or comments to Prof. Carl Hauser