
2026/06/08 21:55
Blaise v0.10.0:ネイティブバックエンド、スレッド対応、インクリメンタルコンパイルをサポート
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Blaise のバージョン 0.10.0 は、第 1 つのネイティブ x86-64 バックエンド(
--backend native または --target linux-x86_64)の実装により大きなマイルストーンを達成し、外部アセンブラなしで ELF .o ファイルを生成する機能を備えています。このリリースでは、ゼロ引数の関数呼び出しに丸括弧の使用が義務付けられ(例:TFoo.Create() で TFoo.Create の代わりに)、Pascal 風のアムビュイティを排除します。一方、Foo は引き続き変数の読み取りとして扱われます。スレッドサポートは、threadvar 宣言、原子 ARC、 Mutex 保護された弱参照、スレッド固有の割り当て器、および正しい TThread の動作を通じて導入されました。インクリメンタルな独立したコンパイルは、.o ファイルに埋め込まれた新しい .bif(Blaise Interface File)形式を使用した --incremental フラグにより利用可能になりました。ダイヤモンド演算子は高度な型推論を可能にします(例:var L: TList<Integer> := TList<>.Create() では左辺から <Integer> が推論されます)。追加の言語機能には、Exit(Value) ショートハンド、整数型に対するビット反転(not)、集合値定数([a, b])、そして out パラメータの明確な追跡が含まれます。コンパイラツールは、--dump-ast フラグ、マルチユニットビルドをサポートするプレフィックス符号のマングリング、Delphi/FPC のセマンティクスに一致した階層的シンボル検索機能により強化されました。TUI Kanban ツールは、タスク作成、UTC 日時の保存、外部ファイルの変更検出、および丸付きボックス描画を含む CLI の改良を受けました。2,627 テストのパスおよび固定点で検証済みの QBE IR が 262,202 ラインに達したことで、自己ホスティング能力が確認されました。v0.9.0 より以降のコミット数は 130 に過ぎず、すべてのアーティファクトは GitHub Releases ページにフル変更ログと共に用意されています。本文
Blaise バージョン 0.10.0 のリリース発表
今回は、Blaise プログラミング言語のバージョン 0.10.0を正式にリリースいたします。これまでの最も大規模なアップデートであり、言語レベルの明確性向上、ネイティブ x86-64 バックエンド採用、スレッドサポート実装など、多数の革新が含まれています。🚀
🔧 引数ゼロの呼び出しにおける必須のパラメータ ()
()今回の最大の変更点は、すべての関数呼び出しにおいて丸付き括弧(パラメータ)の使用が必須になったことです。引数が 0 でも同様です。
✅ 正しい書き方
F := TFoo.Create(); Obj.Free(); X := GetCurrentDir();
❌ これからは受け付けません
F := TFoo.Create; Obj.Free; X := GetCurrentDir;
採用のメリット
- 曖義性の解消:
は変数読み取り、Foo
は関数呼び出しと区別可能です。これにより結果の代入や再帰処理におけるパスクール的な曖義性が排除されます。Foo() - ツール対応の改善:
を用いた呼び出しサイトの探索が信頼性高く行えるようになりました。grep - 内部機構の整理: コンプコンパイラ内部の
機構を削除し、その過程で潜在的だったコード生成に関するバグ 3 つを同時に修正しました。🐛→🦋IsNoArgFuncCall
「手順-フィールド」呼び出し機能の新規追加
: コードポインタを経由してディスパッチを行います。Obj.Handler()
: フィールドの値を読み取ります。Obj.Handler
🖥️ ネイティブ x86-64 バックエンド
Blaise は現在、QBE バックエンドと並行して、直接 x86-64 コードを生成するネイティブバックエンドを搭載しています。マイルストーン M1 から M8 の目標がすべて達成されました。
実装対応機能
- 演算・制御フロー: 整数演算、浮動小数点演算、
,for
,while
ループrepeat - データ構造: レコード、静的配列、動的配列、開配列
- クラスシステム: メソッドディスパッチ、vtable、コンストラクタ、デストロクター
- メモリ管理: ARC(Automatic Reference Counting)による文字列・クラス・インターフェースの保持/解放
- ディスパッチ: itab 通じたインターフェースディスパッチ
- 例外処理:
try/except/finally - パフォーマンス: QBE バックエンドと同等の文字列操作性能
- 高度な機能:
/var
パラメータ、継承呼び出し、ジェネリクス支援(モノモルフィズム)、out
文およびfor-in
文case
使用方法
--backend native # または --target linux-x86_64 # オプションで指定可能
- ELF フォーマットの `.o ファイルを直接生成します。
- 外部アセンブラが不要です。💪
🧵 スレッドサポート
Blaise は一等市民としてのスレッド処理機能を取得しました。
スレッド機能リスト
: スレッドローカルストレージの宣言が可能に。threadvar- 原子 ARC: リファレンスクォンティングは原子インクリメント/デクリメントによりスレッドセーフ化。
- 弱参照テーブル: ミュテックス保護により、複数スレッド間での動作が保証されます。
- メモリアロケーター:
通じたスレッド単位の割当によりロック競合を削減。threadvar - 例外処理: スレッドローカルな例外グローバル変数実装(独自の実行フレームチェーン割り当て)。
- スレッド同期:
は ARC を介してTThread.Create(False)
で正しくジョインされます。Free()
すべては、実際のスレッドを起動するエンドツーエンドのテストで検証済みです。🧪
⚡ インクリメンタルな別ユニット間コンパイル
コンパイラがユニット単位のインクリメンタルコンパイルをサポートし、高速な再ビルドサイクルを実現しました。
主要機能
ファイル: Blaise Interface File(公開インターフェースのシリアライズデータ)で、.bif
ファイル内に埋め込まれます。.o
フラグ: 変更されたユニットのみ再コンパイルし、未変更部分はキャッシュを再利用します。--incremental- 並列ビルド: ワーカースレッドによる複数のユニット同時インクリメンタルコンパイルが可能に。
- EImportError の解消: 「ウォームインクリメンタル再コンパイル」機能により、陳腐なインターフェースデータ再利用によるクラッシュが全て解決されました。
.bif
形式のカバー範囲
.bif定数、型(単純型、レコード、クラス、インターフェース、ジェネリックテンプレート)、ルーチン、グローバル変数、インラインボディ、呼び出し規約ディレクティブなどをすべて網羅します。
📦 言語機能および標準ライブラリの新規対応
- ダイヤモンド演算子:
で左辺から型引数を推測可能に。var L: TList<Integer> := TList<>.Create(); - 簡易記法
: コンパイラ内 305 カ所で実装(自家消費テスト済み)。Exit(Value) - 整数への
オペレーター:not
,Integer
,Byte
,Word
,SmallInt
に対するビット補足演算が可能に。Int64 - セット値定数:
および引数のセットとしてのセットリテラル対応。const X = [a, b] - パラメータモードの区別:
パラメータはout
と明確に区別して追跡可能に。var - 呼び出し規約ディレクティブ: ルーチン宣言での
,cdecl
保持。stdcall - ブーリアン表示:
がWriteLn
/True
を適切に表示します。False - 無符号数表示: 32 ビット無符号数の
で正しく表示されます。WriteLn - 改行保持:
およびTStringList.Text
が改行をトリミングなしで保持します。LoadFromFile
🛠️ コンパイラ改善点
フラグ: セマンティクス解析後の完全解決された AST を出力し、コード生成問題の診断に役立ちます。--dump-ast- ユニットプレフィックス付きシンボル名リング: フリールーチン・クラス・アドレス演算式に所属ユニット名を追加し、マルチユニティビルド時のシンボル衝突を回避できます。
- ユニット単位のシンボルキャッシュ: 高速な「使用チェーン」検索を実現。
- レイヤー付きシンボル検索: 現在のユニットシンボルが優先され、Delphi/FPC のセマンティクスに準拠します。
🎯 キャンバンツール (TUI) の改善
組み込み TUI カンバンボード(
tools/kanban/)にも以下の機能が追加されました:
- CLI モード: 非インタラクティブなタスク作成が可能に。
- 日付フォーマット: UTC 日時の保存とローカル表示の両対応。
- マージ機能: 外部ファイルの変更検出とマージに対応。
- 描画改善: 丸みを帯びた図形描画角と色のついた枠線。
📊 数値による成果
- 2,627 のテストケースがパス ✅
- 262,202 行の検証済み QBE IR が Fixpoint に到達
- v0.9.0 より以来、130 以上のコミットを追加
- FIXPOINT_OK: セルフホスト化が検証済み ✅
詳細な変更リストは [GitHub Releases ページ](https://github.com/your-repo/releases) からダウンロード可能です。 ※実際の URL に置換えてください。
ご意見・ご感想は大歓迎です!コメント、Issue 作成、あるいは単なる挨拶をお待ちしています。👋
次回以降のバージョン 0.11.0 へ邁進していきます!🙌
Pascal コミュニティのために ❤ で構築しました。