Thanks

· sons of the silent age

Heroes draws on ideas from other languages and research. This page names the authors and each contribution.

These credits name the people and teams who designed the languages. They were not consulted about Heroes and are not responsible for how it uses their ideas.

The foundations and tools

The compiler translates Heroes into C11 and uses clang to produce executables and check C library declarations against their headers, the files that describe functions and types. The first compiler, used to reach the one written in Heroes, was written in Rust.

The value model

In Heroes, changing a copy does not change the original. Values cannot form reference cycles, so memory can be freed by counting the references still in use. No garbage collector is needed to find cycles. This model draws on the work cited below.

Safety without a garbage collector

Heroes aims to prevent invalid memory access and data corruption. The projects below explored safety without a garbage collector, the system that finds and frees unused data.

Keeping the language small

Wirth’s languages provided a reference for keeping the specification short. For the Heroes compiler, the limit instead applies to individual files: they should remain understandable to a reader.

Types and alternatives considered

What the language feels like to use

These languages influenced Heroes’ syntax, checks and commands. Readers who know them will find many familiar choices.

Error messages and unfinished code

Immutability at scale

Generating C code

Heroes generates C and lets a C compiler handle the work needed for each machine. The languages below followed this approach before Heroes.

Where Heroes meets C

A Heroes program calls C libraries directly, and it runs on a runtime written in C, the piece of program that sits underneath and keeps things working while it runs. The rules below, for what crosses between Heroes and C, were taken from projects that had worked at that border first.

Somebody got there first

Heroes reached each rule below on its own, and found out only afterwards that somebody had got there first. The credit is theirs.

Choices to consider carefully

The project also studied the limits and costs of other languages’ choices. These precedents help determine which approaches to adopt and which to avoid. What was refused here, and who refused it, has a page of its own: the refusals →

And the name

David Bowie, for “Heroes” (1977), the song and the album. The name keeps the album’s quotation marks. Bowie is also behind the book the language grew out of. Musical references stay in the project’s prose and do not appear in error messages or library names.

  1. hunky dory the album itself, 1971
  2. changes Hunky Dory, 1971
  3. quicksand, avoided Quicksand, on Hunky Dory, 1971
  4. five years Ziggy Stardust, 1972
  5. moonage daydream Ziggy Stardust, 1972
  6. lady stardust Ziggy Stardust, 1972
  7. rebel rebel Diamond Dogs, 1974
  8. speed of life Low, 1977
  9. sound and vision Low, 1977
  10. a new career in a new town Low, 1977
  11. heroes “Heroes”, 1977
  12. sons of the silent age “Heroes”, 1977
  13. fashion Scary Monsters, 1980

The gold lines beside some section headings are Bowie songs. All twelve are above, oldest record first, along with the one this language is named after. Every title opens the recording on YouTube; where it names an album, the link opens the album’s entry on Wikipedia.

Next: the panel, where five judges review proposals and discuss how to adapt these ideas to Heroes.