<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: donald-knuth</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/donald-knuth.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-03-03T23:59:04+00:00</updated><author><name>Simon Willison</name></author><entry><title>Quoting Donald Knuth</title><link href="https://simonwillison.net/2026/Mar/3/donald-knuth/#atom-tag" rel="alternate"/><published>2026-03-03T23:59:04+00:00</published><updated>2026-03-03T23:59:04+00:00</updated><id>https://simonwillison.net/2026/Mar/3/donald-knuth/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://www-cs-faculty.stanford.edu/~knuth/papers/claude-cycles.pdf"&gt;&lt;p&gt;Shock! Shock! I learned yesterday that an open problem I'd been working on for several weeks had just been solved by Claude Opus 4.6 - Anthropic's hybrid reasoning model that had been released three weeks earlier! It seems that I'll have to revise my opinions about "generative AI" one of these days. What a joy it is to learn not only that my conjecture has a nice solution but also to celebrate this dramatic advance in automatic deduction and creative problem solving.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://www-cs-faculty.stanford.edu/~knuth/papers/claude-cycles.pdf"&gt;Donald Knuth&lt;/a&gt;, Claude's Cycles&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-reasoning"&gt;llm-reasoning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/november-2025-inflection"&gt;november-2025-inflection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/donald-knuth"&gt;donald-knuth&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="anthropic"/><category term="claude"/><category term="llm-reasoning"/><category term="november-2025-inflection"/><category term="donald-knuth"/></entry><entry><title>[red-knot] type inference/checking test framework</title><link href="https://simonwillison.net/2024/Oct/16/markdown-test-framework/#atom-tag" rel="alternate"/><published>2024-10-16T20:43:55+00:00</published><updated>2024-10-16T20:43:55+00:00</updated><id>https://simonwillison.net/2024/Oct/16/markdown-test-framework/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/astral-sh/ruff/pull/13636"&gt;[red-knot] type inference/checking test framework&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ruff maintainer Carl Meyer recently landed an interesting new design for a testing framework. It's based on Markdown, and could be described as a form of "literate testing" - the testing equivalent of Donald Knuth's &lt;a href="https://en.wikipedia.org/wiki/Literate_programming"&gt;literate programming&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A markdown test file is a suite of tests, each test can contain one or more Python files, with optionally specified path/name. The test writes all files to an in-memory file system, runs red-knot, and matches the resulting diagnostics against &lt;code&gt;Type:&lt;/code&gt; and &lt;code&gt;Error:&lt;/code&gt; assertions embedded in the Python source as comments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Test suites are Markdown documents with embedded fenced blocks that look &lt;a href="https://github.com/astral-sh/ruff/blob/2095ea83728d32959a435ab749acce48dfb76256/crates/red_knot_python_semantic/resources/mdtest/literal/float.md?plain=1#L5-L7"&gt;like this&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```py
reveal_type(1.0) # revealed: float
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tests can optionally include a &lt;code&gt;path=&lt;/code&gt; specifier, which can provide neater messages when reporting test failures:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```py path=branches_unify_to_non_union_type.py
def could_raise_returns_str() -&amp;gt; str:
    return 'foo'
...
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A larger example test suite can be browsed in the &lt;a href="https://github.com/astral-sh/ruff/tree/6282402a8cb44ac6362c6007fc911c3d75729648/crates/red_knot_python_semantic/resources/mdtest"&gt;red_knot_python_semantic/resources/mdtest&lt;/a&gt; directory.&lt;/p&gt;
&lt;p&gt;This document &lt;a href="https://github.com/astral-sh/ruff/blob/main/crates/red_knot_python_semantic/resources/mdtest/exception/control_flow.md"&gt;on control flow for exception handlers&lt;/a&gt; (from &lt;a href="https://github.com/astral-sh/ruff/pull/13729"&gt;this PR&lt;/a&gt;) is the best example I've found of detailed prose documentation to accompany the tests.&lt;/p&gt;
&lt;p&gt;The system is implemented in Rust, but it's easy to imagine an alternative version of this idea written in Python as a &lt;code&gt;pytest&lt;/code&gt; plugin. This feels like an evolution of the old Python &lt;a href="https://docs.python.org/3/library/doctest.html"&gt;doctest&lt;/a&gt; idea, except that tests are embedded directly in Markdown rather than being embedded in Python code docstrings.&lt;/p&gt;
&lt;p&gt;... and it looks like such plugins exist already. Here are two that I've found so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/modal-labs/pytest-markdown-docs"&gt;pytest-markdown-docs&lt;/a&gt; by Elias Freider and Modal Labs.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sphinx-doc.org/en/master/usage/extensions/doctest.html"&gt;sphinx.ext.doctest&lt;/a&gt; is a core Sphinx extension for running test snippets in documentation.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/scientific-python/pytest-doctestplus"&gt;pytest-doctestplus&lt;/a&gt; from the Scientific Python community, first released in 2011.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I tried &lt;code&gt;pytest-markdown-docs&lt;/code&gt; by creating a &lt;code&gt;doc.md&lt;/code&gt; file like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Hello test doc

```py
assert 1 + 2 == 3
```

But this fails:

```py
assert 1 + 2 == 4
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then running it with &lt;a href="https://docs.astral.sh/uv/guides/tools/"&gt;uvx&lt;/a&gt; like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uvx --with pytest-markdown-docs pytest --markdown-docs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I got one pass and one fail:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;_______ docstring for /private/tmp/doc.md __________
Error in code block:
```
10   assert 1 + 2 == 4
11   
```
Traceback (most recent call last):
  File "/private/tmp/tt/doc.md", line 10, in &amp;lt;module&amp;gt;
    assert 1 + 2 == 4
