Zig-ის განვითარების გუნდმა ენის აგების სისტემაში (build system) ფუნდამენტური ცვლილებები შეიტანა. მთავარი სიახლე ეხება „მშენებლის“ (maker) და „კონფიგურატორის“ (configurer) პროცესების გამიჯვნას, რაც სისტემის მუშაობას მნიშვნელოვნად აჩქარებს.

რა შეიცვალა აგების პროცესში?

ადრე build.zig ფაილები და აგების სისტემის ლოგიკა ერთიან, „მძიმე“ პროცესად კომპილირდებოდა Debug რეჟიმში. ახლა ეს პროცესი გაყოფილია: კონფიგურატორი პასუხისმგებელია გრაფიკის აგებაზე, ხოლო მშენებელი — მის შესრულებაზე. შედეგად, სისტემას შეუძლია დაზოგოს დრო და არ გაიმეოროს უკვე დამუშავებული ლოგიკა, თუ ცვლილებები არ მომხდარა.

ეს ცვლილება განსაკუთრებით მნიშვნელოვანია ისეთი ფუნქციების ეფექტურობისთვის, როგორიცაა --watch, --fuzz და --webui. ახლა დეველოპერებს შეუძლიათ ისარგებლონ დაჩქარებული კომპილაციით, რადგან სისტემა ხელახლა მხოლოდ მომხმარებლის მიერ შეცვლილ ლოგიკას აკომპილირებს და არა მთლიან ინფრასტრუქტურას.

LLVM-ის მხარდაჭერა და ტიპების რეზოლუცია

განახლება ასევე მოიცავს მნიშვნელოვან გაუმჯობესებებს LLVM-ის მხარდაჭერაში. დანერგილია ინკრემენტული კომპილაცია, რაც დეველოპერებს საშუალებას აძლევს, შეცდომები წამებში აღმოაჩინონ, ნაცვლად წუთებისა. ეს ფუნქცია უკვე ხელმისაწვდომია master branch-ში და ჩაერთვება 0.16.0 ვერსიაში.

გარდა ამისა, განახლდა კომპილერის შიდა ლოგიკა ტიპების რეზოლუციისთვის. 30 000-ზე მეტი ხაზის კოდის გადამუშავების შედეგად, კომპილერი ახლა უფრო „ზარმაცი“ გახდა: ის არ აანალიზებს იმ ტიპებს, რომლებიც რეალურად არ გამოიყენება. ეს ამცირებს კომპილაციის დროს და აუმჯობესებს დამოკიდებულებების მარყუჟების (dependency loops) შესახებ შეცდომების დეტალიზაციას.

მნიშვნელობა მომხმარებლებისთვის

მიუხედავად იმისა, რომ ცვლილებები ფუნდამენტურია, API-ის დონეზე თავსებადობა შენარჩუნებულია. თუმცა, ზოგიერთი ძველი ფუნქცია, რომელიც build სკრიპტებს არგუმენტებზე დაკვირვების საშუალებას აძლევდა, გაუქმდა. გუნდი მომხმარებლებს მოუწოდებს, გადავიდნენ განვითარების ვერსიაზე და დატესტონ ახალი სისტემა 0.17.0 რელიზის მოახლოებამდე.