Show HN:静的型付けに対応し、クロスプラットフォームで簡単に設定可能なビルドシステム

2026/07/01 1:28

Show HN:静的型付けに対応し、クロスプラットフォームで簡単に設定可能なビルドシステム

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

要約

Japanese Translation:

BUSY は、重い依存関係マネージャーに代わりつつ最小限のシステム要件で動作する、軽量かつクロスプラットフォーム向けのビルドシステムとして登場しました。GN と同様に動作し、標準コンパイラ(GCC、Clang、MSVC など)を使用してホストシステムを前提とせずにソースツリーからプロジェクトを一から生成するために直接統合されます。ユニークな点として、Lua VM を基盤としながら C89 で書かれており、数百 KB の小さな実行可能ファイルを提供し、Python や重い外部ツールへの依存を排除していますが、Ninja と互換性を持ち高速なビルドサイクルを維持しています。BUSY は静的型付けされたファイルをパスカールスタイルまたは C スタイルの構文を通じて読み込み、解析、実行の 3 つの段階に分けて効率的に複雑なビルドを処理します。Meson や QMake のようなツールとは小ささを特徴とする点で異なります。NAppGUI や LeanQt IDE(Qt の moc/rcc ツールをサポート)といったプロジェクトでの成功実績があります。今後の計画には、CMake バックエンドの追加、ARM Cortex-A7 などの特定のハードウェアターゲット向けの最小版リリース、Ninja/CMake サポートの実装が含まれます。システムオーバーヘッドの削減が不可欠なクロスコンパイルタスクへの理想的な選択としての役割を果たす一方、言語、パッケージマネージャー、Git クライアント、ライブラリダウンローダー、C プレプロセッサ、またはテストフレームワークではないことが非目標として明確にされています。

本文

BUSY ビルドシステム入門

**BUSY(BUild SYstem)**は、GCC、Clang、MSVC のツールチェーンに対応した軽量なクロスプラットフォーム・ビルドシステムです。

主な特徴と背景

  • 低依存性: システムへの要件が極めて低く、容易にセルフ・ブートストラップ可能です。
  • 静的型付け: CMake や Meson、GN などの動的スクリプト言語とは異なり、静的型付けされたビルド仕様言語を採用しています。
  • ゼロから構築: ホストシステムへの追加要件を求めず、プロジェクトからゼロでコンパイル可能です。
  • 統合性: 軽量化が進んでおり、プロジェクトのソースツリーに直接統合することも可能です。

サンプルプロジェクト: NAppGUI

  • Francisco García 氏による大規模なクロスプラットフォーム GUI ライブラリ(C89/C++98/Objective-C)。
  • 詳細は README を参照してください。

シンタックスと記法例

BUSY は Lua の文脈に統合されています(実装言語は C89)。構文は柔軟で、Pascal 風スタイルや Lua 風の両方が利用可能です。

トップレベル構成例

トップレベルの BUSY ファイルでは、主要なターゲットを定義します。

submod src

let shared_lib* = src.shared_lib
let static_lib* = src.static_lib

let all! : Group {
    .deps = [ shared_lib static_lib ]
}
# 上記 'all' のように ! を付けることでデフォルトビルド対象を指定

ソースファイル定義例 (
src
)

コンパイルに必要な設定や、ソースの実体部を定義します。

let main_config : Config {
    .include_dirs += [ ./geom2d ./osbs ./sewer ]
    .defines += [ 
        "NAPPGUI_LIBRARY" 
        "NAPPGUI_BUILD_DIR=\"" + tostring(root_build_dir) + "\""
        "NAPPGUI_BUILD=" + readstring('../prj/build.txt') 
    ]
}

submod core
submod draw2d

let all_lib_sources : Group {
    .deps = [
        core.sources
        draw2d.sources
    ]
}

