Nix-Ninja Hadirkan Kompilasi Inkremental ke Nix Menggunakan Derivasi Dinamis

BigGo Editorial Team
Nix-Ninja Hadirkan Kompilasi Inkremental ke Nix Menggunakan Derivasi Dinamis

Ekosistem open-source Nix sedang menyaksikan perkembangan menarik dengan hadirnya nix-ninja, sebuah alat yang menjanjikan revolusi dalam alur kerja kompilasi dengan memanfaatkan fitur eksperimental derivasi dinamis dari Nix. Inovasi ini telah memicu minat yang signifikan di komunitas pengembang, terutama di antara mereka yang bekerja dengan sistem build yang kompleks.

Derivasi Dinamis: Jalan Menuju Rilis Stabil

Salah satu aspek yang paling banyak dibahas dalam komunitas adalah jadwal untuk menstabilkan derivasi dinamis di Nix. Saat ini, nix-ninja bergantung pada fitur eksperimental dari versi Nix yang belum dirilis, yang menimbulkan pertanyaan tentang kapan fitur-fitur ini mungkin akan didukung secara resmi.

Seorang pengembang inti Nix yang terlibat dengan derivasi dinamis telah memberikan kejelasan tentang roadmap, menjelaskan bahwa derivasi dinamis bergantung pada derivasi berbasis konten, yang telah berada dalam status fitur eksperimental untuk beberapa waktu. Namun, dengan upaya yang terfokus dan manajemen ruang lingkup, stabilisasi dapat dicapai dalam waktu dekat. Pengembang tersebut menggambarkan pekerjaan yang tersisa sebenarnya tidak terlalu banyak meskipun merupakan serangkaian yak shaves - istilah yang mengacu pada rangkaian tugas yang tampaknya tidak terkait yang harus diselesaikan sebelum menangani tujuan utama.

Potensi Performa untuk Build Kompleks

Implikasi performa dari nix-ninja sangat menjanjikan. Alat ini bertujuan untuk memungkinkan kompilasi inkremental yang benar-benar efisien, di mana mengubah satu file C/C++ di mana pun dalam grafik build hanya akan memerlukan kompilasi ulang file tersebut dan menautkan kembali hanya executable atau shared library yang terpengaruh.

Meskipun masih dalam pengembangan, pengujian awal menunjukkan bahwa overhead sandboxing Nix dapat diabaikan untuk tugas kompilasi inkremental. Namun, beberapa fitur masih belum tersedia, seperti penanganan yang tepat untuk target yang bergantung pada file sumber yang dihasilkan (seperti parser bison Nix), yang saat ini sedang ditindaklanjuti sebagai masalah terbuka.

Tujuan jangka panjang adalah jika Anda tidak mengubah header dan hanya mengubah satu file C/C++, di mana pun dalam grafik build untuk seluruh sistem, Anda seharusnya mendapatkan kompilasi ulang yang cepat hanya untuk file tersebut + menautkan kembali hanya executable/shared library yang menggunakan file objek output tersebut.

Fitur Utama nix-ninja

  • Mengurai file ninja.build dan menghasilkan derivasi per unit kompilasi
  • Menyimpan input & output build dalam derivasi berbasis konten untuk inkrementalitas yang terperinci
  • CLI yang kompatibel untuk ninja (dapat digunakan sebagai pengganti langsung)
  • Mendukung menjalankan secara lokal atau di dalam derivasi Nix

Persyaratan

  • Nix dengan fitur eksperimental yang diaktifkan:
    • nix-command
    • dynamic-derivations
    • ca-derivations
    • recursive-nix

Tonggak Pengembangan

  • 0.1.0: Rilis pertama yang berfokus pada kebenaran
  • 0.2.0: Fitur performa utama untuk membuat build inkremental lebih produktif

Fokus Strategis pada File Build Ninja

Para pengembang memilih untuk menargetkan file build Ninja secara khusus, yang terbukti menjadi keputusan strategis. Dengan mendukung Ninja sebagai representasi grafik build, nix-ninja dapat bekerja dengan banyak sistem build populer seperti CMake, meson, premake, dan gn yang menghasilkan file Ninja.

Pendekatan ini sangat relevan untuk komunitas Nix karena Nix sendiri menggunakan meson dan menghasilkan file Ninja. Pilihan ini memungkinkan pendekatan inkremental dan dapat dikontribusikan oleh banyak pihak untuk meningkatkan performa build di seluruh ekosistem, dimulai dengan proyek besar seperti LLVM dan Chromium yang akan paling diuntungkan dari kompilasi inkremental.

Sementara nix-ninja terus berkembang menuju tonggak 0.1.0 yang berfokus pada kebenaran dan rilis 0.2.0 berikutnya yang menargetkan fitur performa, proyek ini merepresentasikan langkah yang menjanjikan menuju pembuatan build Nix yang lebih efisien tanpa memerlukan penulisan ulang besar-besaran dari sistem build yang ada. Bagi pengembang yang bekerja dengan basis kode yang kompleks, alat ini dapat secara signifikan meningkatkan produktivitas dengan mengurangi waktu kompilasi dan menyediakan inkrementalitas yang lebih terperinci melalui derivasi berbasis konten Nix.

Referensi: nix-ninja