{
  "id": 17990981,
  "title": "A Second Futamura Projection",
  "url": "https://urgent.news/2026/11/03/a-second-futamura-projection",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-11-03T16:14:27.000Z",
  "source": {
    "name": "Lobsters",
    "slug": "lobsters",
    "url": "https://blog.veitheller.de/A_Second_Futamura_Projection.html"
  },
  "original_language": "en",
  "account": "In this story, a reporter explains the concept of the second Futamura projection, a technique that allows for compiling programs without the need for executing an interpreter. The report begins by discussing the initial Futamura projection, which transformed a compfuck interpreter into a specialized program that removed the interpreter and left behind the essential operations. The reporter then goes on to explain the second projection, which applies to the specializer itself, allowing it to take a Brainfuck program and produce residual code directly.\n\nThe reporter highlights the challenges in creating a general specializer that can specialize itself, as the old specializer evaluated static expressions by passing them to Carp's eval function. To overcome this, the new specializer must evaluate static code itself, enabling further specialization. The reporter also mentions that for the tutorial, certain shortcuts were taken to maintain conceptual purity, though they are acknowledged.\n\nThe process of specializing a program involves understanding its structure and rewriting it in a smaller Lisp-like language that the specializer can handle. The specializer is tasked with identifying expressions that can be evaluated during specialization and those that cannot. If an expression does not mention any dynamic variables, it can be evaluated during the specialization process. On the other hand, expressions that do not involve static variables are left unchanged.\n\nLastly, the reporter demonstrates the evaluation process using a simplified evaluator written for the small Lisp. The report concludes that the specializer simplifies the evaluation process by leaving behind only the expression itself, which reads variables from specific slots within the compiler's memory.",
  "summary": null,
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}