COMP 3031 - Fall 2012

Fall 2012, COMP 3031 Principles of Programming Languages [3 units]
Lecture 2, WF 16:30-17:50, Rm 2464 (Lift 25-26)
Prof. Dekai WU, Rm 3539, 2358-6989, dekai@cs.ust.hk

Lab 2A Mo 15:00-15:50, Rm 4214 (Lift 19)
Lab 2B Tu 17:00-17:50, Rm 4214 (Lift 19)
Lab 2C M 12:00-12:50, Rm 4214 (Lift 19)

The TAs are Ms Shirley JIANG Xiaonan, Ms LI Zhaohua, and Mr Karteek ADDANKI.

You are welcome to knock on the door of the instructor any time. The TAs' office hours are posted at http://course.cs.ust.hk/comp3031/L2/.

ANNOUNCEMENTS

2012.10.06 The due date for A2 will be Oct 21. If you've already finished A1, you can go ahead and start!
2012.09.19 The due date for A1 is extended to Sep 30 (or, for students who registered at lecture on Sep 28, is extended to Oct 7).
2012.09.12 Welcome to COMP3031! Labs will begin in Week 2.

Always check the Discussion Forum for up-to-the-minute announcements.

Discussion forum is at http://comp151.cse.ust.hk/~dekai/content/?q=forum/2. Always read before asking/posting/emailing your question.
Course home page is at http://www.cs.ust.hk/~dekai/3031/.
Lab info is at http://course.cs.ust.hk/comp3031/L2/.

ORIENTATION

Welcome to COMP 3031, which takes over where COMP 2021 (previously 152 or 151/171) left off. This course is designed to give you the solid software engineering experience necessary to build, extend, and maintain a realistically sized non-toy program, using both traditional and up-to-date techniques that you will need on the job. Most students find that C++ and other modern languages offer a huge, confusing variety of different and often-contradictory complexities. In this sequence you will untangle the confusion by gaining an enhanced holistic theoretical perspective, comparing and contrasting the most important paradigms of programming languages.

Understand by doing. The only way to learn languages is through serious practice. The only way to appreciate software engineering is to engineer some serious software. And by far the best way to understand programming languages is to implement one.

So, through an integrated series of programming assignments, you will use C++ to gradually implement your own complete interpreter for a real programming language that is a small but fully operational version of Scheme (or Lisp).

You will learn the most important procedural, static and dynamic object-oriented, and generic programming paradigms of C++ programming, through hands-on practice with building the basic pieces of your Scheme interpreter. The Scheme programming project will help deepen the C++ concepts you have learned, by giving you a better understanding of the functional and generic programming roots and foundations that underlie the design and effective use of STL in the C++ Standard Library. We will also learn about the syntactic description and analysis of programming languages, and their runtime environments. Toward the end we will extend our learning to logic programming, which is a powerful paradigm that has yet to become widely exploited in typical C++ environments. Throughout the entire series, you will focus on developing adequate software engineering habits, so that you can continue to build, extend, and maintain the code you have built so far.

Academic Calendar Description

3031. Comparative studies of programming languages, programming language concepts and constructs. Non-imperative programming paradigms: object-oriented, functional, logic, concurrent programming. Basic concepts of program translation and interpretation. Storage allocation and run-time organization. Prerequisite: COMP 2021/2021H; or (prior to 2009-10) COMP 151/151H and COMP171/171H

TEXTBOOKS

Reference Books

HONOR POLICY

To receive a passing grade, you are required to sign an honor statement acknowledging that you understand and will uphold all policies on plagiarism and collaboration.

Plagiarism

