
Zig. կառուցման համակարգը վերամշակվեց՝ կոնֆիգուրացիան կատարումից առանձնացվեց
Zig-ի devlog-ում նկարագրվում է կառուցման համակարգի մեծ վերամշակում, որը build.zig-ի կոնֆիգուրացիան առանձնացնում է գրաֆի կատարումից։ zig build -h-ի ժամանակը նվազել է մոտ 90%-ով։
Zig նախագիծը կառուցման համակարգում մեծ փոփոխություն է մտցրել՝ կառուցումը կոնֆիգուրացնող գործընթացը առանձնացվել է այն կատարող գործընթացից։ Լեզվի ստեղծող Էնդրյու Քելլին այս ճյուղը նկարագրել է նախագծի devlog-ում որպես առաջիկա թողարկման նշումների նախադիտում և նախազգուշացում նրանց համար, ովքեր ուզում են փոփոխությունը փորձարկել մինչև Zig 0.17.0-ի թողարկումը։
Configurer և maker
Նախկինում build.zig ֆայլերը և կառուցման համակարգի իրականացումը կոմպիլվում էին մեկ ուռճացված գործընթացում՝ Debug ռեժիմով. երբ սկրիպտը հիշողության մեջ կառուցում էր գրաֆը, այն կատարում էր build runner կոդը։ Այժմ սկրիպտը կոմպիլվում է փոքր գործընթացում՝ configurer-ում, որը նույնպես աշխատում է Debug ռեժիմով։ Երբ գրաֆը պատրաստ է, այն սերիալիզացվում է բինար կոնֆիգուրացիայի ֆայլում, որը մայր zig build գործընթացը քեշավորում է։ Այդ ընթացքում Zig-ը ասինխրոն կերպով, օպտիմիզացիաներով կոմպիլում է գրաֆը կատարող գործընթացը՝ maker-ը։ Ապա maker-ը կատարում է սերիալիզացված գրաֆը։
Գլոբալ քեշի շնորհիվ maker-ը պետք է կոմպիլվի միայն մեկ անգամ Zig-ի յուրաքանչյուր տարբերակի համար։ Բաժանման երեք նպատակ կար. ամեն փոփոխության դեպքում կոմպիլվում է միայն օգտվողի build.zig տրամաբանությունը, այլ ոչ ամբողջ կառուցման համակարգը, ինչը կարևոր է --watch, --fuzz և --webui-ի առկայության դեպքում. համակարգը կարող է ընդհանրապես բաց թողնել սկրիպտի կրկնակի կատարումը, երբ գիտի, որ ոչինչ չի փոխվի. և գրաֆը կատարող գործընթացը կոմպիլվում է օպտիմիզացիաներով։
Չափումներ. 150 մվ ընդդեմ 14 մվ
Չափված ազդեցությունը կտրուկ է. zig build -h հրամանը փոփոխությունից առաջ միջինը տևում էր 150 մվ, իսկ հետո՝ 14,3 մվ, այսինքն՝ մոտ 90,4%-ով պակաս։ CPU ցիկլերը նվազել են 95,9%-ով, ինստրուկցիաները՝ 95,6%-ով, գագաթնակետային հիշողությունը՝ 7,4%-ով։ Պատճառը քեշավորված սերիալիզացված կոնֆիգուրացիայի կրկնակի օգտագործումն է՝ ամեն կանչի ժամանակ սկրիպտը կրկին չկատարելու փոխարեն։
Ինչ է փոխվում և ինչ է սպասվում
Արտադրողականությունից բացի, հեղինակը ակնկալում է, որ երրորդ կողմի գործիքները, օրինակ ZLS-ը, կշահեն սերիալիզացված կոնֆիգուրացիան կարդալուց՝ build runner-ի fork-ը պահելու փոխարեն։ Փոփոխությունը խորապես վերամշակում է ներքին մեխանիզմները, սակայն API-ի մակարդակում գրեթե չի խախտում համատեղելիությունը. բացառությունները նշված են pull request-ում։ Ամենանկատելին. կառուցման սկրիպտերն այլևս չեն կարող b.args-ով կարդալ հրամանի տողի արգումենտները և փոխարենը փոխանցում են դրանք run_cmd.addPassthruArgs()-ով, ինչը վերացնում է մեկ հնարավորություն, բայց նշանակում է, որ այդ արգումենտների փոփոխությունը սկրիպտի վերակոմպիլացում չի պահանջում։
Zig 0.17.0-ը սպասվում է մի քանի շաբաթից, իսկ ուղղումների համար տեղ կմնա նաև 0.17.1-ում։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։