**Show HN:Xcc700 – ESP32(Xtensa)用のセルフホスティング・ミニ C コンパイラ、700 行で実装**

2025/12/27 0:07

**Show HN:Xcc700 – ESP32(Xtensa)用のセルフホスティング・ミニ C コンパイラ、700 行で実装**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

概要:
xcc700 は ESP32/Xtensa プラットフォーム向けに書かれた、自己ホスティング型の単一ファイル C コンパイラ(約 700 行)です。生成される ELF バイナリは ESP‑IDF の elf_loader を介して ESP32 にロードでき、GCC でコンパイルした場合のバイナリサイズは約 16 kB、xcc700 自体が作成した場合は約 33 kB です。
このコンパイラは C 言語のコアサブセットのみをサポートします:

while
if/else
int
char
/ポインタ/配列、関数呼び出し、基本的な算術演算とビット演算子。意図的に
for
do
#include
#define
long
float
double
、構造体/共用体/typedef、
switch/case
、配列初期化子、
.data
セクション、多行コメント、グローバル初期化子、および堅牢なエラーハンドリングなど多くの言語機能を省略しています。
最適化は最小限で、Xtensa コアはレジスタ割り当てやスライディングウィンドウ使用なしにスタックマシンとして扱われるため、パフォーマンスが低下します(自身でコンパイルした場合の約 3 900 行/秒対 ESP32‑S3 上では約 17 500 行/秒)。
xcc700 は macOS(x86_64 および arm64)上でネイティブにクロスコンパイラとして動作し、
xtensa-gcc
を使用して ESP32 用にビルドしたり、ファームウェアに直接埋め込むことも可能です。プロジェクトは MIT ライセンスの下で提供されており、フォークや拡張を奨励しています。これは軽量な低電力ハードウェアでも重量級ツールチェーンなしで有意義なソフトウェアを動作させられることを示すために ESP32 “cyberdeck” を構築している際に作成されました。

本文

xcc700 – ESP32/Xtensa 用の自己ホスティング型ミニ C コンパイラ

このプロジェクトを調べる理由は?

モダンなプラットフォーム上で完全に理解・変更できるコンパイラ。小さくてもクールなのが好きです。

  • 基本機能のみで、堅牢すぎず、好きな言語へ簡単に変形できます。
  • 再利用可能な ELF ライターと基本的な Xtensa バイトコードエミッタを備えています。
  • ESP32 上のホットフィックス、CI、クイックテスト/デバッグサイクルに有用かもしれません。

サンプル出力

./xcc700 xcc700.c -o xcc700.elf 
[ xcc700 ] BUILD COMPLETED > OK
> IN  : 700 Lines / 7977 Tokens
> SYM : 69 Funcs / 91 Globals
> REL : 152 Literals / 1027 Patches
> MEM : 1041 B .rodata / 17120 B .bss
> OUT : 27735 B .text / 33300 B ELF
[ 40 ms ] >> 17500 Lines/sec <<

注: タイミングは ESP32‑S3 上で測定。macOS/POSIX では約 1000 倍遅くなります。ESP32 のタイマーはミリ秒単位、POSIX はマイクロ秒単位であるためです(調整は行っていません)。

ビデオデモ

xcc700_demo10s.mov


xcc700 の実行方法

  1. GCC でコンパイル

    gcc xcc700.c
    を実行し、クロスコンパイラとして自分の PC 上で動かします。
    macOS(x86_64 と arm64)でテスト済み。

  2. ESP32 用にコンパイル

    xtensa-gcc
    もしくは A‑コンパイルされたバイナリ(
    xcc700.elf
    、16 kB)を使用します。
    ESP‑IDF の
    elf_loader
    で実行。

  3. ファームウェアに埋め込む – ソースコードを調整し、自分のファームウェア内で関数として呼び出す。


