1 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • Buzは、BunがRustで書き直される直前のコミットを起点に、最新のZigベースの互換代替を目指して開発中の初期段階のフォーク
  • JavaScriptCoreのベンダー同梱ソースまで含むビルドグラフ全体をbuild.zigへ移し、Zigに小規模なパッチを適用して1秒未満のインクリメンタルビルドを実現
  • Rust版Bunの新機能・バグ修正テストを取り込んだが、失敗するテストが多く、アップストリーム機能とJavaScriptCoreの変更を継続的に追いかける必要がある
  • 未使用コードを11,000行以上削除し、一部実装をZig標準ライブラリ中心にモダナイズする過程で複数のバグも修正
  • まだ本番環境では使えず、LLMと人間の監督を併用して技術的負債を減らしたうえで、長期的にはLLMなしでも保守しやすいコードベースを作ることが目標

プロジェクトの目標と開発状況

  • Buzは、BunがRustで書き直される前の最後のコミットをベースにした開発中のフォーク
  • Bunと互換性のある代替でありつつ、従来より整理されたコードベースを作ることに重点を置く
  • 開発は非常に初期段階で、本番環境で使う準備はできていない
  • 類似のZigベースBunプロジェクトがすでにZiggitで公開されている状況で、開発作業の重複を避けるためにBuzを公開
    • 公開時点では、そのプロジェクトはまだ検討していなかった

最新Zigへの移植とインクリメンタルビルド

  • Bunを現在のアップストリームZigへ移植し、インクリメンタルリビルドのためにZigへ小規模なパッチを適用
  • JavaScriptCoreのベンダー同梱ソースを含むビルドグラフ全体をbuild.zigに統合
  • この構成によりインクリメンタルビルド時間が1秒未満に短縮され、開発の反復サイクルが高速化
  • プロジェクトには、インクリメンタルビルド用パッチを適用したZig masterサブモジュールが含まれる
  • 当時のアップストリームZigコミット2b1c663でも正常にビルド可能

互換性テストとアップストリーム追跡

  • Rust版Bunに追加されたテストを取り込んでおり、新機能とバグ修正を検証するテストも多数含まれる
  • まだ通過しないテストが多く、Bunのアップストリームに継続して追いつく必要がある
  • 機能互換性を維持しながらコードを整理し、技術的負債を減らす作業も並行
  • JavaScriptCoreの変更も継続的に追跡する必要がある

コードベースの整理とモダナイズ

  • Bunでまったく使われていないコードを11,000行以上削除
  • 一部コードを書き直し・モダナイズしながら、Zig標準ライブラリの活用を拡大
  • 整理とモダナイズの過程で複数のバグも同時に修正
  • 既存のBunコードベースは約60万行規模で、整理された状態に到達するには多数のサブシステムを書き直す必要があると見ている

LLMの活用とコントリビューション方針

  • 複雑な既存コードを整理するためにLLMを広範に活用しつつ、人間による監督とより良い開発プラクティスも併用する計画
  • コードベースが十分に整理されたと判断するまでは、人間が直接書いたコントリビューションは受け付けない方針
  • 技術的負債の削減と慣用的なZigコードの記述を優先し、数週間または数か月以内にRust版Bun 1.4.0の互換代替として出せるコードベースを目標とする
  • SolまたはFableを使える開発者の支援を求めている
  • 長期的には、LLMの助けがなくても保守しやすいコードベースを作り、開発過程でZigのスキルも高めようとしている

