Build-System mit dynamischen Abhängigkeiten
Build-Systeme sind groß und kompliziert und werden von jedem Entwickler auf dem Planeten täglich benutzt. Sie unterscheiden sich in mehren Dimensionen und sind auf verschiedene Anwendungsszenarien zugeschnitten.
Ziel dieser Arbeit ist die Konzeption und Entwicklung eines Build-Systems, dass als Bibliothek in eine Anwendung eingebettet werden kann. Folgende Anforderungen sollen dabei erfüllt werden:
- Zur Implementierung wird die Rust Programmiersprache verwendet.
- Abhängigkeiten und Aktionen werden in Rust-Code angegeben. Falls notwendig können hier Macros eingesetzt werden.
- Aktionen können sowohl Rust-Funktionen, als auch externe Programme sein.
- Das System unterstützt statische und dynamische Abhängigkeiten (dynamische Abhängigkeiten entstehen erst bei der Ausführung einer Aktion).
- Das System kann schwache Abhängigkeiten modellieren, deren Änderung keinen neuen Durchlauf anstösst, deren Existenz aber überprüft wird.
- Das Build-Sytem ist minimal in dem Sinne, dass Aktionen nur einmal pro Durchlauf ausgeführt werden, und nur wenn sie von Daten abhängig sind, die seit dem letzen Durchlauf verändert wurden.
- Watch-Mode: Abhängigkeiten können kontinuierlich überwacht werden. Bei Änderung wird automatisch ein neuer Durchlauf angestoßen.
- Aktionen werden parallel auf mehreren Kernen ausgeführt.
- Die Entwicklung erfolgt quelloffen auf GitHub.
- Die Bibliothek wird auf crate.io veröffentlicht und auf docs.rs vollständig dokumentiert.
- Nachvollziehbares Release-Schema, dokumentierte Releases mit Change-Log und ordentliche Commit-Policy.
- Vernünftige Testabdeckung aller wesentlichen Funktionen.
Das entehende Build-System soll Teil einer Neuentwicklung des experimentellen Präsentations-Compilers Decker werden. Decker wird an mehreren Hochschulen zur Erstellung von Lehrmaterialien verwendet (an der BHT: CGG, PLC).
Links:
- A. Mokhov, N. Mitchell, S. Peyton Jones. Build Systems à la Carte
- Sigplan ICFP 2018, Build Systems à la Carte (YouTube)
- Shake ist ein in Haskell geschriebenes Build-System, das als Vorbild und Inspirationsquelle für dieses System angesehen werden kann.