Difference between revisions of "Courses/CcmpTylaLogIng2016 (Ing1 students)"

From LRDE

(Initialize page with contents from TWiki's Epita.CcmpTylaLogIng2015 topic.)
 
(Fix most TWiki-to-MediaWiki conversion issues.)
Line 1: Line 1:
{{DISPLAYTITLE:%TOPIC%}}
 
 
 
__NOTOC__
 
__NOTOC__
   
 
This page contains the log of the topics of
 
This page contains the log of the topics of
* the [[Epita/CMP1-Course|Compiler Construction Course 1 (CMP1)]],
+
* the [[CMP1-Course|Compiler Construction Course 1 (CMP1)]],
* the [[Epita/CMP2-Course|Compiler Construction Course 2 (CMP2)]], and
+
* the [[CMP2-Course|Compiler Construction Course 2 (CMP2)]], and
* the [[Epita/TYLA-Course|Typology of Programming Languages Course (TYLA)]]
+
* the [[TYLA-Course|Typology of Programming Languages Course (TYLA)]]
for Ing1 students of class EPITA 2015 (i.e., from November 2012 to June 2013).
+
for Ing1 students of class EPITA 2016 (i.e., from December 2013 to June 2014).
 
The topic was started with the [[Epita/THL-Course|Formal Languages Lecture (THL)]].
 
The topic was started with the [[Epita/THL-Course|Formal Languages Lecture (THL)]].
   
Line 13: Line 11:
   
   
== CMP1 (%roland%) ==
+
== CMP1 ==
   
 
=== Lecture 1: 2012-11-21 (Grp. B) & 2012-11-22 (Grp. A), 2 hours: Introduction to the Project ===
 
=== Lecture 1: 2012-11-21 (Grp. B) & 2012-11-22 (Grp. A), 2 hours: Introduction to the Project ===
   
  +
# The Tiger Project. See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/tiger-project-intro.pdf tiger-project-intro.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/tiger-project-intro-handout.pdf tiger-project-intro-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/tiger-project-intro-handout-4.pdf tiger-project-intro-handout-4.pdf].
# The Tiger Project. See the lecture notes:
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/tiger-project-intro.pdf tiger-project-intro.pdf],
+
## Ressources (http://www.lrde.epita.fr/~tiger/).
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/tiger-project-intro-handout.pdf tiger-project-intro-handout.pdf] and
+
### Assignments (http://www.lrde.epita.fr/~tiger/assignments.html).
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/tiger-project-intro-handout-4.pdf tiger-project-intro-handout-4.pdf].
 
## Ressources (http://www.lrde.epita.fr/~akim/ccmp/).
 
### Assignments (http://www.lrde.epita.fr/~akim/ccmp/assignments.html).
 
 
### Appel's books.
 
### Appel's books.
### Tiger Compiler Reference Manual (http://www.lrde.epita.fr/~akim/ccmp/tiger.html).
+
### Tiger Compiler Reference Manual (http://www.lrde.epita.fr/~tiger/tiger.html).
 
### <tt>epita.cours.compile</tt>.
 
### <tt>epita.cours.compile</tt>.
 
## Goals (C++, OO, DP, Management, Several Iterations, Testing, Documenting, Maintaining, Fixing, Understanding Computers, English).
 
## Goals (C++, OO, DP, Management, Several Iterations, Testing, Documenting, Maintaining, Fixing, Understanding Computers, English).
Line 55: Line 50:
 
=== Lecture 2: 2012-12-10 (Grp. B & A), 2 hours: Scanner and Parser Hints ===
 
=== Lecture 2: 2012-12-10 (Grp. B & A), 2 hours: Scanner and Parser Hints ===
   
# Additional details and hints about the scanner and the parser: The Scanner and the Parser. See the lecture notes:
+
# Additional details and hints about the scanner and the parser: The Scanner and the Parser. See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/scanner.pdf scanner.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/scanner-handout.pdf scanner-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/scanner-handout-4.pdf scanner-handout-4.pdf].
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/scanner.pdf scanner.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/scanner-handout.pdf scanner-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/scanner-handout-4.pdf scanner-handout-4.pdf].
 
 
## Symbols (light-weight, shared and non-mutable strings used to represent identifiers).
 
## Symbols (light-weight, shared and non-mutable strings used to represent identifiers).
 
## Extra information (in addition to tokens/terminals) passed between the scanner and the parser.
 
## Extra information (in addition to tokens/terminals) passed between the scanner and the parser.
Line 72: Line 64:
 
## Modules: <tt>parse</tt>, <tt>ast</tt>, <tt>bind</tt>, etc.
 
