Manba kodi

Hisoblash texnikasi (computing) sohasida **manba kodi** (source code) yoki shunchaki **kod** yoki **manba** deb, yakuniy natijada kompyuter xatti-harakatlarini boshqarishga imkon beradigan, inson o'qiy oladigan oddiy matnga (plain text) aytiladi. Kompyuterni boshqarish uchun manba kodi dastur (computer program) tomonidan qayta ishlanishi kerak u yoki interpretator (interpreter) orqali bevosita bajariladi, yoki kompilyator (compiler) yordamida kompyuter iste'moli uchun qulayroq shaklga tarjima qilinadi (translated). Ba'zan kod bevosita mashina kodiga (machine code) kompilyatsiya qilinadi va qo'shimcha ishlovsiz kompyuterning ona tilida ishga tushiriladi. Biroq, ko'plab zamonaviy muhitlar kodni bayt-kod (bytecode) kabi oraliq ko'rinishga (intermediate representation) o'tkazishni nazarda tutadi; bu ko'rinish interpretator orqali ishlashi yoki just-in-time kompilyatsiyasi (just-in-time compilation) orqali talabga ko'ra mashina kodiga o'tkazilishi mumkin.

## Tarixi va asoslari
1940-yillarning oxirida paydo bo'lgan birinchi dasturlanadigan kompyuterlar mashina tilida (machine language) (protsessor tomonidan bevosita bajarilishi mumkin bo'lgan oddiy ko'rsatmalar) dasturlashtirilgan edi. Mashina tilidagi xatolarni tuzatish qiyin bo'lib, u turli kompyuter tizimlari o'rtasida portativ (portable) emas edi. Dastlab apparat resurslari taqchil va qimmat bo'lsa, inson resurslari (human resources) nisbatan arzon edi. Dasturlar murakkablashgani sayin, dasturchi mahsuldorligi asosiy to'siqqa aylandi. Bu 1950-yillarning o'rtalarida Fortran kabi yuqori darajali dasturlash tillari (high-level programming languages) paydo bo'lishiga olib keldi. Ushbu tillar apparat ta'minoti detallaridan abstraksiya (abstraction) qilindi va insonlar tomonidan osonroq tushuniladigan algoritmlarni ifodalash uchun loyihalandi. Asosiy kompyuter apparaturasidan farqli o'laroq, dasturiy ta'minot nisbatan yangi soha bo'lib, uning tarixi yuqorida tilga olingan Fortran, Lisp va Cobol kabi dasturlash tillariga borib taqaladi. Yuqori darajali dasturlash tillarining kashf etilishi manba kodini kompyuter apparaturasida bevosita bajariladigan mashina kodiga avtomatik ravishda o'tkazuvchi kompilyatorlarning yaratilishi bilan bir vaqtda yuz berdi.

Manba kodi  bu insonlar tomonidan bevosita o'zgartiriladigan kod shakli bo'lib, odatda yuqori darajali dasturlash tilida yoziladi. Obyekt kodi (object code) esa mashina tomonidan bevosita bajarilishi mumkin va u manba kodidan, ko'pincha assembler tili (assembly language) kabi oraliq bosqich orqali avtomatik ravishda hosil qilinadi. Obyekt kodi faqat ma'lum bir platformada ishlasa-da, manba kodi boshqa mashinaga ko'chirilishi va u yerda qayta kompilyatsiya qilinishi mumkin. Bir xil manba kodi uchun obyekt kodi sezilarli darajada farq qilishi mumkin  bu nafaqat u kompilyatsiya qilinayotgan mashinaga, balki kompilyatorning unumdorlikni optimallashtirish xususiyatlariga ham bog'liqdir.

## Tashkil etilishi
Aksariyat dasturlar ishlash uchun zarur bo'lgan barcha resurslarni o'z ichiga olmaydi va tashqi kutubxonalarga (libraries) tayanadi. Kompilyatorning vazifalaridan biri ushbu fayllarni dastur apparat tomonidan bajarilishi mumkin bo'lgan tarzda bog'lashdan iboratdir.

