Bosh sahifa Wiki Generated code

Generated code

Generated code — dasturchi bevosita yozish o‘rniga schema, model, interfeys tavsifi yoki boshqa source’dan vosita avtomatik hosil qiladigan source yoki konfiguratsiya kodidir. Protocol binding, API client, ORM model, parser va serialization classlari keng tarqalgan misollardir. Generatsiya takroriy ishni kamaytiradi va bir manbadan bir nechta platforma uchun izchil artefakt yaratadi.

Manba va generator

Generated faylning haqiqiy source of truth’i odatda .proto, OpenAPI hujjati, database schema yoki template hisoblanadi. O‘zgarish shu manbaga kiritilib, generator qayta ishlatiladi. Generated outputni qo‘lda tahrirlash keyingi generatsiyada yo‘qoladi va manba bilan drift hosil qiladi.

Generatorning versiyasi, pluginlari, optionlari va runtime dependencylari build inputidir. Bir xil schema yangi generator bilan boshqacha API yoki format hosil qilishi mumkin. Toolchain lock va changelog compatibilityni boshqaradi.

Repositoryda saqlash

Generated kodni commit qilish consumerga generator o‘rnatmasdan build qilish, diff review va source distributionni soddalashtirishi mumkin. Kamchiligi katta diff, merge conflict va outputning eskirib qolishidir. Commit qilmaslik repositoryni toza saqlaydi, lekin build hermetik generator va dependencyga tayanadi.

Tanlov loyiha tarqatish modeli va tool availabilityga bog‘liq. Agar output commit qilinsa, CI source’dan qayta generatsiya qilib git diff bo‘shligini tekshiradi. Shunda qo‘lda o‘zgarish yoki unutilgan generatsiya aniqlanadi.

Xavfsizlik

Generator build vaqtida code execution huquqiga ega. Noma’lum plugin yoki package install hook supply-chain xavfi bo‘lishi mumkin. U immutable versiya va hash bilan olinadi, sandboxda minimal tarmoq hamda secret ruxsati bilan ishlaydi.

Schema ham ishonchsiz input bo‘lishi mumkin. Zararli field nomi template escapingni buzib, generated source’ga kod kiritishi mumkin. Generator identifierni sanitize qiladi, parser limit qo‘llaydi va output compile testdan o‘tadi.

API va compatibility

Generated public API generator qaroriga bog‘liq. Field rename method nomini o‘zgartirib consumerlarni buzishi mumkin, hatto wire field ID o‘zgarmasa ham. Schema evolution qoidasi source va generated API compatibilityni alohida baholaydi.

Custom logic generated class ichiga yozilmaydi. Partial class, extension, wrapper yoki alohida implementation interface orqali saqlanadi. Bu regeneration paytida biznes kodini yo‘qotmaydi va generatorga couplingni kamaytiradi.

Review va sifat

Generated fayl hajmi katta bo‘lsa har satrni qo‘lda review qilish amaliy emas. Review source schema, generator version diff va representative outputga e’tibor beradi. Static analysis generated pathni butunlay chiqarib tashlasa haqiqiy vulnerability yashirilishi mumkin; qoida shovqinni boshqaradigan alohida profilga ega bo‘ladi.

Header fayl generated ekanini, qaysi source va tool yaratganini ko‘rsatadi, lekin nondeterministic timestamp reproducibilityni buzmasligi kerak. Build provenance generator identityni artefaktga bog‘laydi.

Deterministik generatsiya

Bir xil schema va generator konfiguratsiyasi bir xil output berishi review va cache uchun muhim. Map yoki file traversal tartibi sort qilinadi, absolute path va vaqt outputga kiritilmaydi. Formatlash generatorning o‘zida yoki mahkamlangan formatter bilan bajariladi.

Generator parallel ishga tushganda bir xil global faylga yozmasligi kerak. Har target alohida output directory oladi, keyin build tizimi kerakli artefaktni yig‘adi. Partial failure eski generated faylni yangi deb qoldirmasligi uchun temporary directory va atomic replace ishlatiladi. Schema’dan fayl olib tashlansa stale output ham tozalanadi; faqat ustiga yozish eski classni tasodifan buildga qoldirishi mumkin.

Bog‘liq tushunchalar

Code generation, Schema, Compiler, Build system, Source code, API client, Reproducible build