Files
swift-mirror/docs/Generics/README.md
Slava Pestov 2349b5f6cf docs: Update generics book for 2025
- Revised "Substitution Maps" chapter:
  - New "Subclassing" section
  - New "SIL Type Lowering" section
- New "Opaque Result Types" chapter
- Various smaller edits

New PDF will be available shortly at https://download.swift.org/docs/assets/generics.pdf.
2025-11-11 08:34:36 -05:00

74 lines
1.9 KiB
Markdown

# 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 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 IV:
- Completion
The following chapters are not yet written:
- Part III:
- Existential Types
- Part IV:
- The Property Map
- Minimization