Dasturiy ta'minot ishlab chiquvchilar ko'pincha manba kodi fayllaridagi o'zgarishlarni kuzatib borish uchun konfiguratsiyani boshqarish (versiyalarni boshqarish) tizimlaridan foydalanadilar. Konfiguratsiyani boshqarish tizimi, shuningdek, qaysi obyekt kodi fayli manba kodining qaysi versiyasiga mos kelishini ham hisobga olib boradi.

## Maqsadlari

### Baholash
Kodning manba satrlari (source lines of code ,SLOC) soni ko'pincha dasturchilar mahsuldorligini, kod bazasining iqtisodiy qiymatini, ishlab chiqilayotgan loyihalar uchun harakatlarni baholashni va mahsulot chiqarilgandan keyingi dasturiy ta'minotga xizmat ko'rsatish xarajatlarini o'lchashda metrika sifatida qo'llaniladi.

### Kommunikatsiya
Manba kodi tomonlar o'rtasida algoritmlarni almashish uchun ham xizmat qiladi, masalan, internetdagi yoki kitoblardagi kod parchalari (code snippets).

Dasturchilar dasturlash uslublarini o'rganish uchun mavjud manba kodlarini tahlil qilishni foydali deb hisoblaydilar. Ishlab chiquvchilar o'rtasida manba kodi almashinuvi ularning dasturlash mahoratini oshirishga yordam beruvchi omil sifatida tez-tez tilga olinadi. Ba'zilar manba kodini o'ziga xos badiiy vosita (artistic medium) deb hisoblashadi.

Manba kodi ko'pincha izohlarni (comments) - kompilyator e'tiborsiz qoldirishi uchun belgilangan matn bloklarini o'z ichiga oladi. Ushbu tarkib dastur mantiqining bir qismi bo'lmasdan, balki o'quvchilarga dasturni tushunishga yordam berish uchun mo'ljallangan.

Kompaniyalar ko'pincha tijorat siri (trade secret) hisoblangan algoritmlarni yashirish maqsadida manba kodini maxfiy saqlaydilar. Xususiy va maxfiy manba kodlari hamda algoritmlar jinoiy odil sudlov kabi muhim davlat sohalarida keng qo'llaniladi, bu esa algoritm metodologiyasining shaffof emasligiga va «qora quti» (black box) effektiga olib keladi. Natijada, noxolislik kabi masalalarning jamoatchilik nazoratidan chetda qolishi kuzatiladi.

### O'zgartirish
Manba kodiga (nafaqat obyekt kodiga) ega bo'lish uni o'zgartirish uchun zarurdir. Mavjud kodni o'zgartirishdan oldin uning qanday ishlashini tushunish talab etiladi. Tushunish tezligi kod bazasiga hamda dasturchining mahoratiga bog'liq. Tajribali dasturchilar kodning yuqori darajada nima vazifani bajarishini osonroq anglaydilar. Ushbu jarayonni tezlashtirish uchun ba'zan dasturiy ta'minotni vizuallashtirishdan foydalaniladi.

Ko'pgina dasturchilar o'z mahsuldorligini oshirish uchun integratsiyalashgan ishlanmalar muhiti (integrated development environment, IDE) dasturlaridan foydalanadilar. IDElar odatda bir nechta o'rnatilgan funksiyalarga ega, jumladan, dasturchini keng tarqalgan xatolardan ogohlantiruvchi manba kodi tahrirchisi ham mavjud. O'zgartirishlar ko'pincha kod refaktoringini (code refactoring) (funksiyani o'zgartirmasdan tuzilmani yaxshilash) va qayta qurishni (tuzilmani va funksiyani bir vaqtda yaxshilash) o'z ichiga oladi. Deyarli har bir kod o'zgarishi yangi xatolarni yoki kutilmagan to'lqin effektlarini (ripple effects) keltirib chiqaradi, bu esa keyingi bosqichda tuzatishlarni talab qiladi.