含まれているもの

  • C 機能: このコンパイラを書くために必要な最小セット。while、if/then/else、int/char/ポインタ/配列への限定的サポート、関数呼び出し/定義、基本的な算術・ビット演算子。
  • 単一の
    .c
    ファイルを入力 → 1 本の REL ELF ファイルを出力。
  • 出力ファイルは ESP‑IDF の
    elf_loader
    により直接実行でき、リロケーションテーブル経由でファームウェアに公開された関数(newlib libc、LVGL、カスタム関数など)とリンクします。使用する関数を宣言すれば OK。

何が欠けているか

  • 完全な C: for/do ループ、include/define、long/float/double、struct/union/typedef、switch/case、配列初期化子、
    .data
    セクション、多行コメントなど。
  • 部分的機能:
    .bss
    グローバルはあるがグローバル初期化子なし;
    ++/--
    はプレフィックスのみ;代入は文としてのみ(式ではない);型チェックはほとんど無し。
  • エラーハンドリング/報告は最小限で、些細なエラーでもクラッシュする可能性があります。
  • 最適化なし:Xtensa CPU をスタックマシン扱い。レジスター割り当てやスライディングウィンドウ使用はありません。
    GCC コンパイル版: 約16 kB、17,500 行/s
    自己コンパイル版: 約33 kB、3,900 行/s

機能が足りないと感じたらフォークしてください!700 行程度のコードなので拡張は簡単です。


ライセンス

MIT –

LICENSE
を参照ください。


コントリビューション

フォーク歓迎です。これは別の C99 実装を目指すものではありません。ESP32 上でこの小さな自己ホスティング型コンパイラを拡張できるか、他の人の視点から興味があります。

ハッカソン、課題、チュートリアル、あるいは

ld
で ELF ファイルをリンクするために他システムへ移植する際のベースとしてご利用ください。


なぜこれを書いたか

ESP32 の「サイバーデック」を作っていて、デバイス上で直接バイナリをコンパイルしたいと思ったからです。ESP32 はユーザーランドで過小評価されており、90 年代の PC ができたこと以上の機能を持っています。

自問してみてください:

  • 楽しむ/有用な計算に必要なワット数はどれくらいか?
  • もっとシンプルで手軽に改造できる共通アプリがあればいいのでは?
  • 本当に 300 MB のマウスドライバが必要なのか?

楽しんでください!

同じ日のほかのニュース

一覧に戻る →

2025/12/27 2:13

**原文:** 「How uv got so fast」 **改訂(整理済み):** 「How did UV get so fast?」 **日本語訳:** 「UVはなぜそんなに速くなるのですか?」

## Japanese Translation: ``` ## Summary uv は Rust のみを利用するよりも、モダンな設計選択とパッケージング標準を採用しているため、pip より優れています。不要なオーバーヘッドを伴うレガシー機能(.egg サポート、pip.conf の読み込み、デフォルトのバイトコードコンパイル、system‑Python インストールの許可、厳格な仕様準拠、requires‑python の上限無視、複数インデックスが設定されている場合に最初のインデックスを選択)を削除することで、uv は不要なコードパスを排除します。さらに、HTTP レンジリクエストによる部分的な wheel ダウンロード、並列ダウンロード、ハードリンクまたはコピーオンライト可能なグローバルキャッシュ、ネイティブ TOML パース、および効率的な PubGrub 依存関係解決器を使用してインストール速度を加速させています。Rust は rkyv によるゼロコピー逆シリアライズ、ロックフリーの同時実行データ構造、単一静的バイナリであるためのインタプリタ起動コストゼロ、および高速比較/ハッシュのためのコンパクトな 64‑ビットバージョン表現を提供します。 Python のパッケージングは、setup.py スクリプトがインストール時に実行される必要があったため遅くていました。PEP 518–658 の導入によりメタデータが宣言的フォーマットへ移行し、PyPI 上の Simple API(2023年5月以降利用可能)が有効になりました。uv は 2024 年2月にリリースされ、初日からこれら新しい標準を活用しています。 影響は大きく、開発者は依存関係をより迅速にインストールでき、軽量な環境を構築できます。これは、Python エコシステム全体で最新のパッケージング標準を完全にサポートするツールへの広範な移行を促進する可能性があります。 ```

