IT-Universitetet i København
  Tilbage Kursusoversigt
Kursusnavn (dansk):Programming Language Concepts and Implementation, MSc 
Kursusnavn (engelsk):Programming Language Concepts and Implementation, MSc 
Semester:Forår 2018 
Udbydes, softwareudvikling og -teknologi (sdt) 
Omfang i ECTS:7,50 
Min. antal deltagere:
Forventet antal deltagere:
Maks. antal deltagere:25 
Formelle forudsætninger:Programming experience and mastering of Java.

Knowledge of discrete mathematics as taught in Foundations of
Computing - Discrete Mathematics (SGDM).


Information about the course of study
This course is part of a specialization on the Master of Science in IT, study programme Software Development and Technology. 
Læringsmål:After this course you should be able to

* Write small programs in C# using delegates and generics and using type constraints and variance. Analyse Java and C# programs for typing

* Describe the C# machine model, in particular the use of the heap and the stack, and illustrate how memory develops during execution of programs.

* Explain the ideas and principles behind the use of virtual machines on the .NET platform and in the implementation of Java

* Explain the principles behind the implementation of the programming languages Java and C# using virtual stack machines, in particular the principles behind implementation of method calls and generics. Compile (by hand) small example programs from high level languages (both declarative and imperative) using functions, pointers and simple data structures to stack machine code. Show how programs are executed on a stack machine.

* Design representations of abstract syntax for a given object oriented or imperative language; use tools for construction of abstract syntax from textual input; use recursion for analysis and transformation of abstract syntax, e.g. in type analysis, translation or reduction of logical or arithmetic expressions. Eliminate ambiguities from context free grammars

* Compare expressiveness of programming languages (in particular Java and C#) and explain how their properties follow from design decisions and implementation techniques.

* Describe and compare different memory management and garbage collection techniques. 
Fagligt indhold:Programming languages are the most important tools in a software developer's tool box. Knowing the basic principles behind their implementation is crucial for constructing correct and efficient programs.

Building on knowledge of Java the first part of the course focuses on learning C# and in particular advanced concepts such as generics and delegates. We study the machine model, in particular we learn how memory is managed and how parameters are passed to methods. We study the basic principles behind the virtual machines JVM and CLR used in the implementations of C# and Java, and a large part of the course is devoted to the compilation process, i.e., the process of transforming a source program (which is initially just a string of characters) to a program that can be executed on a virtual machine.

In the final lecture we study memory management (including garbage collection algorithms).

In more details the program is as follows.

* The programming language C#, delegates, generics, enumerables, machine model, argument passing and data representation. Differences between C# and Java

* Lexical analysis, regular expressions, finite automata, deterministic and non-deterministic automata, lexers and lexer generators.

* Syntactical analysis, top-down vs bottom-up, LL versus LR, parser generators. Context free grammars, ambiguities and elimination of these.

* Stack machines, evaluation of expressions, post script, intermediate languages for stack machines

* Translation of imperative languages with loops and references

* The machine model behind Java and C# (the heap and the stack), translation from source code to stack machine code

* The intermediate languages of the Java Virtual Machine and the Common Language Infrastructure and their implementation

* Memory management and garbage collection 
Læringsaktiviteter:14 ugers undervisning bestående af forelæsninger og øvelser

14 weeks of teaching consisting of lectures and exercises. The exercise sessions and mandatory assignments focus on programming exercises but include also theoretical exercises. As part of the
mandatory assignments, students will extend a given compiler with new programming features. This involves designing abstract
syntax for the extension and preparing it for parsing.

As preparation for the mandatory exam, lectures will include interactive elements such as exercise solving in plenum. The last
lecture will be dedicated to exam preparation, and students will be expected to prepare presentations at the board. 

Obligatoriske aktivititer:There are 5 mandatory assignments, out of which 4 must be approved for the student to qualify for the exam.
The deadlines are evenly distributed over the semester (approximately one every 3 weeks), exact dates will be posted on learnit the first week of the semester.
If a mandatory assignment is not approved the first time, the student will be allowed to resubmit exactly one week after the first deadline.
If this also fails, one more resubmission the following week is allowed.

Be aware: The student will receive the grade NA (not approved) at the ordinary exam, if the mandatory activities are not approved and the student will use an exam attempt 
Eksamensform og -beskrivelse:B1I Mundtlig eksamen med forberedelse. På ITU, (7-scale, external exam)

The duration of the oral examination is 30 minutes with 30 minutes preparation. At the exam students will draw a question and
prepare a solution to be presented orally. The presentation will be followed by questions that may be in any topic of the curriculum.  

Litteratur udover forskningsartikler:P. Sestoft and Henrik I. Hansen, C# Precisely, second edition, The MIT Press 2012. ISBN 978-0-262-51686

P. Sestoft: Programming Language Concepts, Springer Undergraduate Texts in Computer Science. ISBN 978-1-4471-4155-6. July 2012.