Skip to content
Open
Changes from 4 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
92a9a34
Create separate-compilation.md
VictorEijkhout Jul 26, 2024
c42254b
victor first stab at separate compilation
VictorEijkhout Aug 29, 2024
ba6de1b
shuffling stuff around
VictorEijkhout Aug 30, 2024
d84acea
Update separate-compilation.md
VictorEijkhout Sep 26, 2024
45635e0
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
1022ea2
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
96bb445
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
bf8faef
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
0b0d33a
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
25620d9
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
49f1a56
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
55ec0c2
Update sources/modules/compilation-model/separate-compilation.md
VictorEijkhout Oct 4, 2024
b698abe
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
2e82bd9
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
4f6a10a
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
5125283
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
cea2214
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
a303097
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
f5f70a4
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
61c29b7
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
3a05bb1
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
996a433
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
0635d33
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
71a6612
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
7313ec4
Update separate-compilation.md
VictorEijkhout Oct 31, 2024
03e04d5
Merge branch 'master' into master
vulder Nov 4, 2024
b51b857
Update sources/modules/compilation-model/separate-compilation.md
vulder Apr 4, 2025
9cf7ca0
points to cover expanded
VictorEijkhout Apr 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions sources/modules/compilation-model/separate-compilation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
## Module name: Separate Compilation
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

_Skeleton descriptions are typeset in italic text,_
_so please don't remove these descriptions when editing the topic._

### Overview

_Provides a short natural language abstract of the module’s contents._
_Specifies the different levels of teaching._

This module outlines the issues involved in using separate compilation on multiple program files.

Comment thread
vulder marked this conversation as resolved.
Outdated
------------------------------------------------------------------------
Level Objective
----------------- ------------------------------------------------------
Foundational: Awareness of the existence of separate compilation
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

Main: Awareness of supporting mechanisms and tools

Advanced: Awareness of technicalities and tools

------------------------------------------------------------------------

### Motivation

_Why is this important?_
_Why do we want to learn/teach this topic?_

Any non-trivial program will span more than one source file. This makes separate compilation necessary. Separate compilation also leads to quick build times in projects under development.

### Topic introduction

_Very brief introduction to the topic._

### Foundational: Using
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

#### Background/Required Knowledge

A student:

1. needs to have the text editor skills to split a single-file program into multiple files.
Comment thread
vulder marked this conversation as resolved.
Outdated
2. needs to be able to split function and classes into their declaration and definition.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated


#### Student outcomes

_A list of things "a student should be able to" after the curriculum._
_The next word should be an action word and testable in an exam._
_Max 5 items._

A student should be able to:

1. Split a single file program into main, one or more auxiliaries, and header files (or modules), all in one directory
2. Compile and link a program that is spread over multiple files (again, all in one directory), either on the commandline or with a build system.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated
3. Describe the functions of the various files involved: source, object, executable.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated


#### Points to cover
Comment thread
VictorEijkhout marked this conversation as resolved.

1. Necessity of having function be declared at the locus of use
2. Solving this by explicit declaration or by using header files.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

#### Caveats

_This section mentions subtle points to understand, like anything resulting in
implementation-defined, unspecified, or undefined behavior._

1. Explain differences (including in desirability) between having explicit declarations of functions in the main program versus using header files or modules.
2. Compilation on a single commandline versus multiple. Resolution order when linking.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated
3. What needs to be recompiled if only a function is altered? Altered in use syntax versus altered only in semantics.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

### Main: implementing
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

#### Background/Required Knowledge

* All of the above.

#### Student outcomes

A student should be able to:

1. Use compile flags, including `-I` and `-L` search path flags.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated
2. Make header files for their own code, including using header guards.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated
3. Use include directives for the headers of external libraries.
5. Be able to declare `extern` variables.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

#### Caveats

1. Build systems make things both easier and harder.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

#### Points to cover

1. Cover the mechanisms for include and library paths to your own code, as well as discovery mechanisms for external libraries.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From reading the ASBATs, we probably need more points to cover that contain the skills necessary to reach the ASBAT level.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed with the latest commit.

### Advanced
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated

_These are important topics that are not expected to be covered but provide
guidance where one can continue to investigate this topic in more depth._

1. Language inter-operability: the `extern "C"` mechanism.
2. Linker conventions including name mangling.
3. The `nm` tool for inspection object files and libraries, including de-mangling.
4. Understand the issues involved in deciding between include guards and `#pragma once`.
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated
Comment thread
VictorEijkhout marked this conversation as resolved.
Outdated