This class teaches fundamental concepts in programming languages, such as functions, types, memory management and control. The objective is to give students a thorough understanding of the issues and trade-offs in programming languages design. Such an understanding allows them to appreciate advantages and disadvantages of the various languages, so that they can choose the appropriate language for the application they are working on. Prerequisites: some knowledge of at least one object-oriented language (e.g., Java) and at least one procedural language (e.g., C), and some exposure to simple analyses of algorithms and data structures.
Functions. A historical example: some elements of the Lisp language. Abstract machines: interpreters and compilers. Description of a programming language: syntax and semantics. Structured operational semantics: transition systems. The ML language. Environment: identifiers, types, type inference and polymorphism in ML. Memory management: scope, functions and procedures, parameter passing. Control: structure and abstraction, exceptions in ML. Data: abstraction and modularity, modules in ML. Advanced topics on the object-oriented paradigm (optional). Basic elements of concurrent and distributed programming in ML or Java (optional).
|John C. Mitchell||Concepts in Programming Languages (Edizione 1)||Cambridge University Press||2003||0-521-7809||Testo adottato|
|Jeffrey D. Ullman||Elements of ML Programming (Edizione 2)||Prentice Hall||1998||0-13-79038||Riferimento principale per il linguaggio ML|
|Maurizio Gabbrielli, Simone Martini||Linguaggi di programmazione: principi e paradigmi (Edizione 2)||McGraw Hill||2011||88-386-626||Testo di ulteriore riferimento generale|
|Lawrence C. Paulson||ML for the Working Programmer (Edizione 2)||Cambridge University Press||1996||0-521-5654||Altro libro per il linguaggio ML|
|Guy Cousineau, Michel Mauny||The functional approach to programming (Edizione 1)||Cambridge University Press||1998||0-521-5768||Per il linguaggio OCAML|
Partial-tests exam: this mode applies only to those students who take the exam right at the end of the class, that is, in December 2006, given that the class is taught in the Fall term. In this mode, the exam is made of two written tests in class of two hours each (C1 and C2) and some homeworks (A). The grade is determined as follows: 40% C1 + 40% C2 + 20% A. After the exam at the end of the Fall term, C1, C2 and A have no value whatsoever for the later exams. Students who take the exam in this form must register for the exam of December 2006.
Single-test exam: in this mode, the exam is made of a single written test (E), whose difficulty is equivalent to that of C1 + C2 + A, and whose grade determines the grade in the exam. This form of exam applies to all exam sessions, including the one at the end of the class. However, if a student who has taken C1 + C2 + A, takes also test E, the grade determined by 40% C1 + 40% C2 + 20% A no longer applies. In other words, students are not allowed to take both C1 + C2 + A and E and choose the best grade.
Remarks: homeworks will be assigned in class together with the date they are due; test C1 will be held on October 31st, 2006; test C2 will be held in the same date, hour and room of test E of the December session (of course, duration and contents of C2 and E will be different).
Registration: at each session the date of the exam is the date of the written test (E) and therefore it is sufficient to register for that date. The day when the grades are annotated on the students' booklets will be announced in the ads for students. All grades will be registered and transmitted to the Office of the Registrar independent of annotation on the students' booklets.
Rules: all assignments are strictly individual; it is severely forbidden to copy, exchange, share code or other keys to the questions. All assignments that show signs of cheating will receive grade 0, with no distinction between those who copy and those who let them copy.