1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
# Compiling Swift Generics
This is a book about the *implementation* of generic programming--also known as parametric polymorphism--in the Swift compiler. The first four chapters also give an overview of the Swift compiler architecture in general.
## Downloading the PDF
A periodically-updated PDF is available here:
> https://download.swift.org/docs/assets/generics.pdf
## Typesetting the PDF
It's written in TeX, so to typeset the PDF yourself, you need a TeX distribution:
- [MacTeX](https://www.tug.org/mactex/mactex-download.html): macOS
- [TeX Live](https://www.tug.org/texlive/): Linux, Windows
- [MikTeX](https://miktex.org): another alternative for macOS, Linux, Windows
### Using `make`
Running `make` in `docs/Generics/` will run `pdflatex` and `bibtex` in the right order to generate the final document with bibliography, index and cross-references:
```
cd docs/Generics/
make
```
### Using `latexmk`
A more modern alternative is to use `latexmk`, which runs `pdflatex` and `bibtex` until fixed point:
```
cd docs/Generics/
latexmk -pdf generics.tex
```
### Manually
You can also just do this:
```
cd docs/Generics/
pdflatex generics
bibtex generics
pdflatex generics
pdflatex generics
```
## Reading the PDF
The book makes use of internal hyperlinks so it is is best to use PDF reader with support for PDF bookmarks and back/forward history:
- Preview.app on macOS fits the bill; you can add Back/Forward buttons to the toolbar with **View** > **Customize Toolbar**.
- [Skim.app](https://skim-app.sourceforge.io) is a BSD-licensed open source PDF reader for macOS.
The font size and link targets are probably too small for a smartphone display, so I recommend using something bigger.
## Current Status
This is a work in progress.
The following chapters need some editing:
- Part II:
- Substitution Maps
- Part IV:
- Completion
The following chapters are not yet written:
- Part III:
- Opaque Return Types
- Existential Types
- Part IV:
- The Property Map
- Rule Minimization
|