CS 787 Language Engineering for Complex Programs: A C++ Perspective

Instructor: Rushikesh Joshi

Prerequisites:

(i) CSE 4th year (who have already cleared their systems/programming/SEPL courses), or (ii) CSE PG-MTech/MS students or (iii) CSE PhD students.

Slot 13

13A - Mon - CC 101(CC 101 : Class Room) - 19:00:00 - 20:25:00
13B - Thu - CC 101(CC 101 : Class Room) - 19:00:00 - 20:25:00

A few lines about the course:

This is a new one in my long series of courses in the SEPL area, which I have been offering at IIT Bombay for UG/PG students. My previous courses in this series are: Object Oriented Systems, Distributed Systems, Process Engineering, Programming Paradigms, Design and Refactoring of Object Oriented Programs, Software Architecture. I have been conceptualizing this course for quite some time, and now have been able to put it together to offer it as CS 787. It is an advanced course, uncovering the engineering properties of advanced PL constructs in the C++ context, and their utility for developing complex large programs with good design properties. CSE Systems course background is necessary for the course since the course is about advanced language engineering for complex programming involving systems concepts. The programs will deal with topics involving systems concepts covered through UG SEPL (Software engineering and programming languages related courses: CS 101, Programming Paradigms, Data structures, TOC, OS, DB, Compilers/Language processors, Networks and their labs.). In addition, you are expected to have done basic C++ programming using the G++ compiler on Linux.

What you need:

G++ compiler: A Linux running on your laptop with g++ complier installed/ MAC or any other installation with latest g++ installed will be fine. Try it out before starting with the course.

Copying and Plagiarism policy:

It will be dealt with as per D-DAC policy. Copying and plagiarism is strictly prohibited. Individual take homes will have be done by individuals on their own.

Attendance policy:

Attendance is compulsory and 85% attendance will be enforced. First week full attendance rule will also be enforced.

Evaluation Scheme:

In class participation in every class + (Individual take-homes, Groups of 2 projects) and presentations + Written tests-quizzes, midsem, endsem. Continuous engagaement will be a key value.

Syllabus

The course deals with the extensive set of language engineering and design features that C++ Programming Language offers to develop complex programs, and their applications to systems software and tools. (i) Components and modularity: Namespaces, Koneig lookup, scoping rules, initializers, different kinds of constructors/destructors, separate compilation, libraries, errors and exceptions. (ii) Functions and control: Overloading and operator cascading, Lambda functions, parameter passing models, iterators, assignment semantics, dynamic dispatch/virtual table implementations. (iii) Concurrency and distributed programming: Threading, Synchronization, Parallel and distributed programs (iv) Generic Programming: Building templates, and the feature set in the standard template library, variadic functions and macros, variadic templates, template metaprogramming (v) Data, streams and conversions: Types and typing rules, type inferencing, type-safety issues, Memory models, strings, regular expressions, containers, ranges, file streams, string streams. (vi) Patterns and compositions: Design pattern implementations for patterns such as Strategy, Prototype, Builder, Visitor, Composite, Adapter, Proxy, Observer and Iterator. (vii) Advanced Applications in C++: Engineering and implementations of programs utilizing the rich set of features and design patterns, applying them to systems software such as distributed publisher subscriber event services, sequential algorithmics, model-based tools such as model translators, analyzers, file systems, interpreters and execution engines of experimental languages and extended language features for specialized purposes.

Major References

1) B. Stroustrup: A Tour of C++ (3rd Edition). Addison-Wesley, 2022.

2) Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John, Grady Booch, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994.

3) B. Stroustrup: The C++ Programming Language (Fourth Edition), Addison Wesley, 2013 4) ISO/SE Standard for Programming Language C ++, 2020.

4) ISO/IEC, Working Drafts, Standard for ProgrammingLanguage C++, continuously updated versions.

2023 (a working draft) link

2020 (a working draft): link