AssertionError

============= short test summary info ==============
FAILED doc.md::/private/tmp/doc.md
=========== 1 failed, 1 passed in 0.02s ============
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I also &lt;a href="https://twitter.com/exhaze/status/1846675911225364742"&gt;just learned&lt;/a&gt; that the venerable Python &lt;code&gt;doctest&lt;/code&gt; standard library module has the ability to &lt;a href="https://docs.python.org/3/library/doctest.html#simple-usage-checking-examples-in-a-text-file"&gt;run tests in documentation files&lt;/a&gt; too, with &lt;code&gt;doctest.testfile("example.txt")&lt;/code&gt;: "The file content is treated as if it were a single giant docstring; the file doesn’t need to contain a Python program!"

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/charliermarsh/status/1846544708480168229"&gt;Charlie Marsh&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/markdown"&gt;markdown&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pytest"&gt;pytest&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruff"&gt;ruff&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/donald-knuth"&gt;donald-knuth&lt;/a&gt;&lt;/p&gt;



</summary><category term="python"/><category term="testing"/><category term="markdown"/><category term="rust"/><category term="pytest"/><category term="ruff"/><category term="uv"/><category term="astral"/><category term="donald-knuth"/></entry><entry><title>Quoting Donald Knuth</title><link href="https://simonwillison.net/2023/May/20/donald-knuth/#atom-tag" rel="alternate"/><published>2023-05-20T16:51:39+00:00</published><updated>2023-05-20T16:51:39+00:00</updated><id>https://simonwillison.net/2023/May/20/donald-knuth/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://cs.stanford.edu/~knuth/chatGPT20.txt"&gt;&lt;p&gt;I find it fascinating that novelists galore have written for decades about scenarios that might occur after a "singularity" in which superintelligent machines exist. But as far as I know, not a single novelist has realized that such a singularity would almost surely be preceded by a world in which machines are 0.01% intelligent (say), and in which millions of real people would be able to interact with them freely at essentially no cost.&lt;/p&gt;
&lt;p&gt;I myself shall certainly continue to leave such research to others, and to devote my time to developing concepts that are authentic and trustworthy. And I hope you do the same.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://cs.stanford.edu/~knuth/chatGPT20.txt"&gt;Donald Knuth&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/donald-knuth"&gt;donald-knuth&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="donald-knuth"/></entry><entry><title>Donald E. Knuth: Musings and more</title><link href="https://simonwillison.net/2004/Nov/11/donald/#atom-tag" rel="alternate"/><published>2004-11-11T17:55:25+00:00</published><updated>2004-11-11T17:55:25+00:00</updated><id>https://simonwillison.net/2004/Nov/11/donald/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://scpd.stanford.edu/knuth/"&gt;Donald E. Knuth: Musings and more&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Downloadable videos of Knuth lectures.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www-cs-faculty.stanford.edu/~knuth/news.html"&gt;Knuth: Recent News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/donald-knuth"&gt;donald-knuth&lt;/a&gt;&lt;/p&gt;



</summary><category term="donald-knuth"/></entry></feed>