π Blaise v0.11.0 is here! Β· graemeg/blaise Β· Discussion #126 Β· GitHub
//voltron/discussions_fragments/discussion_layout" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
//voltron/discussions_fragments/discussion_layout;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
graemeg
blaise
Public
Uh oh!
There was an error while loading. Please reload this page.
Notifications<br>You must be signed in to change notification settings
Fork
Star<br>229
π Blaise v0.11.0 is here!
#126
graemeg
announced in<br>Announcements
π Blaise v0.11.0 is here!
#126
graemeg
Jun 17, 2026<br>·<br>0 comments
Return to top
Discussion options
Uh oh!
There was an error while loading. Please reload this page.
{{title}}
Something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Quote reply
graemeg
Jun 17, 2026
Maintainer
This is our biggest release yet β 237 commits since v0.10.0, and easily
the one I'm most excited to share. If v0.10.0 was about making the compiler
self-hosting and fast, v0.11.0 is about making the language comfortable to
write in and bringing the native x86-64 backend up to full parity with QBE.
Let's dig in. π
ποΈ A second backend that's now a first-class citizen
Since its introduction, the native backend was the experimental sibling β handy
for debugging, but QBE did the real work. That's no longer true. This cycle
the native x86-64 backend learned almost everything QBE already knew:
By-value record parameters and ABI-correct record-by-value returns (sret)
Property reads/writes through getters and setters, virtual dispatch
Nested procedures with captured variables, callbacks, is/as/Supports
Open-array literals, interface/procedural/dynarray params and returns
Inc/Dec on fields, derefs and var params; full ARC for const-string args
Floating-point Format() with %f/%e/%g, width and precision
And β the part that proves it β Blaise can now builds itself with the
native backend , and we added a dedicated fixpoint-native.sh that
verifies the native compiler reproduces itself byte-for-byte. Two independent
backends, both reaching a self-hosting fixpoint. π
π Towards a self-contained toolchain
A long-standing goal is a single blaise binary that needs no external
tools. Two big steps landed this cycle:
A self-assembler (--assembler internal) β the native backend can now
emit ELF object files directly, no external assembler required.
Phase A of the internal linker β an ELF object + ar-archive reader and
a section merger, the foundation for replacing the external cc/ld link
step entirely.
The linker is a multi-phase journey and it'll be the headline of v0.12.0 β but
the groundwork is in and tested. π§±
β¨ Language features that make day-to-day code nicer
A whole cluster of quality-of-life additions:
π’ Compile-time constant folding β integer and floating-point, plus
multi-dimensional array constants:
const<br>Tau = 3.14159 * 2; // folded at compile time<br>Grid: array[0..1, 0..1] of Integer = ((1, 2), (3, 4));
π Static arrays grow up β multi-dimensional, named-constant and expression
bounds, and enum-indexed arrays:
const N = 8;<br>type<br>TColour = (Red, Green, Blue);<br>var<br>Buffer: array[0..N - 1] of Byte; // expression bound<br>Hits: array[TColour] of Integer; // enum-indexed
π― Sets, properly β set of Byte/Boolean, ranges in literals,
subset/superset operators, and "jumbo" sets up to 256 members:
var Digits: set of Byte;<br>begin<br>Digits := [0..9];<br>if [1, 2] then WriteLn('subset!'); //<br>end;
πͺ Default array properties β Obj[I] sugar, including List[i] on TList:
begin<br>List := TList<>.Create();<br>List.Add(42);<br>WriteLn(List[0]); // default property β no .Items needed<br>end;">var List: TList;<br>begin<br>List := TList<>.Create();<br>List.Add(42);<br>WriteLn(List[0]); // default property β no .Items needed<br>end;
𧬠inherited Method() in expression position plus implicit integerβfloat
widening for math builtins:
Total := inherited Sum() + 1; // inherited as a sub-expression<br>R := Sqrt(2); // Integer widens to float automatically
π§© Generics β method-level type parameters and an out-of-line impl form
π UTF-8 niceties β for..in over a string iterates codepoints, plus new
StrUtils codepoint helpers (with...