Native extension — yuqori darajali til runtime’iga mashina kodida kompilyatsiya qilingan modulni ulaydigan komponentdir. U odatda C, C++, Rust yoki boshqa tizim tilida yozilib, tilning modul importi yoki foreign function interface’i orqali chaqiriladi. Native extension apparatga yaqin unumdorlik, mavjud tizim kutubxonasidan foydalanish yoki operatsion tizim funksiyalariga kirish uchun yaratiladi.
Til chegarasidagi interfeys
Extension runtime’ning C API’si, barqaror ABI’si yoki umumiy FFI mexanizmidan foydalanadi. Yuqori darajali qiymat native funksiyaga uzatilganda son, satr, massiv va obyektlar mos xotira ko‘rinishiga aylantiriladi. Natija qaytishda teskari konversiya bajariladi. Bu marshalling xarajati kichik amallarni tez-tez chaqirishda hisoblash yutug‘ini yo‘qqa chiqarishi mumkin; shuning uchun ishni yirik bloklarda uzatish ko‘pincha samaraliroq.
Obyekt hayot sikli ikki xotira boshqaruvi tizimi orasida muvofiqlashtiriladi. Garbage collector ko‘rmaydigan native ko‘rsatkich erta bo‘shatilgan obyektga murojaat qilmasligi kerak. Aksincha, reference count yoki handle vaqtida bo‘shatilmasa xotira sizadi. Buffer bilan nol nusxali almashish tez, lekin egalik, o‘zgartirish va hizalanish qoidalarini aniq talab qiladi.
Oqimlar va xatolar
Ayrim runtime’larda interpreter lock native chaqiruv davomida ushlab turiladi. Uzoq hisoblash yoki bloklovchi I/O paytida lockni hujjatlashtirilgan API orqali vaqtincha bo‘shatish boshqa oqimlarning ishlashiga imkon beradi. Biroq runtime obyektlariga lock yo‘q holatda tegish xavfli. Native kutubxonaning o‘zi ham thread-safe ekanligi alohida tekshiriladi.
Tizim tilidagi xato yuqori darajali istisnoga aniq tarjima qilinadi. C++ istisnosini C ABI chegarasidan nazoratsiz o‘tkazish yoki native stackdan runtime’ga noto‘g‘ri qaytish jarayonni buzishi mumkin. Signal, panic va resurs tozalash yo‘llari har bir platformada sinovdan o‘tkaziladi.
Tarqatish va xavfsizlik
Native modul protsessor arxitekturasi, operatsion tizim, C kutubxonasi va runtime ABI versiyasiga bog‘liq bo‘lishi mumkin. Paketlar platformaga mos wheel yoki boshqa binar artefakt sifatida chiqariladi, mavjud bo‘lmasa manbadan build qilinadi. Reproduktiv build, symbol visibility va dependency versiyalarini nazorat qilish moslik muammolarini kamaytiradi.
Native kod odatda runtime sandboxi va xotira xavfsizligi kafolatlaridan tashqarida ishlaydi. Buffer overflow, use-after-free yoki noto‘g‘ri ko‘rsatkich butun jarayonni qulatishi va xavfsizlik zaifligiga aylanishi mumkin. Fuzzing, sanitizerlar, statik tahlil va aniq chegara testlari muhim. Modul minimal tizim vakolatlarida ishlaydi, binar kelib chiqishi va nazorat summasi tekshiriladi. Unumdorlik foydasi profiler bilan tasdiqlanmasa, sof til modulining portativligi va xavfsizligi afzal bo‘lishi mumkin.
Versiyalash va fallback
Runtime’ning ichki obyekt tuzilmasiga bog‘langan extension kichik versiya o‘zgarishida qayta build talab qilishi mumkin. Barqaror cheklangan API’dan foydalanish tezlikning bir qismini yo‘qotsa ham, bir binarning ko‘proq versiyada ishlashini ta’minlaydi. Paket menejeri artefakt teglaridan operatsion tizim, arxitektura va runtime mosligini tanlaydi; noto‘g‘ri binarni yuklash import xatosi yoki jarayon qulashiga olib keladi. Muhim kutubxona imkon qadar sof tildagi sekinroq fallback saqlasa, yangi platformada funksionallik butunlay yo‘qolmaydi. Benchmark ikkala yo‘lning qaysi o‘lchamdan boshlab foydali ekanini ko‘rsatadi.
Native chaqiruv jarayonni qulatishi mumkinligi sabab, ishonchsiz format parserini alohida yordamchi jarayonda ishlatish ma’qul. IPC qo‘shimcha xarajat beradi, evaziga crash va xotira buzilishi asosiy xizmatdan izolyatsiyalanadi.
Bog‘liq tushunchalar
FFI, ABI, Runtime, Memory safety, Garbage collection, Shared library, Package distribution