Runtime — dastur bajarilayotgan paytdagi muhit va shu bajarilishni ta’minlaydigan xizmatlar to‘plami. Atama ba’zan vaqt oralig‘ini, ba’zan esa runtime system yoki runtime environmentni bildiradi.
Dastur compile vaqtida source code sifatida tekshiriladi va o‘zgartiriladi. Runtime’da esa haqiqiy input, xotira, thread, exception, I/O va operatsion tizim resurslari bilan ishlaydi.
Runtime environment
Runtime environment dasturga quyidagi imkoniyatlarni berishi mumkin:
- kodni yuklash;
- bytecode yoki instructionlarni bajarish;
- xotira boshqaruvi;
- garbage collection;
- exception handling;
- thread yoki coroutine;
- standard library;
- module loading;
- security policy;
- debugging va profiling;
- operatsion tizim APIlariga chiqish.
Har tilning runtime modeli bir xil emas.
Native runtime
C yoki C++ dasturi machine code’ga compile qilinadi va operatsion tizim loaderi orqali ishga tushadi.
Shunga qaramay, u runtime komponentlardan foydalanadi:
Native dastur “runtime’siz” emas; uning runtime qatlami ko‘pincha kichikroq va OSga yaqinroq.
Managed runtime
Managed runtime dastur bajarilishini faol boshqaradi.
Misollar:
- JVM;
- .NET CLR;
- JavaScript engine;
- Python interpreter;
- Ruby VM.
Managed runtime:
kabi imkoniyatlarni beradi.
Compile time va runtime
Compile time’da:
- syntax tekshiriladi;
- type tekshiriladi;
- optimization bajariladi;
- machine code yoki bytecode yaratiladi.
Runtime’da:
- haqiqiy ma’lumot keladi;
- object yaratiladi;
- network so‘rovi bajariladi;
- exception yuz beradi;
- dynamic module yuklanadi;
- permission tekshiriladi.
Masalan, mavjud bo‘lmagan faylni ochish xatosi odatda runtime’da aniqlanadi.
Runtime error
Dastur muvaffaqiyatli compile bo‘lsa ham bajarilish paytida xato berishi mumkin.
Misollar:
- division by zero;
- null reference;
- index out of range;
- file not found;
- network timeout;
- out of memory;
- stack overflow;
- invalid cast;
- permission denied.
Runtime exception qayta ishlanmasa process tugashi mumkin.
Runtime library
Runtime library compiler hosil qilgan kodga tayyor funksiyalar beradi.
Misollar:
- string operation;
- memory allocation;
- floating-point helper;
- exception unwinding;
- thread;
- file I/O;
- system call wrapper.
Ba’zi oddiy operatorlar ham yashirin runtime function chaqirishi mumkin.
Loader
Operatsion tizim loaderi executable’ni process xotirasiga joylaydi.
U:
- segmentlarni map qiladi;
- dynamic librarylarni topadi;
- relocation bajaradi;
- stack va environment tayyorlaydi;
- entry pointga boshqaruv beradi.
Managed runtime keyinchalik assembly, class yoki modulelarni alohida yuklashi mumkin.
Dynamic linking
Dastur library kodini executable ichiga to‘liq qo‘shmasdan runtime’da dynamic libraryga ulanadi.
Afzalliklari:
- disk va RAMni tejash;
- bir libraryni ko‘p process bo‘lishishi;
- libraryni alohida yangilash.
Kamchiligi:
- mos versiya topilmasligi;
- ABI mos kelmasligi;
- deployment murakkabligi.
Garbage collection
Managed runtime ishlatilmay qolgan objectlarni aniqlab xotirani qaytaradi.
GC turlari:
- reference counting;
- mark-and-sweep;
- generational;
- compacting;
- concurrent;
- incremental.
GC pause va memory overhead runtime xatti-harakatiga ta’sir qiladi.
JIT
Just-In-Time compiler bytecode yoki oraliq kodni dastur ishlayotganda machine code’ga aylantiradi.
Runtime haqiqiy workloadni kuzatib:
asosida optimization bajarishi mumkin.
Interpreter
Interpreter instruction yoki AST’ni bajarilish paytida bosqichma-bosqich qayta ishlaydi.
Bu tez startup va dynamic xususiyatlar uchun qulay, ammo har instructionda qo‘shimcha overhead bo‘lishi mumkin.
Ko‘p runtime interpreter va JITni birga ishlatadi.
Runtime type information
Type metadata runtime’da mavjud bo‘lsa:
- reflection;
- dynamic dispatch;
- serialization;
- dependency injection;
- debugging
osonlashadi.
Ba’zi tillar compile’dan keyin type ma’lumotning katta qismini olib tashlaydi.
Runtime configuration
Runtime xatti-harakatini quyidagilar boshqarishi mumkin:
- environment variable;
- command-line flag;
- config file;
- heap limit;
- thread pool hajmi;
- GC turi;
- JIT option;
- locale;
- timezone.
Production va development runtime settinglari farq qilishi mumkin.
Runtime dependency
Dastur ishlashi uchun ma’lum runtime versiyasi talab qilinishi mumkin.
Masalan:
- Java versiyasi;
- .NET runtime;
- Node.js;
- Python interpreter;
- C library.
Self-contained build runtime’ning kerakli qismini artifact bilan birga tarqatadi. Framework-dependent build esa hostdagi runtime’ga tayanadi.
Runtime va SDK
Runtime tayyor dastur bajarilishi uchun kerak.
SDK esa dastur yaratish vositalarini ham o‘z ichiga oladi:
Production serverga ko‘pincha to‘liq SDK emas, faqat runtime o‘rnatiladi.
Runtime isolation
Container yoki sandbox runtime processga cheklangan muhit beradi.
Container runtime:
ni boshqaradi.
Bu til runtime’idan boshqa tushuncha, ammo ikkalasi “runtime” atamasi bilan atalishi mumkin.
Observability
Runtime ichki metriclarni taqdim etishi mumkin:
- heap hajmi;
- GC pause;
- thread soni;
- event loop lag;
- JIT compilation;
- exception rate;
- loaded module;
- CPU time.
Application metriclari bilan runtime metriclari birga tahlil qilinadi.
Diagnostika
Runtime muammosida:
- runtime versiyasi;
- architecture;
- dependency;
- environment;
- heap;
- thread;
- GC;
- dynamic library;
- startup log;
- exception;
- system call
tekshiriladi.
“Dastur compile bo‘ldi” uning target runtime’da ishlashini kafolatlamaydi.
Runtime lifecycle
Runtime process boshlanishida global state, module va thread tizimini tayyorlaydi. Dastur tugaganda esa finalizer, buffered output va background workerlarni yakunlaydi. Majburiy process termination holatida bu cleanup bosqichlari to‘liq bajarilmasligi mumkin.
Bog‘liq tushunchalar
Runtime environment, Compiler, Interpreter, JIT, Garbage collection, Dynamic linking, SDK, Bytecode, Virtual machine, Exception