ディスカッション (8件)
軽量で実用的なコンパイラバックエンドである「QBE」のバージョン1.3が公開されました。QBEは、LLVMのような巨大なエコシステムを使わずに、素早く効率的にコンパイラを開発したいエンジニアにとって最適な選択肢です。今回のアップデートでさらに安定性と利便性が向上しています。
QBEは気に入りたいんだけど、こういう宣言ブロックを見るとモダンでハッカブルなソフトウェアというより、1970年代のUnixコードみたいな気分にさせられるんだよね。
int t, x, r, rf, rt, nr;
bits rs;
Ins *i, *i1;
Mem *m;
Ref *ra[4];
この書き方は、後に続く300行の関数内で、比較的複雑なコードを読み解くのを難しくしていて、ユーザーを遠ざけてる気がする。(自分のスキル不足なのは分かってるよ)
Windowsサポートは大きいね。最近プロジェクトでQBEの採用を考えた時にネックになったのは、プロプライエタリなOS(WindowsやMacOS)への対応が皆無だったこと。好き嫌いは別として、デスクトップ用途のシェアの圧倒的多数を占めてるからね。(QBEでビルドするプログラミング言語Hareについても同じことが言える。面白いけど実用的じゃない。自分はLinuxオンリーの人間だけど、LinuxとBSDしかターゲットにしていないのは論外だよ)
関連情報。他にはこんなものがあるよ。
QBE – Compiler Back End - https://news.ycombinator.com/item?id=48059633 (https://news.ycombinator.com/item?id=48059633) - 2026年5月 (28件のコメント)
Blaise – A modern self-hosting zero-legacy Object Pascal compiler targeting QBE - https://news.ycombinator.com/item?id=48058644 (https://news.ycombinator.com/item?id=48058644) - 2026年5月 (55件のコメント)
Qbecc – QBE based C compiler - https://news.ycombinator.com/item?id=45461195 (https://news.ycombinator.com/item?id=45461195) - 2025年10月 (3件のコメント)
Let's write a peephole optimizer for QBE's ARM64 back end - https://news.ycombinator.com/item?id=45099348 (https://news.ycombinator.com/item?id=45099348) - 2025年9月 (1件のコメント)
QBE – Compiler Back End - https://news.ycombinator.com/item?id=40346320 (https://news.ycombinator.com/item?id=40346320) - 2024年5月 (37件のコメント)
cproc – Small C11 compiler based on QBE - https://news.ycombinator.com/item?id=32466098 (https://news.ycombinator.com/item?id=32466098) - 2022年8月 (1件のコメント)
QBE 1.0 - https://news.ycombinator.com/item?id=31846433 (https://news.ycombinator.com/item?id=31846433) - 2022年6月 (3件のコメント)
I wrote a peephole optimizer for QBE - https://news.ycombinator.com/item?id=30864448 (https://news.ycombinator.com/item?id=30864448) - 2022年3月 (5件のコメント)
Cproc C Compiler - https://news.ycombinator.com/item?id=28242024 (https://news.ycombinator.com/item?id=28242024) - 2021年8月 (45件のコメント)
Cproc – a C11 compiler using QBE as a back end - https://news.ycombinator.com/item?id=25273918 (https://news.ycombinator.com/item?id=25273918) - 2020年12月 (1件のコメント)
QBE vs. LLVM - https://news.ycombinator.com/item?id=25273907 (https://news.ycombinator.com/item?id=25273907) - 2020年12月 (99件のコメント)
Show HN: QBE – a new compiler back end - https://news.ycombinator.com/item?id=11555527 (https://news.ycombinator.com/item?id=11555527) - 2016年4月 (68件のコメント)
(本来これほど最近でコメント数が多いスレッドは重複扱いになるけど、フロントページに載っていた時間が短かったから例外として残しているよ)
QBEってプロダクション環境で使う想定なの? それとも研究や学習目的のプロジェクトがメインなのかな?
じゃあ、hareはこれからWindowsをサポートするようになるのかな?
巨大な2大コンパイラ以外にも、シンプルでAPIが使いやすく、コードベースが小さくて、そこそこ decent なコードを吐き出すコンパイラが存在するのは素晴らしいことだと思う。でも、正直QBEのソースコードを解読しようと頑張ってみたけど、全く歯が立たなかった。ドメインの難しさだけでなく、コード自体が難解すぎるんだ。
昔のC言語の賢人たちが何を成し遂げられたのかを実感させられたプロジェクトの一つだよ。C言語はベストプラクティスを伴うプログラミング言語というより、言語を作るためのテンプレートに近い。安全性や快適さを全て投げ捨てれば、C言語が支配していた約40年の間に、コードの書き方に関する興味深いアイデアや競合する手法がいくつも生まれてきたんだよね(言語の誕生から2000年代初頭、OOPが勝利した頃まで)。
QBEとMIRというプロジェクトがあるけど、どちらも同じ「マッドサイエンス」なDNAを持ってる。QBEの方が少しフレンドリーでドキュメントも充実してるけど、MIRはより高速なコードを生成する。結局、MIRがインライン化を行うのに対して、QBEはそれを行わないというアーキテクチャ上の決断に帰結するんだ。
ほぼ理想的だよ。唯一の懸念点は、ソースレベルのデバッグ情報を追加する方法がないことかな。