Loyihaga qo'shilgan yangi kodni tekshirish uchun ko'pincha boshqa ishlab chiquvchilar tomonidan kod taqrizi (code review) o'tkaziladi. Ushbu bosqichning maqsadi kodning uslub va xizmat ko'rsatish (maintainability) standartlariga muvofiqligini hamda dasturiy loyihaning (software design) to'g'ri tatbiq etilganligini tasdiqlashdan iborat. Ba'zi hisob-kitoblarga ko'ra, kod taqrizi dasturiy ta'minotni sinash yakunlangandan keyin saqlanib qolgan xatolar sonini sezilarli darajada kamaytiradi. Kodni bajarish orqali amalga oshiriladigan sinovlar bilan bir qatorda, dasturning statik tahlili (static program analysis) manba kodidagi muammolarni aniqlash uchun avtomatlashtirilgan vositalardan foydalanadi. Ko'pgina IDElar kodning aniqligi va xizmat ko'rsatish darajasi bo'yicha metrikalarni taqdim etuvchi tahlil vositalarini qo'llab-quvvatlaydi. Sozlovchilar (debuggers) esa dasturchilarga kodning bajarilishini bosqichma-bosqich kuzatish va har bir holat o'zgarishiga qaysi manba kodi mos kelishini aniqlash imkonini beruvchi vositalardir.

### Kompilyatsiya va bajarish
Yuqori darajali dasturlash tilidagi manba kodi fayllari ko'rsatmalar bajarilishidan oldin mashina kodiga o'tkazish (preprocessing) bosqichidan o'tishi kerak. Kompilyatsiya qilinganidan so'ng, dastur obyekt fayli sifatida saqlanishi mumkin va yuklovchi (loader) (operatsion tizimning bir qismi) ushbu saqlangan faylni olib, uni kompyuter apparaturasida jarayon (process) sifatida ishga tushirishi mumkin. Ba'zi dasturlash tillari kompilyator o'rniga interpretatordan foydalanadi. Interpretator dasturni bajarilish vaqtida (run time) mashina kodiga aylantiradi, bu esa ularni kompilyatsiya qilinadigan tillarga qaraganda 10 tadan 100 martagacha sekinroq ishlashiga olib keladi.

### Portativlik
Ko'pgina dasturlarning bajariladigan binar fayllar ko'rinishida emas, balki manba kodi shaklida tarqatilishining yana bir sababi shundaki, ko'pincha bitta manba kodi fayli bir marta yozilib, turli xil yakuniy foydalanuvchi mashinalarida (har biri o'zining mahalliy kompilyatori yoki interpretatoriga ega) ishlashi mumkin. Bajariladigan kod fayli esa odatda faqat deyarli bir xil bo'lgan mashinalarda ishlaydi. Manba kodi Unix tarixining boshida Unix operatsion tizimini tarqatish uchun, keyinchalik esa skript tillarida (xususan, JavaScript mijoz tomonidagi skript) yozilgan dasturlarning turli xil mashinalarda ishlashini ta'minlash uchun foydalanilgan.

Ushbu maqsad yo'lida «minifikatsiya qilingan» (minified), «obfuskatsiya qilingan» (obfuscated) yoki «dekompilyatsiya qilingan» manba kodi fayllari (ularda asl koddagi izohlar o'chirilgan bo'ladi) ham asl manba kodi fayllari kabi portativdir. Biroq, ular o'zgartirishlar kiritish uchun ancha noqulay bo'lib, GNU General Public License 2-versiyasidagi (GPL2) manba kodi ta'rifiga to'liq javob bermaydi.

## Sifat
Dasturiy ta'minot sifati - bu kodning to'g'ri va samarali xulq-atvori, uning qayta ishlatilishi va portativligi yoki o'zgartirishning osonligini anglatuvchi keng qamrovli tushunchadir. Odatda, sifatni mahsulotga uni ishlab chiqish jarayonining boshidanoq kiritish, keyinchalik qo'shishga urinishdan ko'ra tejamkorroq hisoblanadi. Yuqori sifatli kod ishonchlilik va xizmat ko'rsatish darajasi yuqori bo'lganligi sababli yetkazib beruvchilar va mijozlar uchun xarajatlarni kamaytiradi.

