Native Compiler — o‘zi ishlayotgan platforma yoki bevosita mo‘ljallangan platformaning machine code’ini hosil qiladigan compiler. Ko‘pincha host va target architecture hamda operatsion tizim bir xil bo‘ladi.
Kompilyatsiya bosqichlari
Front-end source tilni IRga aylantiradi, optimizer targetdan qisman mustaqil o‘zgartirishlar qiladi, backend esa local ISA instructionlarini tanlaydi. Assembler object fayl, linker executable yoki shared library yaratadi.
CPU xususiyatlari
Native build targetning CPU featurelaridan foydalanishi mumkin. -march=native build mashinasidagi SIMD va instruction extensionlarni yoqadi; binary boshqa eski CPUda illegal instruction bilan yiqilishi mumkin. Tarqatiladigan paket odatda minimal baseline yoki runtime dispatch ishlatadi.
AOT va JIT
JIT compiler ham ishlayotgan mashina uchun native code hosil qiladi, ammo runtime paytida profile asosida qayta kompilyatsiya qilishi mumkin. Ahead-of-time native compiler esa artefaktni oldindan yaratadi. Ikkalasining startup, portability va optimization muvozanati turlicha.
Platforma shartlari
“Native” atamasi avtomatik ravishda system call yoki ABI to‘g‘ri degani emas. Target OS SDK, runtime va linker optionlari mos bo‘lishi kerak. Static yoki dynamic runtime tanlovi deployment hamda litsenziyaga ta’sir qiladi.
Bootstrap
Bootstrap jarayonida compilerning oldingi versiyasi yangi compiler source’ini native tuzishi mumkin. Reproducible yoki diverse double compilation trust muammolarini tekshirishda qo‘llanadi. Self-hosting til uchun stage natijalari solishtiriladi.
Sinov
Sinov generated binary architecture va dependencylarini tekshiradi, supported CPUlarda ishga tushiradi va reference interpreter bilan natijani solishtiradi. Performance benchmark warm-up hamda system noise nazoratida bajariladi.
Native benchmark build optionlari, CPU governor, microarchitecture va thermal holat bilan qayd etiladi. -march=native natijasi umumiy downloadga tasodifan chiqmasligi uchun packaging pipeline target baseline’ni tekshiradi.
+## Amaliy boshqaruv
Native Compiler production pipeline’da deterministik bo‘lishi kerak. Bir xil input, target va optionlar bir xil muhim metadata hamda qarorni hosil qiladi. CPU feature, PIE va security hardening tartibi hash yoki outputga tasodifiy ta’sir qilsa cache va regressiya tahlili ishonchsiz bo‘ladi. Shu sabab traversal tartibi, identifier va serialized yozuvlar barqarorlashtiriladi; vaqt, mutlaq path yoki processga xos qiymatlar remap qilinadi.
Muhim xato sinfi — build CPU xususiyatini umumiy binaryga tasodifan kiritish. Bunday holatda vosita optimistik taxmin bilan davom etmaydi: zarur bo‘lsa sekinroq, lekin xavfsiz yo‘l tanlanadi yoki aniq diagnostika bilan jarayon to‘xtatiladi. Xatoni qayta ishlab bo‘ladigan qilish uchun target, optionlar, kirish identifikatori va tegishli metadata qayd etiladi. Foydalanuvchi ma’lumoti xom shaklda loglanmaydi; hash, build-id yoki cheklangan kontekst yetarli bo‘lgan joyda shular ishlatiladi.
Sifat nazorati turli CPU baseline va optimization levelda differential test orqali bajariladi. Testlar normal misol bilan cheklanmay, bo‘sh kirish, minimal va maksimal o‘lcham, mos kelmaydigan versiya, yo‘qolgan komponent hamda parallel holatlarni qamraydi. Natijaning to‘g‘riligi performance o‘lchovidan alohida baholanadi. Keyin vaqt, xotira, artefakt hajmi yoki runtime kechikishi kabi mavzuga mos metrikalar baseline bilan solishtiriladi. Regressiya topilsa, minimal takrorlanuvchi holat saqlanib, keyingi release uchun doimiy testga aylantiriladi.
Release matritsasi minimal CPU baseline, recommended feature variant va operatsion tizim versiyasini alohida ko‘rsatadi. Dispatcher testi specialized function tanlovini qayd etadi va feature mavjud bo‘lmagan emulator yoki eski qurilmada baseline yo‘lini majburan tekshiradi.
Bog‘liq tushunchalar
machine code, ahead-of-time compilation, JIT compiler, target architecture, toolchain, executable