CS2040: Principles of Programming Languages and CS2041: Principles of Programming Languages Laboratory

January 2015 - May 2015

Instructor: Ramakrishna Upadrasta (U. Ramakrishna)
Email: Ramakrishna AT iith DOT ac DOT in

TAs (IITH email-IDs: <ID> AT iith DOT ac DOT in) : Natti Bhuvana Sai (cs13m1006), Kiran Bhos (cs13m1011), Chavan Yogesh Laxman (cs13m1012), Utpal Bora (cs14mtech11017), Aditya Kamath (cs11b001), Bhargav Reddy G (cs11b012), Agam Agarwal (CS12B1003), Ajay Brahmakshatriya (CS12B1004), Bhatu Pratik (CS12B1010)

Discussion Google-group: iith-popl-jan15 AT googlegroups DOT com Join Group (only with IITH email-IDs)
Classes: Mon: 8:30am-10:00am, Thu: 10:00am-11:30am (A slot); Room: CL#123
Labs (CS2041) : Wed: 8:30am-11:30am (L40, L15); (Code: L40=Lab on 1st floor next to library, L15=Lab next to server room.)

Credits: CS2040:CS2041 3:2
Prerequisites: CS2040 and CS2041: 2nd year CS B.Techs who have completed IITH courses in C programming and data-structures; Also, a concurrent registration to both CS2040 and CS2041 is compulsory.

Course Description (CS2040)

The objective of CS2040 course is to learn basic principles of programming languages: their concepts, constructs, syntax, semantics and pragmatics. The course will focus on the classic programming language paradigms of Imperative, Object Oriented, Functional, Logic and Scripting.

The initial part of this course will focus on understanding some aspects of Imperative and Object Oriented paradigms using C/C++ and Java as languages. The next focus would be the Functional paradigm using Scheme/Racket and ML as languages followed by quickly covering the Logic paradigm using Prolog. Finally, the focus would shift to Scripting paradigm using Python and Javascript as languages.

Course Description (CS2041)

A large part of CS2041 lab would be in understanding the syntax or semantics of a variety of languages which fall under various paradigms like Imperative (C/C++), Object Oriented (C++, Java), Functional (Lisp/Scheme/Racket, ML) and Scripting (Python, Javascript). It would be a hands on approach involving writing programs in new programming languages. There would also be projects that involve writing mini-translators for some of the above languages.

CS2041 is the B.Tech lab accompanying the corresponding B.Tech course CS2040. For registrants of CS2040, a registration to CS2041 is compulsory. A major means of evaluation of CS2041 would be the above programming assignments.

Lecture Schedule

1st-Jan-2015 Organization & Logistics,
An Overview of Programming Languages
5th-Jan-2015 An Overview of Programming Languages

Readings: PLP, Ch.1
12th-Jan-2015 No class
Instructor at TIFR, Mumbai to attend POPL-2015 conference.

Readings (All) PLP, Sec. 3.1
15th-Jan-2015 No class
19th-Jan-2015 Names and Binding Time

Readings (All) PLP, Sec. 3.1
22nd-Jan-2015 No class (Instructor sick)

Readings (All) PLP, Sec. 3.1-3.3
29th-Jan-2015 Binding Times, Lifetimes, Scope Rules PDF

Readings (All) PLP, Sec. 3.2-3.3
2nd-Feb-2015 Scope Rules, Bindings PDF

Readings (All) PLP, Sec. 3.2-3.3
Scopes and Lifetimes section from K&R and Stroustrup


Language References:

Some Class Links:

Some Miscellaneous/Fun Links:

Grading (CS2040)

Activity Weight
Class Participation and Attendance 10%
Written Homeworks 10%
Mini Prog. Assignments 10%
Quizzes (in class) 5%
Mid Term Exam 30%
End Term Exam 35%

Grading (CS2041)

Activity Weight
Programming Assignments 45%
Mini Prog. Assignments 10%
Mid Term Programming Exam 20%
End Term Programming Exam 25%

Important: Plagiarism Policy of IITH-CSE Department.