Xizmat ko'rsatish darajasi (maintainability) - bu dasturiy ta'minotning mavjud funksiyalarini buzmagan holda osongina o'zgartirilishi mumkinligidir. Kodlash konvensiyalariga rioya qilish, masalan, funksiya va o'zgaruvchilar uchun ularning maqsadiga mos keladigan aniq nomlardan foydalanish xizmat ko'rsatishni osonlashtiradi. Shartli sikl operatorlaridan faqat kod bir necha marta bajarilishi kerak bo'lgandagina foydalanish va hech qachon bajarilmaydigan kodlarni olib tashlash ham tushunarlilikni oshiradi. Ko'pgina dasturiy ta'minotni ishlab chiqish tashkilotlari ishlab chiqish bosqichida xizmat ko'rsatish darajasiga e'tibor bermaydilar, garchi bu uzoq muddatli xarajatlarni oshirsa ham. Texnik qarz (technical debt) dasturchilar dangasalik yoki muddatga ulgurish zarurati tufayli xizmat ko'rsatish darajasini o'ylamay, «tezkor va sifatsiz» yechimlarni tanlaganlarida yuzaga keladi. Buning keng tarqalgan sababi dasturiy ta'minotni ishlab chiqish harakatlarini baholashdagi xatoliklar bo'lib, bu ishlab chiqish uchun yetarli resurslar ajratilmasligiga olib keladi. Yana bir muammo shundaki, ko'plab dasturiy muhandislik kurslarida xizmat ko'rsatish darajasiga yetarlicha urg'u berilmaydi. Dasturiy ta'minotga xizmat ko'rsatish uchun mas'ul bo'lmasligini biladigan muhandislar esa ushbu sifatni ta'minlashdan manfaatdor emaslar.

## Mualliflik huquqi va litsenziyalash
Vaziyat butun dunyoda turlicha bo'lsa-da, AQShda 1974-yilgacha dasturiy ta'minot va uning manba kodi mualliflik huquqi bilan himoyalanmas edi va shuning uchun har doim jamoat mulki bo'lgan dasturiy ta'minot hisoblangan. 1974-yilda AQShning Mualliflik huquqi bilan himoyalangan asarlardan yangi texnologik foydalanish bo'yicha komissiyasi (CONTU) «kompyuter dasturlari, muallifning asl ijodini aks ettirgan darajada, mualliflik huquqining tegishli obyekti hisoblanadi» degan qarorga keldi.

Xususiy dasturiy ta'minot (proprietary software) kamdan-kam hollarda manba kodi ko'rinishida tarqatiladi. Garchi ochiq manbali dasturiy ta'minot (open-source software) atamasi so'zma-so'z manba kodiga ochiq kirishni bildirsa-da, ochiq manbali dasturiy ta'minot qo'shimcha talablarga ega: erkin qayta tarqatish, manba kodini o'zgartirishga ruxsat berish va hosilaviy asarlarni xuddi shu litsenziya ostida chiqarish, shuningdek, turli foydalanish sohalari, jumladan tijorat maqsadlarida foydalanish o'rtasida kamsitishning mavjud emasligi. Ochiq manbali dasturiy ta'minotning erkin qayta ishlatilishi ishlab chiqish jarayonini sezilarli darajada tezlashtirishi mumkin.

## Yana qarang

* Bayt-kod
* Ma'lumot sifatida kod
* Kodlash konvensiyalari
* Erkin dasturiy ta'minot
* Eski kod (Legacy code)
* Mashina kodi
* Belgilash tili (Markup language)
* Obfuskatsiya qilingan kod
* Obyekt kodi
* Ochiq manbali dasturiy ta'minot
* Paket menejeri
* Dasturlash tili
* Manba kodi repozitoriysi
* Sintaksisni yoritish
* Vizual dasturlash tili

## Manbalar

### Manba adabiyotlar

* 
*
*
*
*
*
*
*
*
*
*
*
*
* 
*
*
* 
*
*
*

## Tashqi havolalar