2025/12/23 23:51

2025年の最高アイテムとおすすめ

## Japanese Translation: ## Summary 2025年、著者はハンス・ボーマーの再帰的実数計算法や日本漫画カフェドキュメンタリー『マンブー』などの注目すべきIT・テック発見で生産性の高い一年を達成しました。彼はClojureのcore.asyncとJDK 21バーチャルスレッド、結合型関数言語Juxt、WordPressからMarkdown/org-mode静的サイトパイプラインへの移行についての技術ブログを複数公開しました。また、ブラジルで開催されたClojure/conjとClojure South Brazilという二つの主要なClojureカンファレンスに参加し、コミュニティの影響力を強調しました。 色分けされた月次マトリクスを備えたスプレッドシートベースのタスクトラッカーが導入され、著者のミニマリストでシステム思考的アプローチを反映し、専用プランナーよりもスプレッドシートを好む姿勢を示しました。プログラミングはClojure(16年にわたるフルタイム作業)に集中しつつ、Joy、Clojerl、Scittle、Javaによるコンパイラ開発も探索しました。 2025年にはゲーム・フィクション・システム思考に関するエッセイなど非技術的なアウトプットが増加し、2026年にはさらに多くのフィクションとカードゲームルールを企画しています。著者の「人生を変えるテクノロジー」主張はZettelkastenメモ取り法の採用に集約され、新しい非技術的投稿が可能になりました。大規模言語モデル(LLM)との広範な実験は限定的な実践的利益しか生まれず、問題設定とソクラテス対話における欠点を批判しています。 また、本年には好きな本(例:『オシリスの目』、『ナルキッサスとゴールドマン』)、音楽、映画、ポッドキャスト、テーブルトップゲームの厳選リストも含まれました。2026年を見据えて、著者は非技術的執筆を増やし、カードゲームルールを発表し、Clojure 1.13を進化させ、物理アーティファクトを作成し、未翻訳の本を読み、Goodnotes、Antinet、Booxなどのツールを使ってテックラダーを洗練する予定です。すべてはミニマリストでシステム志向のワークフローを維持しながら行われます。 この要約は元のリストからすべての主要ポイントを取り込み、推測を避け、明確な主旨を提示し、曖昧または混乱する表現を排除しています。

2025/12/27 8:09

「テキストに常に賭ける」

## Japanese Translation: ## Summary テキストは、これまでに発明された中で最も強力で多用途かつ信頼性の高い通信技術であり、可能な限り常に選択すべきです。約5,000年間安定した媒体として存在し、その長寿を示す耐久的な遺物が残っています。テキストは比類のない柔軟性を提供します:正確な意味を伝えることができる一方で、暗黙の文脈も許容するため、文学・歴史・哲学・数学・論理学・プログラミング・工学・注釈学・ファンフィクションに不可欠です。他のメディアと比べてテキストは格段に効率的であり(例:5 kB のブログ投稿がより大きな画像と同じ情報量を持つ)、電信・電子メール・チャット・ウェブなど後続技術を可能にしました。テキストは一対一、一対多、多対多のあらゆる社会的相互作用をサポートし、検索性・索引化・翻訳・非同期性・アルゴリズム処理(例:差分検出や要約)が可能です。また、多者編集、分岐会話、注釈付け、引用、構造化応答、およびレビューも許容します。著者は、テキストが通信・データ保存・アルゴリズム処理の基盤メディアとして残ると信じており、その幅広さ・深さ・スケーラビリティに匹敵するフォーマットは他に存在しないと述べています

**Show HN:Xcc700 – ESP32(Xtensa)用のセルフホスティング・ミニ C コンパイラ、700 行で実装** | そっか~ニュース