Blaise v0.11.0 Is Here

mariuz1 pts0 comments

πŸŽ‰ 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>&middot;<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...

blaise list native reload backend array

Related Articles