All materials submitted for grading must be your own work. You are advised against being involved in any form of copying (either copying other people's work or allowing others to copy yours). If you are found to be involved in an incident of plagiarism, you will receive a failing grade for the course and the incident will be reported for appropriate disciplinary actions.

University policy requires that students who cheat more than once be expelled. Please review the cheating topic from your UST Student Orientation.

Warning: sophisticated plagiarism detection systems are in operation!

Collaboration

You are encouraged to collaborate in study groups. However, you must write up solutions on your own. You must also acknowledge your collaborators in the write-up for each problem, whether or not they are classmates. Other cases will be dealt with as plagiarism.

GRADING

The course will be graded on a curve, but no matter what the curve is, I guarantee you the following.

If you achieve 85% you will receive at least a A grade.

75%
B

65%
C

55%
D

Your grade will be determined by a combination of factors:

Midterm exam ~20%
Final exam ~25%
Participation ~5%
Homework ~40%
Labs ~10%

Examinations

No reading material is allowed during the examinations. No make-ups will be given unless prior approval is granted by the instructor, or you are in unfavorable medical condition with physician's documentation on the day of the examination. In addition, being absent at the final examination results in automatic failure of the course according to university regulations, unless prior approval is obtained from the department head.

There will be one midterm worth approximately 20%, and one final exam worth approximately 25%.

Participation

Software engineering is about communication between people. Good participation in class and/or the online forum will count for approximately 5%.

Assignments

All programming assignments must be submitted by 23:00 on the due date. C++ programming assignments must be compiled using g++ on Unix and will be collected electronically using the automated CASS assignment collection system. Late assignments cannot be accepted. Sorry, in the interest of fairness, exceptions cannot be made.

Programming assignments will account for a total of approximately 40%.

Labs

All information for laboratory assignments is at http://course.cs.ust.hk/comp3031/L2/.

Laboratory assignments will be due Monday of the week after they are announced at 23:00. Laboratory/tutorial assignments must be in C++ on Unix and will be collected electronically using the automated CASS assignment collection system. Late assignments cannot be accepted. Sorry, in the interest of fairness, exceptions cannot be made.

You will also have the option to turn in your laboratory/tutorial assignments in lab by demonstrating to the TA. This will also give you an opportunity to get an early indication of whether your assignment is correct. If not, you may still decide to fix it, and then wait until the Monday 23:00 CASS collection to turn in your assignment.

There will be up to 10 laboratory/tutorial assignments, which in total will count for approximately 10%.

SCHEDULE

Date Wk Event Paradigm Topic Notes Additional Reading Assignments Optional
 






2012.09.12 1 Lecture SwEngr
Tool users vs. tool builders: How programming languages differ
Administrivia (honor statement, HKUST classroom conduct)
Business Week, The Perils of JavaSchools, Bjarne Stroustrup on Educating Software Developers [extra/review: V1.Ch3, V1.Ch8]


2012.09.14
1
Lecture
Functional
Scheme Review on References, Const Due date extended to Sep 30 (or, for students who registered at lecture Sep 28, extended to Oct 7)
A1

2012.09.19
2
Lecture
Functional / SwEngr
Scheme: s-expressions, cons pairs & linked lists, proper encapsulation


2012.09.21
2
Lecture
Functional / SwEngr Scheme: parsing of expressions, evaluation of expressions



2012.09.26
3
Lecture
Functional / SwEngr Scheme: cons cells / tagged unions


2012.09.28
3
Lecture
Functional / SwEngr Scheme: Intensive coding session, recursion for printing & evaluation

Due date Oct 21
A2

2012.10.03
4
Lecture
Dynamic OO / SwEngr
Polymorphism


2012.10.05
4
Lecture
Dynamic OO / SwEngr Polymorphism


2012.10.10
5
Lecture
Functional
Scheme: functions as values / currying / lambda calculus


2012.10.12
5
Lecture
Functional / Dynamic OO
Scheme: substitution, Polymorphism
Review on Virtual Functions


2012.10.17
6
Lecture
Functional
Scheme: map & reduce / let

Due date Oct 28
Optional A3
2012.10.19 6
Lecture
Functional / Procedural
Scheme: equality / side effects


Due date Nov 7
Optional A4
2012.10.24
7
Lecture
Functional
Scheme: Scope / implementing lambda, Designing functional programs using recursion
Due date Nov 1
A5

2012.10.26
7
Lecture
Functional / Procedural Scope and parameter passing, activation records


2012.10.31
8
Lecture
Functional / Procedural
Scope and parameter passing, activation records


2012.11.02
8
Lecture

Midterm review



2012.11.02
8
Exam

Midterm 19:00-21:00, LTJ


2012.11.07
9


(rescheduled to Nov 2 eve midterm)



2012.11.09
9
Lecture
Syntax
Language Description: Syntax and Grammars


2012.11.14
10


(no lecture)



2012.11.16
10
Lecture
Grammars
Language Description: Syntax and Grammars
Due date Nov 27
A6

2012.11.21
11
Lecture
Parsing
Lex (GNU Flex) Bison user manual, FLEX and BISON on WIN32 platform

2012.11.23
11
Lecture
Parsing
Yacc (GNU Bison)


2011.11.28 12 Lecture Parsing Yacc (GNU Bison)

2012.11.30
12
Lecture
Functional
ML and Type Inference


2012.12.05
13
Lecture
Functional
ML and Type Inference


2012.12.07
13
Lecture
Functional
ML and Type Inference The Stupidity of Computers, International Workshop on Spoken Language Translation


2012.12.21

Exam

Final 12:30-15:30, Sports Hall Lobby





dekai@cs.ust.hk
Last updated: 2012.12.07