<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Heroes: the build log</title>
  <subtitle>One entry per milestone up to the site&apos;s last refresh, newest first.</subtitle>
  <link href="https://heroes-lang.org/log/"/>
  <link rel="self" href="https://heroes-lang.org/log.xml"/>
  <id>https://heroes-lang.org/log/</id>
  <updated>2026-10-26T21:12:42Z</updated>
  <author><name>Giuseppe Arici</name></author>
  <entry>
    <title>The check that could not end</title>
    <link href="https://heroes-lang.org/log/#73"/>
    <id>https://heroes-lang.org/log/#73</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Every issue still open, defects, tasks and features alike, was run again against the compiler as it stands and given a written answer: some had been settled along the way, some no longer applied, a few were fixed on the spot.</summary>
  </entry>
  <entry>
    <title>The claim, put to the test</title>
    <link href="https://heroes-lang.org/log/#72"/>
    <id>https://heroes-lang.org/log/#72</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>For the first time the claim Heroes is built on was tested with models in the loop, the AI programs that write code: forty tasks the author wrote and sealed, every one a trap, judged with Heroes’ own rules on and off, under a prediction made public before the first answer.</summary>
  </entry>
  <entry>
    <title>The seed gets a witness</title>
    <link href="https://heroes-lang.org/log/#71"/>
    <id>https://heroes-lang.org/log/#71</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The seed, the one C file a machine without Heroes builds the compiler from, had only ever shown that it reproduces itself, as a lying seed could too. Now a second, independent compiler vouches for it.</summary>
  </entry>
  <entry>
    <title>Read, and never written</title>
    <link href="https://heroes-lang.org/log/#70"/>
    <id>https://heroes-lang.org/log/#70</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A function that only reads what its caller holds can now say so: function peek(l: Lex lent) reads the caller’s value where it stands, never writes it, and is called as plain peek(l).</summary>
  </entry>
  <entry>
    <title>What it was built from</title>
    <link href="https://heroes-lang.org/log/#69"/>
    <id>https://heroes-lang.org/log/#69</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Every program Heroes builds now carries a fingerprint of what it was made from: its sources, its library and its runtime, the support code that goes into every program. heroes --version prints the compiler’s own on its second line.</summary>
  </entry>
  <entry>
    <title>The value C computes</title>
    <link href="https://heroes-lang.org/log/#68"/>
    <id>https://heroes-lang.org/log/#68</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>When a C library’s header, the file where it describes what it offers, defines a constant, the compiler now takes the value C itself computes, by running a small piece of the program under clang’s checks.</summary>
  </entry>
  <entry>
    <title>A stopped program shows what you wrote</title>
    <link href="https://heroes-lang.org/log/#67"/>
    <id>https://heroes-lang.org/log/#67</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Stop a Heroes program in a debugger, the tool that pauses a running program so you can look inside, and it now shows what you wrote: your own variables, and their values in Heroes, a list as a list and a failure as a failure.</summary>
  </entry>
  <entry>
    <title>Every item becomes a public issue</title>
    <link href="https://heroes-lang.org/log/#66"/>
    <id>https://heroes-lang.org/log/#66</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Every defect, decision and task the project has tracked is now an issue on GitHub, the public site where its code lives: more than two thousand, imported in the order they were born, each keeping its own dates. Then the folder they came from left the repository.</summary>
  </entry>
  <entry>
    <title>A variable that changes gets a symbol of its own</title>
    <link href="https://heroes-lang.org/log/#59"/>
    <id>https://heroes-lang.org/log/#59</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A variable whose value can change, a cell, is now declared v @= 0 and takes its type from its value; v @ v + 1 changes it, and a cell that nothing ever changes is refused, with a fix that writes =.</summary>
  </entry>
  <entry>
    <title>The list that would not run dry</title>
    <link href="https://heroes-lang.org/log/#65"/>
    <id>https://heroes-lang.org/log/#65</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The three words written on a C library’s handles, the addresses it hands a program for things it owns, became five, and the runtime now numbers every life C hands out. An address is not an identity: C can free one and hand it out again.</summary>
  </entry>
  <entry>
    <title>The word that could not reach the call</title>
    <link href="https://heroes-lang.org/log/#64"/>
    <id>https://heroes-lang.org/log/#64</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A C function handed an address into a program’s memory is now taken to keep it, unless its declaration says lent: the panel had declined that default, and the author chose it on principle, provided the cost was measured, under forty billionths of a second a call.</summary>
  </entry>
  <entry>
    <title>The wall was half a mirage</title>
    <link href="https://heroes-lang.org/log/#63"/>
    <id>https://heroes-lang.org/log/#63</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Text C writes into a fixed field of bytes, like the machine’s name the system fills in, can now be printed: f.validated_bytes() reads it, or says it is not text.</summary>
  </entry>
  <entry>
    <title>The fourth machine scored its own prediction false</title>
    <link href="https://heroes-lang.org/log/#62"/>
    <id>https://heroes-lang.org/log/#62</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Heroes now builds and runs on a fourth kind of machine, Linux on ARM processors, and the first thing it did was prove its own prediction false.</summary>
  </entry>
  <entry>
    <title>A hole that was not where the name said</title>
    <link href="https://heroes-lang.org/log/#58"/>
    <id>https://heroes-lang.org/log/#58</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The milestone went hunting for programs heroes check accepts and heroes build refuses, and found that only one of its four faces was that gap, and it was already closed, by a sitting held the same day as the one that named it.</summary>
  </entry>
  <entry>
    <title>Three words for what is borrowed from C</title>
    <link href="https://heroes-lang.org/log/#57"/>
    <id>https://heroes-lang.org/log/#57</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A binding now says, on every function that touches a handle, one of three things: acquires and who takes it back, consumes, borrows. None of the three is inferred by the compiler.</summary>
  </entry>
  <entry>
    <title>The label goes on the handing over, not on the thing</title>
    <link href="https://heroes-lang.org/log/#56"/>
    <id>https://heroes-lang.org/log/#56</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Writing on a handle’s type who closes it, so the compiler closes it by itself: refused, because one function hands the same connection over and another only shows it, and a label on the type cannot know which of the two gave it.</summary>
  </entry>
  <entry>
    <title>The library’s own name becomes the type</title>
    <link href="https://heroes-lang.org/log/#55"/>
    <id>https://heroes-lang.org/log/#55</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A pointer a C library hands you can carry the name the library gives it: record Db tag sqlite3. Hand one where another belongs and the compiler stops you on that line.</summary>
  </entry>
  <entry>
    <title>The reasons had rotted under the answers</title>
    <link href="https://heroes-lang.org/log/#54"/>
    <id>https://heroes-lang.org/log/#54</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Every entry on the list of postponed things received a date and a verdict: it enters, it is refused for good, or it waits with a checkable condition. Nine entries, nine sittings, and nine times the answer was fine and the reason written under it had rotted.</summary>
  </entry>
  <entry>
    <title>Every ceiling says which way it may move</title>
    <link href="https://heroes-lang.org/log/#53"/>
    <id>https://heroes-lang.org/log/#53</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The author said he kept hitting his head on the ceilings and asked which of them still made sense. Almost all had been set to the exact height of the thing measured, on the day somebody measured it.</summary>
  </entry>
  <entry>
    <title>The name of a thing is no longer text typed by hand</title>
    <link href="https://heroes-lang.org/log/#52"/>
    <id>https://heroes-lang.org/log/#52</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A program cannot ask a value what it is made of: three no’s, and each time the written reason was false, so the reasons were replaced with measurable ones.</summary>
  </entry>
  <entry>
    <title>The grammar went where the prose was</title>
    <link href="https://heroes-lang.org/log/#51"/>
    <id>https://heroes-lang.org/log/#51</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The author asked for the language written down formally, in a file of its own. Five seats looked at it from five directions and every one broke the same half: the part that would have been copied out by hand.</summary>
  </entry>
  <entry>
    <title>The records are no longer one file each</title>
    <link href="https://heroes-lang.org/log/#50"/>
    <id>https://heroes-lang.org/log/#50</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The author asked whether two pieces of work could run at once, and the answer was a measurement: two sessions never meet in the compiler, they meet in the records, on the one line both have to write.</summary>
  </entry>
  <entry>
    <title>fold’s type says which of the two is the pile</title>
    <link href="https://heroes-lang.org/log/#49"/>
    <id>https://heroes-lang.org/log/#49</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The function that combines two things receives the accumulator and the element, and if they are of one type either order compiles and the program answers something else. Now the type says which is which, and the compiler checks that the function you hand over agrees.</summary>
  </entry>
  <entry>
    <title>A function type carries the names that can be confused</title>
    <link href="https://heroes-lang.org/log/#48"/>
    <id>https://heroes-lang.org/log/#48</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The half of the hole the panel had priced and refused, the author said to build anyway: a function’s type carries the names of the arguments that can be swapped, and changing one makes it another type.</summary>
  </entry>
  <entry>
    <title>Three routes refused by three seats, and the fourth built in twenty-five lines</title>
    <link href="https://heroes-lang.org/log/#47"/>
    <id>https://heroes-lang.org/log/#47</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A label written in a call made through a function held in a variable is refused: the function has no names to compare it with.</summary>
  </entry>
  <entry>
    <title>The naming rule reaches the built-in functions</title>
    <link href="https://heroes-lang.org/log/#46"/>
    <id>https://heroes-lang.org/log/#46</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>If two of a function’s arguments are of one type, you have to say which is which. The compiler enforced it on everything the author wrote and on nothing it provided itself.</summary>
  </entry>
  <entry>
    <title>Thirteen numbers over thirteen doors</title>
    <link href="https://heroes-lang.org/log/#45"/>
    <id>https://heroes-lang.org/log/#45</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The author read the language’s own description and said it looked like a room nobody had ever tidied: every rule was there, each where it had been dropped. The tidying cost less than nothing.</summary>
  </entry>
  <entry>
    <title>Text with holes in it</title>
    <link href="https://heroes-lang.org/log/#44"/>
    <id>https://heroes-lang.org/log/#44</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A string can now carry values: f"line {n}: {word}" writes each hole as to_str would.</summary>
  </entry>
  <entry>
    <title>The ruling on interpolation</title>
    <link href="https://heroes-lang.org/log/#43"/>
    <id>https://heroes-lang.org/log/#43</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Three counts decided how a string may hold a value, and the counts corrected the first guess twice.</summary>
  </entry>
  <entry>
    <title>Bytes a C library may keep</title>
    <link href="https://heroes-lang.org/log/#42"/>
    <id>https://heroes-lang.org/log/#42</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A program can hand a C library text it will keep, and say when it is done with it: x: cstr @= s.lease(), then end_lease(@x).</summary>
  </entry>
  <entry>
    <title>A lent string stays where it was lent</title>
    <link href="https://heroes-lang.org/log/#41"/>
    <id>https://heroes-lang.org/log/#41</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A string lent to C with .cstr() may stand only as an argument of the call that reads it.</summary>
  </entry>
  <entry>
    <title>A note nobody had counted</title>
    <link href="https://heroes-lang.org/log/#61"/>
    <id>https://heroes-lang.org/log/#61</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Closures, functions that carry the variables around them, do not enter Heroes. A note had called them easy since the design’s first week; when the day came to build them, the first thing anybody did was count.</summary>
  </entry>
  <entry>
    <title>The polite way to lose a failure</title>
    <link href="https://heroes-lang.org/log/#60"/>
    <id>https://heroes-lang.org/log/#60</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Writing _ = in front of a call that can fail now stops the compile. Thrown away with the value went the news that it had failed, and the program finished with the number that means all is well.</summary>
  </entry>
  <entry>
    <title>The repository is open</title>
    <link href="https://heroes-lang.org/log/#40"/>
    <id>https://heroes-lang.org/log/#40</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler’s source, the specification and every record the project keeps can now be read by anyone.</summary>
  </entry>
  <entry>
    <title>Freeing strings returned by C</title>
    <link href="https://heroes-lang.org/log/#39"/>
    <id>https://heroes-lang.org/log/#39</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>An extern declaration can name the function that frees a string allocated by a C library. The compiler calls it automatically.</summary>
  </entry>
  <entry>
    <title>Checking thread stack space</title>
    <link href="https://heroes-lang.org/log/#38"/>
    <id>https://heroes-lang.org/log/#38</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Threads started by Heroes now report when they run out of space for function calls.</summary>
  </entry>
  <entry>
    <title>Separate memory for each thread</title>
    <link href="https://heroes-lang.org/log/#37"/>
    <id>https://heroes-lang.org/log/#37</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Each Heroes thread, an operation running in parallel, manages separate memory.</summary>
  </entry>
  <entry>
    <title>Passing Heroes functions to C libraries</title>
    <link href="https://heroes-lang.org/log/#36"/>
    <id>https://heroes-lang.org/log/#36</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>You can pass a Heroes function to atexit or pthread_create. The callbacks required by qsort and signal are not supported yet.</summary>
  </entry>
  <entry>
    <title>Larger examples to test the compiler</title>
    <link href="https://heroes-lang.org/log/#35"/>
    <id>https://heroes-lang.org/log/#35</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>More complex programs were added to cover the gap between small examples and the compiler.</summary>
  </entry>
  <entry>
    <title>An error when passing array elements</title>
    <link href="https://heroes-lang.org/log/#34"/>
    <id>https://heroes-lang.org/log/#34</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A comment described a crash as impossible, but one line could reproduce it.</summary>
  </entry>
  <entry>
    <title>Documenting modules</title>
    <link href="https://heroes-lang.org/log/#33"/>
    <id>https://heroes-lang.org/log/#33</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The documentation lacked an explanation of how to organise a program’s files.</summary>
  </entry>
  <entry>
    <title>Expanding the examples</title>
    <link href="https://heroes-lang.org/log/#32"/>
    <id>https://heroes-lang.org/log/#32</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>New programs were chosen to test more parts of the language.</summary>
  </entry>
  <entry>
    <title>Organising source files into directories</title>
    <link href="https://heroes-lang.org/log/#31"/>
    <id>https://heroes-lang.org/log/#31</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler’s files were organised into directories.</summary>
  </entry>
  <entry>
    <title>Using paths for modules</title>
    <link href="https://heroes-lang.org/log/#30"/>
    <id>https://heroes-lang.org/log/#30</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Modules can be found in subdirectories using a path.</summary>
  </entry>
  <entry>
    <title>Running commands without a shell</title>
    <link href="https://heroes-lang.org/log/#29"/>
    <id>https://heroes-lang.org/log/#29</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler started tools by building a string for the shell, the program that interprets commands.</summary>
  </entry>
  <entry>
    <title>Compiling one module at a time</title>
    <link href="https://heroes-lang.org/log/#28"/>
    <id>https://heroes-lang.org/log/#28</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Compilation generated one large C file even after a small change.</summary>
  </entry>
  <entry>
    <title>Archiving the first compiler</title>
    <link href="https://heroes-lang.org/log/#27"/>
    <id>https://heroes-lang.org/log/#27</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The first compiler was archived.</summary>
  </entry>
  <entry>
    <title>Writing the test tools in Heroes</title>
    <link href="https://heroes-lang.org/log/#26"/>
    <id>https://heroes-lang.org/log/#26</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The tools that check the compiler were rewritten in Heroes.</summary>
  </entry>
  <entry>
    <title>Distributing the compiler as a C file</title>
    <link href="https://heroes-lang.org/log/#25"/>
    <id>https://heroes-lang.org/log/#25</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Building the compiler requires compiling one generated C file with clang.</summary>
  </entry>
  <entry>
    <title>The compiler written in Heroes</title>
    <link href="https://heroes-lang.org/log/#24"/>
    <id>https://heroes-lang.org/log/#24</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler was converted from Rust to Heroes, together with its tests.</summary>
  </entry>
  <entry>
    <title>Converting the first module</title>
    <link href="https://heroes-lang.org/log/#23"/>
    <id>https://heroes-lang.org/log/#23</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The first trial converted one file and recorded any limits encountered.</summary>
  </entry>
  <entry>
    <title>Completing support for C structures</title>
    <link href="https://heroes-lang.org/log/#22"/>
    <id>https://heroes-lang.org/log/#22</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>More C declarations became usable from Heroes.</summary>
  </entry>
  <entry>
    <title>Passing structures to C functions</title>
    <link href="https://heroes-lang.org/log/#21"/>
    <id>https://heroes-lang.org/log/#21</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>C structures group several fields into one value, but Heroes could not yet pass them to functions.</summary>
  </entry>
  <entry>
    <title>Checking C function parameters</title>
    <link href="https://heroes-lang.org/log/#20"/>
    <id>https://heroes-lang.org/log/#20</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler checked C function results but not their parameters.</summary>
  </entry>
  <entry>
    <title>Finding defects with complete programs</title>
    <link href="https://heroes-lang.org/log/#19"/>
    <id>https://heroes-lang.org/log/#19</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The first complete programs found new compiler defects.</summary>
  </entry>
  <entry>
    <title>Integers of different widths</title>
    <link href="https://heroes-lang.org/log/#18"/>
    <id>https://heroes-lang.org/log/#18</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Heroes introduced eight integer types with explicit widths.</summary>
  </entry>
  <entry>
    <title>Making numeric bases explicit</title>
    <link href="https://heroes-lang.org/log/#17"/>
    <id>https://heroes-lang.org/log/#17</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A reviewer wrote 0700 for file permissions and asked how it was interpreted.</summary>
  </entry>
  <entry>
    <title>Using constants from C headers</title>
    <link href="https://heroes-lang.org/log/#16"/>
    <id>https://heroes-lang.org/log/#16</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>C library options can be named in the program.</summary>
  </entry>
  <entry>
    <title>Checking declarations against headers</title>
    <link href="https://heroes-lang.org/log/#15"/>
    <id>https://heroes-lang.org/log/#15</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>An example returned 1 where 1.41 was expected: C declaration checking had a defect.</summary>
  </entry>
  <entry>
    <title>Defining module names</title>
    <link href="https://heroes-lang.org/log/#14"/>
    <id>https://heroes-lang.org/log/#14</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Programs can be split into files.</summary>
  </entry>
  <entry>
    <title>Completing generics and core operations</title>
    <link href="https://heroes-lang.org/log/#13"/>
    <id>https://heroes-lang.org/log/#13</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Generic functions and core operations were completed.</summary>
  </entry>
  <entry>
    <title>Maps and fallible results</title>
    <link href="https://heroes-lang.org/log/#12"/>
    <id>https://heroes-lang.org/log/#12</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Implementing maps depended on values that represent a result or an error.</summary>
  </entry>
  <entry>
    <title>Representing recursive data</title>
    <link href="https://heroes-lang.org/log/#11"/>
    <id>https://heroes-lang.org/log/#11</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Heroes can represent an expression tree without mutable references between values.</summary>
  </entry>
  <entry>
    <title>Managing string memory</title>
    <link href="https://heroes-lang.org/log/#10"/>
    <id>https://heroes-lang.org/log/#10</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler introduced reference counting to free memory.</summary>
  </entry>
  <entry>
    <title>Producing the first executable</title>
    <link href="https://heroes-lang.org/log/#9"/>
    <id>https://heroes-lang.org/log/#9</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>A Heroes program was compiled into a native executable.</summary>
  </entry>
  <entry>
    <title>Choosing the internal representation</title>
    <link href="https://heroes-lang.org/log/#8"/>
    <id>https://heroes-lang.org/log/#8</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The compiler’s intermediate representation of a program was defined.</summary>
  </entry>
  <entry>
    <title>Measuring the first checks</title>
    <link href="https://heroes-lang.org/log/#7"/>
    <id>https://heroes-lang.org/log/#7</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Name, type and missing-case checks were tested by introducing mistakes into working programs.</summary>
  </entry>
  <entry>
    <title>Connecting names to declarations</title>
    <link href="https://heroes-lang.org/log/#6"/>
    <id>https://heroes-lang.org/log/#6</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Name checking rejected two declarations in a calculator program.</summary>
  </entry>
  <entry>
    <title>Parsing and formatting code</title>
    <link href="https://heroes-lang.org/log/#5"/>
    <id>https://heroes-lang.org/log/#5</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Writing the parser, which recognises code structure, revealed a contradiction in the specification.</summary>
  </entry>
  <entry>
    <title>Splitting source into tokens</title>
    <link href="https://heroes-lang.org/log/#4"/>
    <id>https://heroes-lang.org/log/#4</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The first compiler component divides source text into tokens, the elements the compiler recognises.</summary>
  </entry>
  <entry>
    <title>Preparing the project and tests</title>
    <link href="https://heroes-lang.org/log/#3"/>
    <id>https://heroes-lang.org/log/#3</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The Rust project, test tools and first example programs were prepared.</summary>
  </entry>
  <entry>
    <title>Reviewing the plan</title>
    <link href="https://heroes-lang.org/log/#2"/>
    <id>https://heroes-lang.org/log/#2</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>Five reviewers critically examined the plan before implementation.</summary>
  </entry>
  <entry>
    <title>The initial idea</title>
    <link href="https://heroes-lang.org/log/#1"/>
    <id>https://heroes-lang.org/log/#1</id>
    <updated>2026-10-26T21:12:42Z</updated>
    <summary>The project began with a document and a discussion about the language.</summary>
  </entry>
</feed>
