【#も読】1bit CPU / カバレッジのしくみ / ドメイン特化の中間表現(@kanade_k_1228)のトップ画像

【#も読】1bit CPU / カバレッジのしくみ / ドメイン特化の中間表現(@kanade_k_1228)

投稿日時:2025/04/28 03:00
Kanadeのアイコン

Turing株式会社 / ソフトウェアエンジニア

Kanade

Xアカウントリンク

「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?


Kanade (@kanade_k_1228) です。最近は自作 CPU 上で自作 OS を作るための自作言語を作るのにハマっています。アセンブリ言語レベルの低レベルな操作と、Rust のような高度な開発体験を両立する言語を目指しています。というわけで今回は、CPU やコンパイラに関する話題を集めてみました。

1bit CPU

知名度はないが最も高性能だった 1bit MCU、Motorola MC14500(人知れず消えていったマイナー CPU を語ろう 第 14 回)

1bit CPU というと、ジョークのように聞こえるかもしれません。しかし、この記事で紹介されている Motorola MC14500 は、実際に産業用途で使用されていた 1bit のマイクロコントローラーです。特に、PLC(Programmable Logic Controller)としての用途では、単純な制御ロジックを実装するために 1bit で十分な場合が多く、MC14500 はそのニーズに応えていました。

データシートを読むと、MC14500 は非常にシンプルなアーキテクチャで、命令セットも最小限です。というのも 1bit なので算術演算はなく bit 演算しかないです。現代の技術でこのような 1bit CPU を再設計したら、どのようなものになるのか興味深いです。

カバレッジのしくみ

Rust の新しいコードカバレッジ/Source-based code coverage

最近、業務でテストのカバレッジを扱う機会がありました。カバレッジツールは、どのようにしてソースコードと実行時の情報を結びつけているのか疑問に思い、調べてみました。JavaScript や Python のようなインタプリタ言語では、ソースコードと実行が 1 対 1 で対応しているため、カバレッジの取得は比較的容易です。しかし、C/C++のようなコンパイル言語では、ソースコードがバイナリに変換される過程で最適化が行われるため、元のコードと実行時の挙動が一致しない場合があります。この記事では、行単位より細かく言語文法に即したカバレッジである「ソースベースのカバレッジ」について、具体例を交えながら解説しています。

Rust の中間表現

Rust Compiler Development Guide

Rust コンパイラである rustc の内部実装について解説したドキュメントです。ソースコードがさまざまな中間表現(IR: Intermediate Representation)に変換されながら、最終的にバイナリへと変換される過程が詳細に説明されています。Rust のような高機能なプログラミング言語を設計することは、中間表現を設計することでもあると実感しました。中間表現の設計は、言語の表現力や最適化の可能性に大きな影響を与えます。自作言語を作る際にどのようなパスを設計するかの参考になりました。

ドメイン特化の中間表現

MLIR がもたらす新たな中間表現の可能性

機械学習コンパイラむけの中間表現である MLIR(Multi-Level Intermediate Representation)についての解説記事です。この記事では、MLIR の設計思想やアーキテクチャ、具体的な活用例について解説されています。​

ここで興味深かったのは、中間表現のデメリットの話です。中間表現には、ソースコードから中間表現に変換される過程で、最適化のヒントとなりうる高度な情報を落としてしまうという問題があります。MLIR はその問題をドメイン特化の中間表現を用いることで解決しています。

しかしこれは中間表現に限った話ではないと思いました。プログラマの脳内に真のソースコードがあると考えれば、プログラミング言語も一種の中間表現になります。いかにそのイメージの情報を落とさないかが、プログラミング言語設計の重要なポイントだと思います。例えば、純粋関数で表現可能なニューラルネットワークを、手続き的な記述でコーディングしてしまったがために、最適化がうまく働かない、というような事例を見たことがあります。言語が純粋関数的な記述しか受けつけない場合、最適化が容易になります。一方で、言語が手続き的な記述を許容すると、より多様なプログラムを表現可能になりますが、その分最適化が困難になります。

このような表現力と最適化のトレードオフにおいて、MLIR のようなドメイン特化の中間表現はかなり有効な手段だと感じました。最近作ってる自作言語ではインラインアセンブリに型を実装しているのですが、MLIR の考え方が参考になりました。

Kanadeさんの「も読」過去記事