Skip to content
Merged
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ Pinned to `v3.15.0rc1` today and moving to `v3.15.0` when it ships on 1 October

Every lesson is a notebook with a Colab badge on it, so there is nothing to install and nothing to build. Each one is executed end to end in CI on 3.15.0rc1 and on 3.14 before it merges, and every claim it makes about CPython carries a file, a line range and a symbol that `refcheck` resolves against the pinned tree.

Where a cell prints something different on the two versions, the notebook says so, in a note under the cell or in a paragraph near the top. Those notes are checked rather than trusted: CI runs every lesson on both interpreters, compares the output cell by cell, and fails both when a cell that differs has no note and when a note is left on a cell that has stopped differing. Sixty four cells across the twelve lessons carry one today. A note about the reader's own machine rather than the version, like how many files are in their standard library, is marked as such, because two recordings cannot decide that one.

Vocabulary works the same way. There is one definition per term in [GLOSSARY.md](GLOSSARY.md), and a lesson links into it rather than explaining a word it explained forty lessons ago or assuming you remember one. Each entry says what the word means and then says the thing people reliably get wrong about it, and where a definition rests on something in CPython rather than on the language reference it carries a citation like everything else here.

Lessons do not invent a fresh example each time either. There are three programs, they are fixed, and they live in `pyxray.programs`. `L0` is `answer = 6 * 7`, one line, small enough that its bytecode and its tree and its symbol table fit on the screen together. `L1` is an iterative Fibonacci, and one call to it is enough for the interpreter to specialize the two instructions in its loop. `L2` is a small linked structure carrying a class, a generator, a closure, a dict, a `try`/`except`/`finally` and, on request, a reference cycle. Meeting a new program and a new subsystem in the same lesson is two jobs, and the one most readers drop is the subsystem.
Expand Down
Loading