IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Programming Language Concepts and Implementation 
Kursusnavn (engelsk):Programming Language Concepts and Implementation 
Semester:Efterår 2014 
Udbydes under:cand.it., softwareudvikling og -teknologi (sdt) 
Omfang i ECTS:7,50 
Kursussprog:Engelsk 
Kursushjemmeside:https://learnit.itu.dk 
Min. antal deltagere:12 
Forventet antal deltagere:25 
Maks. antal deltagere:30 
Formelle forudsætninger:Programming experience and mastering of Java.

Knowledge of discrete mathematics as taught in Foundations of
Computing - Discrete Mathematics (SGDM). These courses can be taken in
parallel.

-----

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.

* 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 mandatory exercises the student will be asked to extend a compiler from a small toy source language with further programming language features.

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

* 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

A number of mandatory assignments must be approved to qualify for the exam. 

Obligatoriske aktivititer:During this course students will be required to hand in 5 mandatory assignments. 4 out of 5 assignments need to be completed/approved before being eligible to register for the examination and e.g. being allowed to submit written work for examination. Failure to hand in these mandatory assignments on time will mean that the registration for examination is annulled.
(Deadlines are posted separately, e.g. on the course blog):

Submission/completion of mandatory activities before 1 December 2014 
Eksamensform og -beskrivelse:X. experimental examination form (7-scale; external exam), 7-trins-skala, Ekstern prøve

The duration of the oral examination is 30 minutes with 30 minutes preparation.
 

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.