1件のコメント

 
GN⁺ 3 시간 전
Hacker News の反応
  • このフォークで最も興味深いのは、Bun も本来とっくに高速にビルドできたことを証明した点だと思う
    まだ Zig のインクリメンタルコンパイルは aarch64 をサポートしておらず、バイナリパッチも Linux リンカーでしか可能ではないが、主要プラットフォーム対応は時間の問題に見える
    • ビルド速度を上げるために Zig コンパイラをフォークした件をめぐる騒ぎを考えると、これがトップコメントでないのは驚き
      1人チームで1秒ビルドを達成したという事実は、遅いビルドが不注意な開発慣行の結果であり、フォークに時間を費やしたのは完全に誤ったリソース配分だったことを示している
  • LLM が壊したコードをまたLLMで整理するとは、2026年に技術の頂点へ到達したようだ
    • これまでも人間が壊したコードを人間が整理してきたので、論理的な矛盾ではない
    • LLM の成果物は、それを指示するユーザーの能力と同じだけ良くなる
    • AI には懐疑的だが使う気はある。LLM が本当に自分の成果物を自分で整理できるなら、ゲームチェンジャーになり得る
    • 同じ考えだったが、その直後に人間が主導権を握り、技術的負債を減らし、慣用的な Zig コードを書いて、数週間から数か月のうちに Rust Bun 1.4.0 を置き換えられるコードベースを作ると述べている
      結局、もっと多く、あるいはもっと上手に指示するという意味に見える。コード構造は好みの領域でもある気がするが、昨日は HTTP リクエスト1件を処理するのにバックエンドプロセスが4つ必要だと主張する友人と、呆れるような会話をした
    • 最初からこういう方向だった。人間が読めず理解もできない、ソフトウェアの形だけをした壊れた LLM 出力がコードになっているのだから、結局すべてのコードは機械が読み書きするように作られるしかない
      人間が介入する時代は、最初から暫定段階だったのだと思う
  • Bun から完全に死んだコード11,000行を削除し、標準ライブラリをより活用するように現代化しながら、多数のバグまで直したというのは驚き
    大規模プロジェクトではよくあることなのに、自分が知らなかっただけなのか気になる
    • 全体が60万行なので、死んだコードは約1.8%。大きなコードベースほど、そのコードが実際に使われていないか判断するには広い範囲を見る必要があり、時間の経過とともに離れた場所の変更が死んだコードを生むこともあるので、より一般的だ
      if (false) { dead_code(); } のように明白なコードなのか、動的ディスパッチは可能だが論理上呼ばれ得ないコードなのかは不明。前者なら1.8%は高いが、後者なら低いかもしれない。古い機能フラグの裏に、事実上永遠に実行されないコードが積み上がっているプロジェクトも多い
      単純なユーティリティや生成コードのような少量の死んだコードは残してもよいが、削除が連鎖的な削除や単純化につながることもある
    • 以前の会社で、1万行のコンポーネントを2千行に縮小しながら主要なバグをすべて直した
      厳密には死んだコードではなかったが、小さな誤った抽象化を一つ整理すると次の整理機会が次々に開け、最終的には意図したことだけをするソフトウェアが残る。コードベースは時間とともに肥大化するので、Bun 規模で11,000行しか見つからなかったことのほうがむしろ驚き
    • Zig コンパイラは遅延コンパイルするため、コンパイルされた関数のどこからも呼ばれない死んだ関数を検出しない
    • Bun の開発方法を考えると予想より少なく、コードベースにはもっと多く残っていそうだ
    • 大規模コードベースでこの程度の死んだコードに驚くことのほうが驚き。普通サイズの PR 約10個分にすぎない
  • プログラミング歴がどれくらいだと、死んだコード11,000行をそれほど異例だと見るのか気になる
    • 経験は10年以上ある。どこからも呼ばれない明白な死んだコードのことを指していて、このくらい多い他のプロジェクトがあるのか気になった
  • エージェント中心のコーディングプロジェクトごとに、機能開発とコード管理の間でチックタック的な振動が現れた
    チック段階では機能を素早く追加して、正確だが極度に散らかったバージョンを作り、タック段階では成果物を消化して整理し、性能・保守性・変更への脆弱性を改善する
    1日かけてバイブコーディングで動くアプリを作った後、カードの家のように崩れずに機能を追加し続けられるプロジェクトにするために1週間を使うことがよくある。AI 以前にも似たことはあったが、プロの開発者はシステムに対するメンタルモデルがより強く、作業速度も遅かったので、切り替わりはここまで急激ではなかった
    • 結局、コードを自分で見て、ロジックがあちこちに重複しておらず、実際に保守可能か確認する必要がある
      コーディングモデルはカプセル化を破る近道を選んだり、重複してはいけないコードを複製したりする傾向が強い
  • これは見せびらかし性能プログラミングと呼びたい。性能は好きだしビルド時間も0秒に近いべきだが、今や収穫逓減の領域に入っており、現在のボトルネックはビルド時間ではないはず
    • Bun 開発者たちはインクリメンタルコンパイルを活用できない状況で実際に長い待ち時間を経験しているので、これには同意しないだろう: https://zackoverflow.dev/writing/i-spent-181-minutes-waiting...
      大きなプロジェクトでは、テスト実行や意味エラー確認のたびに何分も待つことはできないので、ビルド時間は明確なボトルネック
    • こうしたプロジェクトには高速ビルドが必須であり、保守を容易にする重要なステップだと思う
  • コード品質を重視する人が管理する Bun なら歓迎だが、ヘラクレス級の難事業
    • ヘラクレス級というより、終わりなく繰り返されるシーシュポス級の作業に近い
  • 正反対に、AI の貢献だけを受け付ける Zig フォークも見てみたい
    AI を強く支持しているからというより、コンセプチュアルアートや実験として、2つのプロジェクトがどう異なる進化をするのか見ると面白そうだ
  • 関連性の高いCrullerも、書き換え前の Bun コードベースを使っているが、本番用ランタイム部分だけに集中している
    リンク: https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
    HN 議論: https://news.ycombinator.com/item?id=49017344
  • Bun がなぜこんなに話題なのか分からない。普通に Node + npm + Vitest + Vite に戻ればよいのではないかと思う
    • Bun の利点を Node に提供しようとするNubプロジェクトがあり、人々が Bun を好む理由と既存ツールとのギャップもよく示せるはず
      https://nubjs.com
    • まさにその列挙こそが話題になる理由だ。数多くのツールを組み合わせる代わりに、必要なことをすべて処理する単一ランタイムを使える
      目的別ツールを組み合わせるのも問題ではないが、デフォルト状態であらゆる問題が解決されているほうが非常に便利。Bun バンドラーにはランタイム API もあり、アセットを提供する同じプロセスが外部バンドラーと調整したり静的ファイルをディスクに書いたりせず、メモリ上でそのままバンドルできる
    • 4つのツールを列挙しなければならないという事実自体が、既存の状況がどれほど悪いかを示している
    • 今となっては、npm を使い続ける理由もはっきりしない