## Modules: <tt>parse</tt>, <tt>ast</tt>, <tt>bind</tt>, etc.
 
### Pure libraries providing actual services.
 
### Pure libraries providing actual services.
### Tasks (non-pure services) using a declarative system: Development Tools, section 1 (<tt>tc</tt> Tasks). See the lecture notes:
+
### Tasks (non-pure services) using a declarative system: Development Tools, section 1 (<tt>tc</tt> Tasks). See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/dev-tools.pdf dev-tools.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/dev-tools-handout.pdf dev-tools-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/dev-tools-handout-4.pdf dev-tools-handout-4.pdf].
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/dev-tools.pdf dev-tools.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/dev-tools-handout.pdf dev-tools-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/dev-tools-handout-4.pdf dev-tools-handout-4.pdf].
 
 
#### Command-line options.
 
#### Command-line options.
 
#### Declaration of dependencies.
 
#### Declaration of dependencies.
Line 130: Line 119:
 
### Pros and cons of using multiple <tt>Makefile</tt> s in a multi-directory project.
 
### Pros and cons of using multiple <tt>Makefile</tt> s in a multi-directory project.
 
### <tt>srcdir</tt> vs <tt>builddir</tt>, running <tt>configure</tt> from a directory other than the source dir.
 
### <tt>srcdir</tt> vs <tt>builddir</tt>, running <tt>configure</tt> from a directory other than the source dir.
  +
# Development Tools. See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/dev-tools.pdf dev-tools.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/dev-tools-handout.pdf dev-tools-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/dev-tools-handout-4.pdf dev-tools-handout-4.pdf].
# Development Tools. See the lecture notes:
 
  +
# Abstract Syntax, up to basic Visitors (sec. 2.3, p. 51) and except AST Generators (p. 613), Tagging the Abstract Syntax Tree (p. 22), Processing and Dispatching (p. 3638), Multimethods (p. 4042). See the lecture notes, [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/ast.pdf ast.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/ast-handout.pdf ast-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/ast-handout-4.pdf ast-handout-4.pdf].
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/dev-tools.pdf dev-tools.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/dev-tools-handout.pdf dev-tools-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/dev-tools-handout-4.pdf dev-tools-handout-4.pdf].
 
# Abstract Syntax, up to basic Visitors (sec. 2.3, p. 51) and except AST Generators (p. 613), Tagging the Abstract Syntax Tree (p. 22), Processing and Dispatching (p. 3638), Multimethods (p. 4042). See the lecture notes,
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/ast.pdf ast.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/ast-handout.pdf ast-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/ast-handout-4.pdf ast-handout-4.pdf].
 
   
 
=== Lecture 5: 2013-02-20 (Grp. A & B), 2 hours: Abstract Syntax ===
 
=== Lecture 5: 2013-02-20 (Grp. A & B), 2 hours: Abstract Syntax ===
   
* Abstract Syntax. See the lecture notes, [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/ast.pdf ast.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/ast-handout.pdf ast-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/ast-handout-4.pdf ast-handout-4.pdf].
+
* Abstract Syntax. See the lecture notes, [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/ast.pdf ast.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/ast-handout.pdf ast-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/ast-handout-4.pdf ast-handout-4.pdf].
   
 
=== Lecture 6: 2013-02-27 (Grp. A & B), 2 hours: Names, Identifiers and Bindings ===
 
=== Lecture 6: 2013-02-27 (Grp. A & B), 2 hours: Names, Identifiers and Bindings ===
   
* Names, Identifiers and Bindings. See the lecture notes, [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/names.pdf names.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/names-handout.pdf names-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/names-handout-4.pdf names-handout-4.pdf].
+
* Names, Identifiers and Bindings. See the lecture notes, [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/names.pdf names.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/names-handout.pdf names-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/names-handout-4.pdf names-handout-4.pdf].
   
   
== CMP2 (%roland%) ==
+
== CMP2 ==
   
 
=== Lecture 1: 2013-03-11 (Grp. A & B), 2 hours: Type-checking ===
 
=== Lecture 1: 2013-03-11 (Grp. A & B), 2 hours: Type-checking ===
   
  +
# Types. See the lecture notes (sections 1 and 2): [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/type-checking.pdf type-checking.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/type-checking-handout.pdf type-checking-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/type-checking-handout-4.pdf type-checking-handout-4.pdf].
# Types. See the lecture notes (sections 1 and 2):
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/type-checking.pdf type-checking.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/type-checking-handout.pdf type-checking-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/type-checking-handout-4.pdf type-checking-handout-4.pdf].
 
 
# Some details on the implementation of types and type-checking within the Tiger Compiler.
 
