Objectives of the Course: This course concerns the interplay between problem modeling and programming languages. Problem solving relies on having good models that are written in a language that can support the modeling concepts. There are four main objectives:
Learning principles of programming languages: The elements of programming languages; abstraction means in programming languages; formal definition of programming languages – concrete syntax, abstract syntax, operational semantics; program correctness – type checking and type inference systems.
Learning the essence of program execution by evaluators: Interpreters, compilers.
Understanding programming paradigms: How the above topics are realized in Functional programming, Logic programming and Imperative programming.
Learning principles of program design: Abstraction, contracts, modular architecture, testing.
The course is a mixture of theory and practice. All theoretical topics involve implemented software, and all course assignments involve a major amount of programming. The course combines two main approaches in teaching principles of programming languages:
Using a single language for demonstrating all language aspects vs. introduction of multiple languages as representatives of different aspects. The course uses the Scheme language for teaching the general theory and practice of language design and implementation. Prolog is used for introducing the Logic Programming paradigm.
Prerequisites: This subject is best learnt by comparison of the features and constructs of various programming languages. Hence a good knowledge of a procedure oriented programming language (C Language), an object oriented language (JAVA) is essential. In addition, a course in Data Structures, Formal Languages and Automata Theory (Theory of Computation) is also required.
Why study this subject?
High level languages like C, C++, JAVA, FORTAN, Pascal and other programming languages impart the skills of developing a program for the problem at hand. To a novice programmer these programs appear to be independent. He/she cannot visualize the underlying basic principles on which these languages are designed. This subject exposes the student to the most fundamental blocks of all the programming languages namely, definition of the recognized character set, definition of keywords, reserved words, and identifiers, constructs of the languages etc. With the knowledge of this subjects, a computer science engineer would be better equipped with the knowledge of identifying the right language for the right kind of problem, development of efficient algorithms, and overcoming the inherent limitations of a programming language chosen to solve a complex problem. Hence Principles of Programming Languages is one of the most important subjects a computer Science engineering student studies.