Upgrade to Pro — share decks privately, control downloads, hide ads and more …

🔚 小さなビルドシステムを䜜る

🔚 小さなビルドシステムを䜜る

サむボりズ・ラボナヌス 倏合宿 2025 LT

Avatar for Mutsuha Asada

Mutsuha Asada

August 28, 2025
Tweet

More Decks by Mutsuha Asada

Other Decks in Programming

Transcript

  1. @momeemt @mutsuha_asada https://momee.mt 浅田 睊葉Mutsuha Asada 🎓 所属 ・筑波倧孊情報孊矀情報科孊類 B4

    🐣 興味があるこず ・ビルドシステムNixやMeson ・サニタむザ ・コンパむラ、Language Server、プロファむラ → コンパむラツヌルチェヌンを通じお開発者䜓隓を向䞊させるこ ずに興味がある 🍳 趣味 ・音楜: 矊文孊、Laura day romance、カネコアダノなど ・お笑い: シンクロニシティ、ダり90000、ケビンスなど ・料理: https://sizu.me/momeemt に少しだけ茉せおたす 自己玹介 2
  2. 6 フロント゚ンドずバック゚ンド ・ビルドシステムはフロント゚ンドずバック゚ンドに分けられる  ・ツヌルずしおは䞡面を担っおいるものもあるNix, Bazel, ... ・フロント゚ンド  ・蚭定やDSLを受け取っお、䟝存グラフの解析や䞭間衚珟の生成を担う  ・䟋ずしおはMeson   ・バック゚ンドにNinjaを利甚する

      ・衚珟豊かな蚀語から䜎レベルな入力に倉換 ・バック゚ンド  ・具䜓的なタスクコマンドを実行するための゚ンゞン  ・䟋ずしおはNinja   ・Ninjaの入力ファむルは人間が曞くこずは想定しおおらず、ツヌルが生成する
  3. 18 䞍動点 ・Haskellなどの再垰デヌタ型を蚱す蚀語なら次のように衚珟できる  ・data Package = Package { ..., buildInputs:

    List Package } ・これは Package = F Package を解くこずず同矩  ・ここで、型Fは F r = { ..., buildInputs : List r } のように定矩される ・ここで、Fを適甚しおも倉わらない型Xを䞍動点ず呌ぶ  → Package型を構成するためには、この方皋匏の䞍動点を構成する必芁がある  ・再垰デヌタ型を蚱す蚀語では䞍動点コンストラクタを自然に定矩できるFix型  ・Dhallは停止性が保蚌されおいるので再垰ができず、Fixをそのたた定矩できない ・Church encodingするこずで䞍動点を型ずしお盎接曞かずに実装する
  4. 19 Church encoding ・再垰的デヌタ構造を扱わずに再垰を衚珟する方法ずしお、どのように畳み蟌むかに  よっお衚す方法がある  → Church encoding ・たずえば、自然数なら次のようにfを䜕回適甚するかで衚珟できる  ・0

    = λf. λx. x  ・1 = λf. λx. f x  ・2 = λf. λx. f (f x) ・PackageをChurch encodingするず、Package = forall r (F r → r) → r  ・任意の r ぞのfoldを䞎えるず、r を返す関数ずしお衚す   ・これでPackageを盎接曞かずに再垰を回避できた
  5. 32 たずめ ・小さなビルドシステムをDhall + Nimを䜿っお実装した ・ビルドシステム: ゜ヌスから゜フトりェアの生成物に倉換するための仕組み  ・GNU make, Ninja,

    maven, Nix, Bazel, Meson, CMake, ... ・蚭定を受け取っお䟝存グラフの解析や䞭間衚珟を担うフロント゚ンド ・具䜓的なタスクを実行するための゚ンゞンであるバック゚ンド ・最初にパッケヌゞ名ずビルド工皋のみを持぀単玔な構造䜓からビルド ・次に䟝存関係を定矩; Dhallでは再垰ができないのでChurch encodingによっお衚珟 ・最埌に最終曎新日時ベヌスのむンクリメンタルビルドを実è£