let static_lib* : Library {
    .name = "NAppGUI"
    .lib_type = `static
    .deps = [ all_lib_sources ]
}

オペレーティングシステム判定例 (
draw2d
)

プラットフォームごとの依存関係やソースを切り分けできます。

submod gtk3

let sources* : SourceSet {
    .sources = [
        ./draw2d.cpp 
        ./drawg.cpp 
        ./btext.c 
    ]
    .configs += ^main_config
    
    if target_os == `linux {
        .deps += gtk3.sources
    } else if target_os == `win32 {
        # Windows 固有の設定
    } else {
        error("target os not supported")
    }
}

Pascal 風スタイルもサポートされます。

let sources* : SourceSet 
begin
    .sources := [ ./draw2d.cpp, ./drawg.cpp, ./btext.c ]
    if target_os == `linux then
        .deps += gtk3.sources
    elif target_os == `win32 then
        # ...
    else
        error("target os not supported")
    end
end

実行方法

ビルドの実行

通常、

build.lua
スクリプトを実行します。これは C で実装された Lua のファサードであり、必要に応じて Lua スクリプトで拡張可能です。

デフォルトコマンド:

lua build.lua
  • ソースツリールート:
    ..
  • ビルド出力先(デフォルト):
    ./output

コマンドラインオプション

オプション説明
-S <パス>ソースディレクトリのルートパスを明示的に指定します。
-B <パス>ビルド出力ディレクトリのルートパスを明示的に指定します。
-T <製品名>構築すべき特定の製品を選択します(複数可)。
例:
-T my_lib
-P <パラメータ>=<値>バラメータ値を設定します。
例:
-P "string_val=\"test\""
または
-P symbol=\
abc``
-M <モード>ビルドモードを設定します(デフォルトは最適化)。
例:
-M debug
-opt
-nopt
-dbg
-cパーサのみを実行してチェックするのみ(ビルドはスキップ)。
-G <バックエンド>他システム向けのコード生成。
例:
-G qmake
(QtCreator 向けプロジェクト生成)

注意:

build.lua
を直接実行せず、サブディレクトリに置いた状態から
-S .
などを用いても構いません。

言語仕様と設計思想

基本構成

  • ファイル名:
    BUSY
    または
    BUSY.busy

    両方が存在する場合、BUSY が優先されます。
  • モジュール宣言:
    submod <ディレクトリ>
    を使用し、対応するディレクトリに関連付けます。
  • 可視性ルール:
    • デフォルト: モジュール内でしか参照できない。
    • パブリック (
      *
      ): 外部またはネストされたモジュールから参照可能。
    • 保護 (
      -
      ): ネストされたモジュールのみ参照可能。

プリdeclares(基本型とグローバル変数)

BUSY は静的なデータ構造に基づいており、以下のプリ declares タイプを使用します。

  • 基本型:
    bool
    ,
    int
    ,
    real
    ,
    string
    ,
    path
    ,
    symbol
  • 列挙型:
    • LibraryType* = (
      static,
      shared, 
      framework)`
  • クラス型例:
    type Config* = class { 
        cflags : string[]
        defines: string[]
        include_dirs: path[]
        configs: Config[] 
    }
    

クラス階層(継承)

「魔法のクラス」が存在せず、通常の構文で定義された標準的なクラス継承です。

class Product {
    deps: Product[] // 依存関係を表すフィールド
}

class Executable extends Product { }
class Library extends Product { }
class SourceSet extends Product { }

動作フェーズ(BAZEL に類似)

  1. ローディング: すべての BUSY ファイルを解析。
  2. 分析: ステートメントを実行し、ワークツリーを作成。
  3. 実行: ワークツリーを深さ優先順に実行(デフォルトは
    !
    でマークされたもの)。

グローバル変数と機能

  • 環境適応:
    • root_build_dir
      : ビルドディレクトリのパス。
    • host_os
      : ホスト OS タイプ(例:
      OsType
      )。
    • host_toolchain
      : コンパイラチェーン情報(例:
      CompilerType
      )。
  • 型変換:
    • 数字を文字列に変換するには
      tostring()
      を使用します。
    • 直接文字列代入はコンパイルエラーになります。

現在の機能と非目標 (Non-Goals)

動作確認済みプラットフォーム

  • Linux: x86, x86_64, ARMv7 (GCC)
  • Windows: Windows 10/7 x86/x64 (MSVC)
  • macOS: 10.11 - 12.2 (x86_64), M1 (CLANG)

今後の予定機能

  • ✅ レンタル Qt ソースツリーの実装(LeanQt)
  • ✅ QMake バックエンドの完成(Linux/Windows/macOS 対応)
  • 🚧 Ninja バックエンドの実装
  • 🚧 CMake バックエンドの実装
  • 🚧 チュートリアル作成

非目標 (Non-Goals)

以下の領域は BUSY の機能範疇外です。

  • 完全なプログラミング言語ではないため、それを目指しません。
  • パッケージマネージャーやジェネレータとしての機能はありません。
  • Git クライアントやテストフレームワークではありません。
  • ライブラリやツールの自動ダウンロード・検索機能はありません(ユーザーが提供するものを使用)。
  • C プリアンプレッサ機能(
    #include
    チェックなど)はありません。
  • Ninja の代替ではなく、ビルド可能コードベースのデプロイや高速な編集サイクル補助として位置づけられます。

実用的なクロスコンパイル例

x86 → ARM Cortex-A7 (Allwinner H3) 向け Linux クロスコンパイルは以下のコマンドで成功します:

lua build.lua ../LeanQt \
  -P target_toolchain_path=//home/me/toolchain/bin \
  -P HAVE_OBJECT \
  -P target_toolchain_prefix="arm-linux-gnueabihf-"

ビルド手順

BUSY のビルド自体は非常に簡素です。

  1. ソースコード取得: ビルドツリーを構築する前に、まず
    bus
    ツールチェーンと必要なライブラリを入手します。
  2. Lua インタプリタコンパイル:
    • Unix/MacOS/Linux:
      cc *.c -O2 -lm -o lua
      
    • Windows (MSVC):
      cl /O2 /MD /Fe:lua.exe *.c
      
  3. ビルド実行:
    • コンパイル結果(
      lua
      lua.exe
      )は、統合された Lua 実行可能ファイルとなり、
      build.lua
      をそのまま動作させます。

サポートとライセンス

ライセンス情報

  • Lua VM: Luiz Henrique de Figueiredo, Roberto Ierusalimschy, Waldemar Celes (MIT License)
  • OS/CPU/Toolchain 検出ロジック: Qt ソースコード由来 (LGPL/GPL)
  • GN の概念: Brett Wilson 他 (BSD-like License)

サポート連絡先

問題報告や機能リクエストは、以下の方法で送信できます。

  • GitHub Issues: BUSY/issues
  • メール: 著者宛てに直接連絡

同じ日のほかのニュース

一覧に戻る →

2026/07/04 7:40

巨大な木は問題なく水を上枝に送ることができます。

## Japanese Translation: エクセター大学とカーディフ大学が主導する新研究で、Science誌に発表された内容により、世界最高位の熱帯ティトロカルプ属(Dipterocarp)の樹木は、極めて高い位置での水分輸送課題を完全に補償できることが明らかになった。アジアの雨林を支配し、80 メートルを超える高さまで成長する巨大なティトロカルプ属の木々は、より低い木々に比べて旱魃に対する感受性を示さない。これは進化した水理学的適応によるものである。本研究は、2023 年~2024 年の激しいエルニーニョ現象を背景としてマレーシア・ボルネオで行われたものであり、7 メートルから 71 メートルの幅を持つ樹木が旱魃を通じて幹の成長速度を維持したことが見出された。これは、重力と導管の長さが高大型種における光合成および成長を制限するという長年の信念に挑戦するものである。より高いティトロカルプ属の木々は、地面付近で広く水分を運ぶ導管を持つことと、萎れる前により大きな水ストレスに耐えるように適応した葉を持つことによりこれを実現する。これらの適応は、80 メートル以上高く水を移動させるために必要な極めて低い圧力の下でも液体水の形態を維持することを可能にする。これらの結果は、特にアジアの地上バイオマス炭素の半分を貯蔵するティトロカルプ属森林において重要であり、水理学的システムが弱く高大型種では旱魃による急速な死に瀕するという以前の理論を矛盾させるものである。共同著者であるパウロ・ビッテンコート博士は、これらの希少樹木がマレーシア・ボルネオにおける生態学的中心性であることを強調しているが、研究者らは同様の特性を他の高大型樹種においても検討すべきであると指摘している。研究チームには、マレーシア、イギリス、チェコ共和国、ドイツ、スペイン、ブラジル、アメリカ合衆国の機関が含まれており、資金供与は自然環境研究評議会(NERC)からのものである。今後の研究では、ティトロカルプ属を超えた水理学的システムと旱魃耐性の調査を通じて、全球的な旱魃リスク評価および保全戦略を精査していく予定である。

2026/07/04 7:33

Leanstral 1.5:全データに対する証明の豊富さを実現

## Japanese Translation: Leanstral 1.5 は、60 億のアクティブパラメータと全パラメータとして 1190 億を持ち、競合製品のごく一部のコストで最先端のパフォーマンスを達成する無料の Apache-2.0 ライセンスモデルです。このモデルは miniF2F でサチュレーション(検証セットとテストセットで両方 100%)を達成し、PutnamBench の問題のうち 672 問中 587 問を解決します(25k トークンの予算では 44 問から、4M トークンの予算では 587 問へ向上)。FATE-H ベンチマークでは 87% の精度、FATE-X ベンチマークでは 34% の精度を達成しています。中学習(mid-training)、監督微調整、CISPO を用いた強化学習、特定の定理に対する安全性チェックを経て訓練された Leanstral 1.5 は、複数回のターンにわたる定理証明および生ファイルシステムでのコードエージェントにおけるエージェント型証明工学において卓越しています。ターゲットとなる定理のリストを用いて SafeVerify のフォーク版で検証され、このモデルは問題あたり約 $4 のコストがかかります(Seed-Prover の $300 以上や Aleph Prover の $54–68 に比べて著しく低く)、かつ大きなトークン予算と共によくスケーリングします。実際の運用では、オープンソースライブラリにおける微細なバグを検出し、57 リポジトリにわたって以前に知られていなかった 5 つのバグを発見しました。その例として、datrs/varinteger ライブラリにおいて `(value + 1)` が `Std.U64.MAX` 入力に対してオーバーフローした整数オーバーフローがありました。このモデルは Hugging Face で重みファイルおよび無料の API エンドポイント(leanstral-1-5)として利用可能です。ユーザーは Mistral Vibe(`uv tool install mistral-vibe`)で実行でき、Lean LSP MCP の設定をオプションで行うことで、その能力を活用し、高次の定理証明やバグ探索を行えるようにしながら、莫大なコストなしに動作させられます。

2026/07/04 6:49

AMD MI355X 上で GLM5.2 を実行し、コストは Blackwell よりも 2 倍以上低減してノードあたり 2626 トークン/秒を達成

## Japanese Translation: AMD の新しい Instinct MI355X アクセラレータは、NVIDIA の B シリーズ GPU に対して魅力的な代替手段を提供しており、B300 と比較して約 2.75 倍安い GPU 単価で同様のハードウェア仕様を備えています。また、B200 には 2 倍以上安いです。歴史的に CUDA エコシステムを通じて「day-0」の優位性を保持してきた NVIDIA ですが、AMD はこの格差を急速に縮めています。ROCm は当初、MI355X 上で GLM-5.2 のような frontier モデルに対してネイティブなサポートがなかったものの、ターゲットされた最適化によって B200 のノードあたり性能の約 80% を対価の少なさで実現しました。主要なブリークスルーとしては、AMD Quark を用いて損失のない MXFP4 量子化を実現し(公式の FP8 の制限を上回る)、出力劣化を伴わずに堅牢なネイティブ MXFP4 サポートのために sglang を選択し、モジュールプレフィックス不一致を修正したり、ROCm メタデータ カーネルガードを追加したりする特定のパッチを適用することで推測デコーディングの利点を解放(約 3 倍)した点があります。戦略的な構成チューニング(例えば TP4×DP2 への移行)や fp4 シェイプ用の MoE カーネルの最適化を通じて、カスタムカーネルを書かずにシングルノードデプロイメントで 2626 tok/s/node という SOTA の総通量を実現しました。この戦略は推論ワークロードに対して有効であり、AMD が NVIDIA の市場的地利を成功裏に侵食し、低コストで高計算能力を実現していることを示しています。また、マルチノードスケーリングに関する課題がまだ残るものの、よりバランスの取れた競争環境が育まれていることを意味します。