# Some details on the implementation of types and type-checking within the Tiger Compiler.
 
## Hierarchy of types (<tt>src/type/</tt>)
 
## Hierarchy of types (<tt>src/type/</tt>)
Line 164: Line 144:
 
=== Lecture 2: 2013-04-25 (Grp. A & B), 2 hours: Intermediate languages ===
 
=== Lecture 2: 2013-04-25 (Grp. A & B), 2 hours: Intermediate languages ===
   
# Intermediate languages. See the lecture notes (up to section 4.1 (included), except dynamic allocation, non-local variables & static link, calling conventions, Ix, translation of complex expressions, proper explanation of frame::{Access,Frame} vs translate::{Access,Level}):
+
# Intermediate languages. See the lecture notes (up to section 4.1 (included), except dynamic allocation, non-local variables & static link, calling conventions, Ix, translation of complex expressions, proper explanation of frame::{Access,Frame} vs translate::{Access,Level}): [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
 
   
 
=== Lecture 3: 2013-05-02 (Grp. A & B), 2 hours: Intermediate languages, Canonization (Linearization) ===
 
=== Lecture 3: 2013-05-02 (Grp. A & B), 2 hours: Intermediate languages, Canonization (Linearization) ===
   
* Intermediate languages (dynamic allocation, non-local variables & static link, calling conventions, Ix, translation of complex expressions, proper explanation of frame::{Access,Frame} vs translate::{Access,Level}). See the lecture notes (remaining sections up to section 4.1): [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
+
* Intermediate languages (dynamic allocation, non-local variables & static link, calling conventions, Ix, translation of complex expressions, proper explanation of frame::{Access,Frame} vs translate::{Access,Level}). See the lecture notes (remaining sections up to section 4.1): [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
* Canonization (Linearization). See the lecture notes (section 4.2, up to slide 100): [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
+
* Canonization (Linearization). See the lecture notes (section 4.2, up to slide 100): [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
   
 
=== Lecture 4: 2013-05-06 (Grp. A & B), 2 hours: Canonization (Basic Blocks, Traces), Microprocessors, Instruction Selection ===
 
=== Lecture 4: 2013-05-06 (Grp. A & B), 2 hours: Canonization (Basic Blocks, Traces), Microprocessors, Instruction Selection ===
   
* Canonization (Basic Blocks, Traces). See the lecture notes (up to the end): [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
+
* Canonization (Basic Blocks, Traces). See the lecture notes (up to the end): [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
* Microprocessors, Instruction Selection. See the lecture notes: [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/instr-selection.pdf instr-selection.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/instr-selection-handout.pdf instr-selection-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/instr-selection-handout-4.pdf instr-selection-handout-4.pdf].
+
* Microprocessors, Instruction Selection. See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/instr-selection.pdf instr-selection.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/instr-selection-handout.pdf instr-selection-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/instr-selection-handout-4.pdf instr-selection-handout-4.pdf].
 
* Examples of MonoBURG input files from the Tiger Compiler (Tree to MIPS).
 
* Examples of MonoBURG input files from the Tiger Compiler (Tree to MIPS).
   
 
=== Lecture 5: 2013-05-30 (Grp. A & B), 2 hours: Liveness Analysis, Register Allocation ===
 
=== Lecture 5: 2013-05-30 (Grp. A & B), 2 hours: Liveness Analysis, Register Allocation ===
   
* Liveness Analysis. See the lecture notes: [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/liveness.pdf liveness.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/liveness-handout.pdf liveness-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/liveness-handout-4.pdf liveness-handout-4.pdf].
+
* Liveness Analysis. See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/liveness.pdf liveness.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/liveness-handout.pdf liveness-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/liveness-handout-4.pdf liveness-handout-4.pdf].
* Register Allocation: Coloring by Simplification, Spilling, Coalescing, Precolored Nodes, Caller- and Callee-Saved Registers, Implementation, Alternatives to Graph Coloring. See the lecture notes: [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/regalloc.pdf regalloc.pdf], [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/regalloc-handout.pdf regalloc-handout.pdf] and [http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/regalloc-handout-4.pdf regalloc-handout-4.pdf].
+
* Register Allocation: Coloring by Simplification, Spilling, Coalescing, Precolored Nodes, Caller- and Callee-Saved Registers, Implementation, Alternatives to Graph Coloring. See the lecture notes: [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/regalloc.pdf regalloc.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/regalloc-handout.pdf regalloc-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/regalloc-handout-4.pdf regalloc-handout-4.pdf].
   
 
=== Lecture 6: 2013-06-13 (Grp. A & B), 2 hours: Selected Topics About the Future of Languages and Compilation ===
 
=== Lecture 6: 2013-06-13 (Grp. A & B), 2 hours: Selected Topics About the Future of Languages and Compilation ===
Line 192: Line 169:
   
   
== TYLA (%roland%) ==
+
== TYLA ==
   
 
=== Lecture 1: 2013-02-27 (Grp. B & A), 2 hours: History of Computing and Programming Languages ===
 
=== Lecture 1: 2013-02-27 (Grp. B & A), 2 hours: History of Computing and Programming Languages ===
   
  +
# History of Computing. See the lecture notes, [https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/tyla/history.pdf history.pdf], [https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/tyla/history-handout.pdf history-handout.pdf] and [https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/tyla/history-handout-4.pdf history-handout-4.pdf].
# History of Computing. See the lecture notes,
 
  +
# History of Programming Languages: FOTRAN, Algol (section 1.1 and 1.2). See the lecture notes, [https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/tyla/early-languages.pdf early-languages.pdf], [https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/tyla/early-languages-handout.pdf early-languages-handout.pdf] and [https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/tyla/early-languages-handout-4.pdf early-languages-handout-4.pdf].
[https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/tyla/history.pdf history.pdf],
 
[https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/tyla/history-handout.pdf history-handout.pdf] and
 
[https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/tyla/history-handout-4.pdf history-handout-4.pdf].
 
# History of Programming Languages: FOTRAN, Algol (section 1.1 and 1.2). See the lecture notes,
 
[https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/tyla/early-languages.pdf early-languages.pdf],
 
[https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/tyla/early-languages-handout.pdf early-languages-handout.pdf] and
 
[https://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/tyla/early-languages-handout-4.pdf early-languages-handout-4.pdf].
 
   
 
=== Lecture 2: 2013-03-06 (Grp. B & A), 2 hours: History of Programming Languages, Object-Oriented History ===
 
=== Lecture 2: 2013-03-06 (Grp. B & A), 2 hours: History of Programming Languages, Object-Oriented History ===
Line 227: Line 198:
 
*** <tt>loop-lazy.ml</tt> (local/partial lazy evaluation, terminates)
 
*** <tt>loop-lazy.ml</tt> (local/partial lazy evaluation, terminates)
   
loop.hs:
+
<tt>loop.hs</tt>:
  +
<pre>
%begin haskell%
 
 
main =
 
main =
 
let y = 0
 
let y = 0
Line 235: Line 206:
 
in
 
in
 
f (loop y)
 
f (loop y)
  +
</pre>
%end%
 
   
loop.ml:
+
<tt>loop.ml</tt>:
  +
<pre>
%begin haskell%
 
 
let y = 0 in
 
let y = 0 in
 
let rec loop z = if z > 0 then z else loop z in
 
let rec loop z = if z > 0 then z else loop z in
Line 244: Line 215:
 
f (loop y)
 
f (loop y)
 
;;
 
;;
  +
</pre>
%end%
 
   
loop-lazy.ml:
+
<tt>loop-lazy.ml</tt>:
  +
<pre>
%begin haskell%
 
 
let y = 0 in
 
let y = 0 in
 
let rec loop z = if z > 0 then z else loop z in
 
let rec loop z = if z > 0 then z else loop z in
Line 253: Line 224:
 
f (lazy (loop y))
 
f (lazy (loop y))
 
;;
 
;;
  +
</pre>
%end%
 
   
 
=== Lecture 5: 2013-03-25 (Grp. B & A), 2 hours: Type-checking, Generic Programming ===
 
=== Lecture 5: 2013-03-25 (Grp. B & A), 2 hours: Type-checking, Generic Programming ===
   
 
# Sequent Calculus
 
# Sequent Calculus
## In English: "If ''alpha'' is of type '''Int''' in the context ''Gamma'' and ''beta'' is of type '''Int''' in the context ''Gamma'',
+
## In English: "If ''alpha'' is of type '''Int''' in the context ''Gamma'' and ''beta'' is of type '''Int''' in the context ''Gamma'', then ''alpha'' + ''beta'' is of type '''Int''' in the context ''Gamma''."
  +
## Using symbols (where &#8866; ("tee" or "turnstile") is the symbol meaning "yields" or "proves"): <math>\frac{\Gamma\vdash\alpha:Int \quad \Gamma\vdash\alpha:Int}{\Gamma\vdash\alpha+\beta:Int} </math>
then ''alpha'' + ''beta'' is of type '''Int''' in the context ''Gamma''."
 
## Using symbols (where &#8866; ("tee" or "turnstile") is the symbol meaning "yields" or "proves"):
 
<center>
 
<math xmlns="http://www.w3.org/1998/Math/MathML">
 
<semantics>
 
<mfrac>
 
<mrow>
 
<mo stretchy="false">&#915;</mo>
 
<mi>&#8866;</mi>
 
<mo stretchy="false">&#945;</mo>
 
<mi mathvariant="normal">:</mi>
 
<mtext>Int</mtext>
 
<mi/>
 
<mo stretchy="false">&#915;</mo>
 
<mi>&#8866;</mi>
 
<mi mathvariant="italic">&#946;</mi>
 
<mi mathvariant="normal">:</mi>
 
<mtext>Int</mtext>
 
</mrow>
 
<mrow>
 
<mo stretchy="false">&#915;</mo>
 
<mi>&#8866;</mi>
 
<mrow>
 
<mo stretchy="false">&#945;</mo>
 
<mo stretchy="false">+</mo>
 
<mi mathvariant="italic">&#946;</mi>
 
</mrow>
 
<mi mathvariant="normal">:</mi>
 
<mtext>Int</mtext>
 
</mrow>
 
</mfrac>
 
</semantics>
 
</math>
 
</center>
 
 
## Examples of type rules: addition of 2 integers, if-then-else, if-then, addition of 3 integers, comparison of two variables, etc.
 
## Examples of type rules: addition of 2 integers, if-then-else, if-then, addition of 3 integers, comparison of two variables, etc.
 
## Type inference
 
## Type inference
### <tt>(''a_ ? _b'' : _c_) > 0</tt>
+
### <tt>(''a'' ? ''b'' : ''c'') > 0</tt>
### <tt>(''a_ ? _b'' : ''f_ (_b'')) > 0</tt>
+
### <tt>(''a'' ? ''b'' : ''f''(''b'')) > 0</tt>
### <tt>(''a_ ? _b'' : ''f_ (_c'')) > 0</tt>
+
### <tt>(''a'' ? ''b'' : ''f''(''c'')) > 0</tt>
  +
# Generic Programming (sections 1, 2 and 3). See the lecture notes, [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/tyla/generic.pdf generic.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/tyla/generic-handout.pdf generic-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/tyla/generic-handout-4.pdf generic-handout-4.pdf].
# Generic Programming (sections 1, 2 and 3). See the lecture notes,
 
  +
# Genericity in Haskell. See the lecture notes (in section 2.3): [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/tyla/generic.pdf generic.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/tyla/generic-handout.pdf generic-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/tyla/generic-handout-4.pdf generic-handout-4.pdf].
 
# Genericity in Haskell. See the lecture notes (in section 2.3):
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/ccmp/intermediate.pdf intermediate.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/ccmp/intermediate-handout.pdf intermediate-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/ccmp/intermediate-handout-4.pdf intermediate-handout-4.pdf].
 
   
 
=== Lecture 6: 2013-03-26 (Grp. A & B), 2 hours: Genericity in C++, the Standard Template Library (STL) and Template Metaprogramming, OOP vs GP ===
 
=== Lecture 6: 2013-03-26 (Grp. A & B), 2 hours: Genericity in C++, the Standard Template Library (STL) and Template Metaprogramming, OOP vs GP ===
   
  +
# Generic Programming (sections 4). See the lecture notes, [http://www.lrde.epita.fr/~tiger/lecture-notes/slides/tyla/generic.pdf generic.pdf], [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts/tyla/generic-handout.pdf generic-handout.pdf] and [http://www.lrde.epita.fr/~tiger/lecture-notes/handouts-4/tyla/generic-handout-4.pdf generic-handout-4.pdf].
# Generic Programming (sections 4). See the lecture notes,
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/slides/tyla/generic.pdf generic.pdf],
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts/tyla/generic-handout.pdf generic-handout.pdf] and
 
[http://www.lrde.epita.fr/~akim/ccmp/lecture-notes/handouts-4/tyla/generic-handout-4.pdf generic-handout-4.pdf].
 
 
# More on GP, concepts and links between GP and OOP.
 
# More on GP, concepts and links between GP and OOP.
 
## OOP vs OOP
 
## OOP vs OOP
Line 326: Line 255:
 
### "Concepts light" proposal
 
### "Concepts light" proposal
 
### By Mixing OOP and GP
 
### By Mixing OOP and GP
#### The Curiously Recurring Template Pattern (CRTP).
+
#### The Curiously Recurring Template Pattern (CRTP). Mixing two kinds of relations between a base class (top) and a derived class (bottom), in opposite ways:
Mixing two kinds of relations between a base class (top) and a derived class (bottom), in opposite ways:
 
 
##### Inheritance (top-down).
 
##### Inheritance (top-down).
 
##### Parameter passing (bottom-up).
 
##### Parameter passing (bottom-up).

Revision as of 15:08, 3 March 2014


This page contains the log of the topics of

for Ing1 students of class EPITA 2016 (i.e., from December 2013 to June 2014). The topic was started with the Formal Languages Lecture (THL).



CMP1

Lecture 1: 2012-11-21 (Grp. B) & 2012-11-22 (Grp. A), 2 hours: Introduction to the Project

  1. The Tiger Project. See the lecture notes: tiger-project-intro.pdf, tiger-project-intro-handout.pdf and tiger-project-intro-handout-4.pdf.
    1. Ressources (http://www.lrde.epita.fr/~tiger/).
      1. Assignments (http://www.lrde.epita.fr/~tiger/assignments.html).
      2. Appel's books.
      3. Tiger Compiler Reference Manual (http://www.lrde.epita.fr/~tiger/tiger.html).
      4. epita.cours.compile.
    2. Goals (C++, OO, DP, Management, Several Iterations, Testing, Documenting, Maintaining, Fixing, Understanding Computers, English).
    3. Non goals (Compiler Construction).
    4. Rules of the Game.
      1. No copy between groups.
      2. Tests are part of the project (test cases and frameworks should not be exchanged).
      3. Fixing mistakes earlier is better.
      4. Work between groups is encouraged as long as they don't cheat.
    5. Tests.
      1. Tests matter.
      2. Rules.
        1. A bug => a test.
        2. A suspicious behavior => one or several tests to isolate it.
        3. Don't throw away tests!
        4. Don't exchange tests! (bis repetita).
    6. C Compilation model (cpp, cc1, as, ld).
    7. Width of a compiler (granularity of compiled entities).
    8. Tiger Compiler pipeline (front end only)
    9. Compilers handling multiple input (sources languages) and multiple outputs (target assembly languages/processors).
      1. The case of GCC.
      2. Factoring the compiler components: intermediate representation(s).
      3. Front-end and back-ends.
    10. Other compilation strategies.
    11. The Tiger Compiler pipe (annotated with tools and steps).
      1. Front-end: TC-0 - TC-3 (mandatory part), TC-4 - TC-5 (optional part).
      2. Back-end: TC-6 - TC-9 (optional part).
    12. Misc: students should overcome Make, Makefiles and seperate compilation, etc.

Lecture 2: 2012-12-10 (Grp. B & A), 2 hours: Scanner and Parser Hints

  1. Additional details and hints about the scanner and the parser: The Scanner and the Parser. See the lecture notes: scanner.pdf, scanner-handout.pdf and scanner-handout-4.pdf.
    1. Symbols (light-weight, shared and non-mutable strings used to represent identifiers).
    2. Extra information (in addition to tokens/terminals) passed between the scanner and the parser.
      1. Semantic values.
      2. Locations.
    3. Various improvements on the scanner and the parser.
      1. Error recovery by deletion (using the error symbol).
      2. Pure (reentrant) parser and scanner.

Lectures 3 and 4: 2013-02-04 (Grp. A) & 2013-02-08 (Grp. B), 4 hours: Architecture of tc (tasks), Autotools, Development Tools, Abstract Syntax

  1. Architecture of the Tiger Compiler (tc).
    1. Modules: parse, ast, bind, etc.
      1. Pure libraries providing actual services.
      2. Tasks (non-pure services) using a declarative system: Development Tools, section 1 (tc Tasks). See the lecture notes: dev-tools.pdf, dev-tools-handout.pdf and dev-tools-handout-4.pdf.
        1. Command-line options.
        2. Declaration of dependencies.
        3. Actual computations delegated to pure libraries.
    2. Driver (tc.cc).
      1. Instantiates a tasks manager, used to record all existing tasks at start-up and later compute the steps to performe according to the dependencies of the invoked tasks.
      2. Workflow computed by the task manager from the options passed to the driver, triggering corresponding tasks and their dependencies ( la Make).
      3. Error management: catches exceptions (including misc::error) and displays error messages.
  2. Autoconf and Automake
    1. History: Unix, Unices, configuration systems (imake, configure), portability issues (broken tools, broken/missing functions, libraries, etc.).
    2. Generating configure with Autoconf
      1. The choice of (a subset of) the Bourne Shell for portability reasons.
      2. Generating to encapsulate tests, simplify, shorten and reuse shell script bits.
      3. Using the M4 macro language.
      4. Autotools Diagram: Autoconf.
    3. Generating Makefile (s) with Automake and configure.
      1. Generating to simplify and shorten portable Makefile bits.
      2. Substituting variables (@VAR@) in Makefile.in using configure (BTW: variables listed in configure --help).
      3. Completing the Autotools diagram: Automake.
      4. Developer side vs User side.
    4. A word on aclocal.
    5. Hands-on example.
      1. A simple program.
        1. Writing hello-world.cc.
        2. Adding Makefile.am.
        3. Running autoscan.
        4. Adjusting config.scan to create config.ac (initializing Automake, avoiding autoheader).
        5. Running alocal, automake -a -c (and installing helpers) and autoconf.
        6. Running ./configure.
        7. Running make.
        8. Running ./hello-world.
      2. Adding a (static) library.
        1. Writing the client (hello.cc) and the library (greet.hh and greet.cc).
        2. Adjusting Makefile.am (lib_LIBRARIES vs noinst_LIBRARIES), and configure.ac (AC_PROG_RANLIB).
        3. Updating by running make (and not the Autotools).
        4. Compiling the client (hello) by adjusting Makefile.am (in particular, link to libgreet.a using hello_LDADD).
        5. Running make again.
        6. Running ./hello.
      3. Adding tests.
        1. TESTS in Makefile.am and make check.
        2. Compiling test-only (not installed) programs: check_PROGRAMS.
      4. Distributing.
        1. make dist.
        2. make distcheck.
        3. Don't forget to adjust the arguments of AC_INIT in configure.ac.
      5. Installing.
        1. make install.
        2. configure --prefix, $prefix, $bindir, $libdir, etc. and bin_, lib_ prefixes of primaries (PROGRAMS, LIBRARIES, etc.).
        3. make uninstall (careful, very limited).
    6. Misc.
      1. Generating tests with configure (e.g. so that they can find $srcdir).
      2. Changing variables (e.g. CXXFLAGS) at the configuration step (=./configure CXXFLAGS...=; global) or at the build step (=make CXXFLAGS...=; local).
      3. autoheader and config.h: getting rid of limitations of using -D options to pass options to the compiler.
      4. Pros and cons of using multiple Makefile s in a multi-directory project.
      5. srcdir vs builddir, running configure from a directory other than the source dir.
  3. Development Tools. See the lecture notes: dev-tools.pdf, dev-tools-handout.pdf and dev-tools-handout-4.pdf.
  4. Abstract Syntax, up to basic Visitors (sec. 2.3, p. 51) and except AST Generators (p. 613), Tagging the Abstract Syntax Tree (p. 22), Processing and Dispatching (p. 3638), Multimethods (p. 4042). See the lecture notes, ast.pdf, ast-handout.pdf and ast-handout-4.pdf.

Lecture 5: 2013-02-20 (Grp. A & B), 2 hours: Abstract Syntax

Lecture 6: 2013-02-27 (Grp. A & B), 2 hours: Names, Identifiers and Bindings


CMP2

Lecture 1: 2013-03-11 (Grp. A & B), 2 hours: Type-checking

  1. Types. See the lecture notes (sections 1 and 2): type-checking.pdf, type-checking-handout.pdf and type-checking-handout-4.pdf.
  2. Some details on the implementation of types and type-checking within the Tiger Compiler.
    1. Hierarchy of types (src/type/)
      1. src/type/README.
      2. Implementing atomic types: singletons.
      3. Resolving aliased types: Named and actual().

Lecture 2: 2013-04-25 (Grp. A & B), 2 hours: Intermediate languages

  1. Intermediate languages. See the lecture notes (up to section 4.1 (included), except dynamic allocation, non-local variables & static link, calling conventions, Ix, translation of complex expressions, proper explanation of frame::{Access,Frame} vs translate::{Access,Level}): intermediate.pdf, intermediate-handout.pdf and intermediate-handout-4.pdf.

Lecture 3: 2013-05-02 (Grp. A & B), 2 hours: Intermediate languages, Canonization (Linearization)

Lecture 4: 2013-05-06 (Grp. A & B), 2 hours: Canonization (Basic Blocks, Traces), Microprocessors, Instruction Selection

Lecture 5: 2013-05-30 (Grp. A & B), 2 hours: Liveness Analysis, Register Allocation

Lecture 6: 2013-06-13 (Grp. A & B), 2 hours: Selected Topics About the Future of Languages and Compilation


TYLA

Lecture 1: 2013-02-27 (Grp. B & A), 2 hours: History of Computing and Programming Languages

  1. History of Computing. See the lecture notes, history.pdf, history-handout.pdf and history-handout-4.pdf.
  2. History of Programming Languages: FOTRAN, Algol (section 1.1 and 1.2). See the lecture notes, early-languages.pdf, early-languages-handout.pdf and early-languages-handout-4.pdf.

Lecture 2: 2013-03-06 (Grp. B & A), 2 hours: History of Programming Languages, Object-Oriented History

Lecture 3: 2013-03-13 (Grp. B & A), 2 hours: Object-Oriented History, Subprograms

Lecture 4: 2013-03-20 (Grp. B & A), 2 hours: Subprograms, Some Traits of Functional Programming Languages

  • Subprograms. See the lecture notes, subprograms.pdf, subprograms-handout.pdf and subprograms-handout-4.pdf.
    • In-depth explanation of the example of the numerical differentiation in Haskell.
  • Some Traits of Functional Programming Languages.
    • Currying, partially applied functions, closures.
    • Pure vs impure languages.
    • Lazy vs strict evaluation, equational reasoning, infinite lists.
      • loop.hs (lazy evaluation, terminates)
      • loop.ml (strict evaluation, does not terminate)
      • loop-lazy.ml (local/partial lazy evaluation, terminates)

loop.hs:

main =
  let y = 0
		loop z = if z > 0 then z else loop z
		f x	 = if y > 8 then x else -y
  in
	 f (loop y)

loop.ml:

let y = 0 in
let rec loop z = if z > 0 then z else loop z in
let	  f x	 = if y > 8 then x else -y in
f (loop y)
;;

loop-lazy.ml:

let y = 0 in
let rec loop z = if z > 0 then z else loop z in
let	  f x	 = if y > 8 then (Lazy.force x) else -y in
f (lazy (loop y))
;;

Lecture 5: 2013-03-25 (Grp. B & A), 2 hours: Type-checking, Generic Programming

  1. Sequent Calculus
    1. In English: "If alpha is of type Int in the context Gamma and beta is of type Int in the context Gamma, then alpha + beta is of type Int in the context Gamma."
    2. Using symbols (where ⊢ ("tee" or "turnstile") is the symbol meaning "yields" or "proves"):
    3. Examples of type rules: addition of 2 integers, if-then-else, if-then, addition of 3 integers, comparison of two variables, etc.
    4. Type inference
      1. (a ? b : c) > 0
      2. (a ? b : f(b)) > 0
      3. (a ? b : f(c)) > 0
  2. Generic Programming (sections 1, 2 and 3). See the lecture notes, generic.pdf, generic-handout.pdf and generic-handout-4.pdf.
  3. Genericity in Haskell. See the lecture notes (in section 2.3): intermediate.pdf, intermediate-handout.pdf and intermediate-handout-4.pdf.

Lecture 6: 2013-03-26 (Grp. A & B), 2 hours: Genericity in C++, the Standard Template Library (STL) and Template Metaprogramming, OOP vs GP

  1. Generic Programming (sections 4). See the lecture notes, generic.pdf, generic-handout.pdf and generic-handout-4.pdf.
  2. More on GP, concepts and links between GP and OOP.
    1. OOP vs OOP
      1. OOP: two levels: Interfaces and classes (compile time), instances (run time).
      2. GP: three levels: Concepts (documentation/design time), models/types (compile time) and instances (run time).
      3. Single algorithm "instantiation"/compilation (OOP) vs several (GP).
        1. 1-time compiling/loose coupling between compiled algorithms and data structures (OOP) vs many-time compiling/strong coupling between compiled algorithms and data structures (GP).
        2. No or little compile-time optimization (OOP, cost of virtual) vs opportunities for compile-time optimizations (GP).
      4. Constraint through interface inheritance (OOP) vs lack of explicit constraint (classic GP) or implicit/explicit concept checking (C++ concept proposal)
    2. Solutions/proposal to add/express GP constraints in C++:
      1. Boost Concept Checking Library (BCCL)
      2. "Concepts" proposals
      3. "Concepts light" proposal
      4. By Mixing OOP and GP
        1. The Curiously Recurring Template Pattern (CRTP). Mixing two kinds of relations between a base class (top) and a derived class (bottom), in opposite ways:
          1. Inheritance (top-down).
          2. Parameter passing (bottom-up).
        2. Using abstractions (Abstraction<T>) to constrain algorithms.
          1. Static knowledge of the exact type of the argument
          2. Static conversion to exact type (instead of dynamic_cast in traditional OOP)
          3. Implementing static dispatch based on abstractions.