JavaRush /Java blogi /Random-UZ /Dasturlash tillarining darajalari

Dasturlash tillarining darajalari

Guruhda nashr etilgan

Kirish

Turli xil dasturlash tillari qanday? Ularda qanday tushunchalar singdirilgan? Ular qanday rivojlangan? Ushbu maqolada biz dasturlash tillarining darajalar deb ataladigan turlarini ko'rib chiqamiz - mashina kodlaridan (pastki darajali, kompyuter uskunasiga yaqin) Java yoki C# (yuqori daraja) kabi tillargacha. Dasturning matn ro'yxati nol va birlar to'plamiga aylanish yo'lida qanchalik kam o'zgarishlarga duchor bo'lsa, daraja shunchalik past bo'ladi.
Dasturlash tillari darajalari - 1
Keyinchalik biz ko'rib chiqamiz:
  1. Past darajadagi tillar (mashina kodlari va yig'ish)
  2. O'rta daraja (C, Fortran ....)
  3. Yuqori daraja (C++, Java, Python, Ruby, JavaScript...)
Daraja, shuningdek, amalga oshirish uchun kelajakdagi dasturning ro'yxati qanchalik batafsil bo'lishi kerakligini tavsiflaydi. Odamlar uchun bu jarayon qanchalik sodda? Tilning darajasini uning imkoniyatlarining aniq ko'rsatkichi deb hisoblamaslik kerak. Dasturlash tili - bu bir sohada samarali, boshqa sohalarda unchalik foydali bo'lmagan vositadir. Duradgor ham, duradgor ham yog‘och bilan ishlaydi. Birinchisida asosiy asbob - chisellar to'plami, ikkinchisida - bolta bor. Biroq, duradgor o'yilgan shkafni yanada chiroyli qiladi va duradgor tezroq uy quradi. Garchi har biri bir-birining ishini bajarishga qodir bo'lsa-da, ular buni juda kam samarali bajaradilar. Kompyuterdagi turli ma'lumotlar nol va birliklar to'plami sifatida ifodalanadi. Uni qayta ishlash uchun boshqaruv buyruqlari kerakli ma'lumotlarning joylashishini va o'zgartirish usulini aniqlaydigan ko'rsatmalarni o'z ichiga olgan bir xil ma'lumotlardir.

Mashina tillari (eng past daraja)

Biz dasturiy ta'minot maydonidan Uskuna maydoniga qisqa tashrif buyurishimiz kerak. Keling, buni soddalashtirilgan shaklda ko'rib chiqaylik. Protsessor kompyuterning asosiy "miyasi" dir. U o'rnatilgan anakartda avtobuslar (aloqa uchun ma'lumotlar kanallari) orqali boshqa qurilmalar bilan o'zaro ishlash uchun foydalaniladigan kontrollerlar mavjud.
Dasturlash tillari darajalari - 2
Ba'zilar yuqori tezlikda ishlaydi (qizil o'qlar): protsessor xotiradan buyruqlar chiqaradi va ma'lumotlarni boshqaradi, video karta, ayniqsa 3D o'yinlarda, monitor ekranida tasvirni yaratish uchun juda ko'p miqdordagi teksturalar, shakllar, piksel koordinatalari va boshqa ob'ektlarni sarflaydi. . Boshqalar (axborot almashish tezligidagi cheklovlar tufayli) bunday yuqori ko'rsatkichlarga muhtoj emas. Yashil strelkalar bilan diagrammada turli xil ichki va tashqi qurilmalar ulangan.

Protsessorning ichki dunyosi

Protsessorning barcha buyruqlari ikkilik shaklda bajarilishi uchun xotiradan keladi. Ko'rsatmalarning formati, soni, kichik to'plami uning arxitekturasiga bog'liq. Ularning aksariyati bir-biriga mos kelmaydigan va turli mafkuralarga ergashadi. Shuningdek, buyruq turi protsessor ishlaydigan rejimga (8/16/32... bit chuqurligi) va ma'lumotlar manbasiga (xotira, registr, stek...) bog'liq. Xuddi shu harakat turli ko'rsatmalar bilan ifodalanishi mumkin. Protsessorda ikkita operand qo'shish (ADD X,Y) va belgilanganiga bittasini qo'shish (INC X) bo'yicha ko'rsatmalar mavjud. Operandga uchlik qo'shish ADD X,3 sifatida yoki INC X ga uch marta qo'ng'iroq qilish orqali amalga oshirilishi mumkin.Va turli protsessorlar uchun bu usullardan qaysi biri tezlik yoki xotira hajmi bo'yicha optimal bo'lishini oldindan aytib bo'lmaydi. Qulaylik uchun ikkilik ma'lumotlar o'n oltilik shaklda yoziladi. Keling, tanish dasturning bir qismini ko'rib chiqaylik (S tili, sintaksisi Java tiliga o'xshash)
int func() {
    int i = getData("7") ;
    return ++i;
   ...
}
Protsessor uchun ko'rsatmalar ketma-ketligi shaklida bir xil amallarni amalga oshiradigan kod: ... 48 83 ec 08 bf bc 05 20 00 31 c0 e8 e8 fe ff ff 48 83 c4 08 83 c0 01 ... Intel protsessorlari uchun past darajadagi dasturlash tili aslida shunday ko'rinadi. Argument bilan usulni chaqiruvchi va natijani bittaga oshiruvchi qaytaruvchi fragment. Bu to'g'ridan-to'g'ri, o'zgartirishlarsiz, bajarish uchun protsessorga uzatiladigan mashina tili (kod). Taroziga soling:
  • Biz vaziyatning to'liq ustamiz, bizda protsessor va kompyuter texnikasidan foydalanish uchun eng keng imkoniyatlar mavjud.
  • Kodni tashkil qilish va optimallashtirish uchun barcha imkoniyatlar bizda mavjud.
Kamchiliklari:
  • Protsessorlarning ishlashi haqida keng ma'lumotga ega bo'lish va kodni bajarishda ko'p sonli apparat omillarini hisobga olish kerak.
  • Berilgan misoldan biroz murakkabroq dasturlarni yaratish kod yozish va uni tuzatishga sarflangan vaqtni keskin oshirishga olib keladi.
  • Platformaga bog'liqlik: bitta protsessor uchun yaratilgan dastur odatda boshqalarda ishlamaydi. Ehtimol, ushbu protsessor uchun uning boshqa ishlash rejimlarida kodni tahrirlash talab qilinishi mumkin.
Mashina kodlari kompyuterlar paydo bo'lishining boshida keng qo'llanilgan, kompyuter kashshoflari davrida dasturlashning boshqa usullari yo'q edi. Hozirgi vaqtda ular mikroelektronika sohasidagi muhandislar tomonidan protsessorlarni ishlab chiqish yoki past darajadagi sinovdan o'tkazishda vaqti-vaqti bilan foydalaniladi.

Assembly tili (past daraja)

Kompyuterdan farqli o'laroq, siz va men ma'lumotni raqamli shaklda emas, balki matn/semantik shaklda yaxshiroq qabul qilamiz. Siz smartfoningizda ellikta kontakt nomini osongina nomlashingiz mumkin, ammo ularning tegishli telefon raqamlarini yoddan yozishingiz dargumon. Dasturlash bilan ham xuddi shunday. Biz zinapoyaga uchta asosiy qadamni qo'yib yuqoriga ko'taramiz:
  • Keling, bitta ramziy ko'rsatmani tegishli harakatlarni bajaradigan raqamli protsessor ko'rsatmalari guruhlariga bog'laylik.
  • Protsessor ko'rsatmalarining argumentlarini alohida ajratib ko'rsatamiz.
  • Xotira maydonlarini, o'zgaruvchilarni va alohida buyruqlar joylashuvini nomlash qobiliyati bilan tanishtiramiz.
Oldingi dasturning fragmentlarini mashina kodida (markazda) va assembler tilida (o'ngda) solishtiramiz:
2004b0     48 83 ec 08      sub    $0x8,%rsp
2004b4     bf bc 05 20 00   mov    $0x2005bc,%edi
2004b9     31 c0            xor    %eax,%eax
2004bb     e8 e8 fe ff ff   callq  getData
2004c0     48 83 c4 08      add    $0x8,%rsp
2004c4     83 c0 01         add    $0x1,%eax
Ko'rib turganingizdek, dasturni yozish jarayoni soddalashtirilgan: raqamli buyruq qiymatlarini yaratish, o'tish uzunligini hisoblash, xotiradagi ma'lumotlarni uning katakchalari bo'ylab tarqatish va protsessorning boshqa funktsiyalari uchun ma'lumotnomalardan foydalanishning hojati yo'q. Biz simvolik buyruqlar to'plamidan va bajarilishi mantiqiyligi uchun zarur bo'lgan argumentlardan kerakli harakatni tasvirlaymiz, so'ngra tarjimon dasturi matn faylini protsessor uchun tushunarli bo'lgan nollar va birlar to'plamiga aylantiradi. Taroziga soling:
  • Kodni yozish va o'zgartirish jarayoni soddalashtirildi.
  • Barcha apparat resurslari ustidan nazorat saqlanib qoldi.
  • Dasturni boshqa platformalarga o'tkazish nisbatan osonroq, lekin ular apparat mosligiga qarab o'zgartirishni talab qiladi.
Kamchiliklari:
  • Assembly tili past darajadagi dasturlash tilidir. Kodning kichik bo'limlarini ham yaratish qiyin. Bundan tashqari, uskunaning o'ziga xos ishlashini ham hisobga olish kerak.
  • Platformaga bog'liqlik.
Eng mashhur Java demo misoli:
public static void main(String[] args) {
    System.out.println("Hello World!");
}
(NASM sintaksisi, Windows API va kernel32.lib yordamida) quyidagicha ko'rinadi:
global _main
	extern  _GetStdHandle@4
	extern  _WriteFile@20
	extern  _ExitProcess@4

	section .text
_main:
	; DWORD  bytes;
	mov 	ebp, esp
	sub 	esp, 4

	; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
	push	-11
	call	_GetStdHandle@4
	mov 	ebx, eax

	; WriteFile( hstdOut, message, length(message), &bytes, 0);
    push	0
	lea 	eax, [ebp-4]
	push	eax
	push	(message_end - message)
	push	message
	push	ebx
	call	_WriteFile@20

	; ExitProcess(0)
	push	0
	call	_ExitProcess@4

	; never here
	hlt
message:
	db  	'Hello, World', 10
message_end:
Mashina kodlari singari, assembler tili ham ko'proq muhandislar va tizim dasturchilari tomonidan qo'llaniladi. Operatsion tizim yadrosining apparatga bog'liq bo'lgan qismlarini yozish uchun ishlatiladi, ular turli periferik qurilmalar uchun drayverlarni amalga oshirish xususiyatlari uchun muhim vaqt yoki muhim ahamiyatga ega. Ammo so'nggi paytlarda ular kamroq va kamroq murojaat qilmoqdalar, chunki undan foydalanish dasturlarning boshqa platformalarga o'tish qobiliyatini sezilarli darajada pasaytiradi. Ba'zan ular demontaj jarayonidan foydalanadilar - ular kichik bo'laklarni bajarish mantiqini tahlil qilish uchun raqamli kodlardan dasturning assembler ro'yxatini yaratadilar. Kamdan kam hollarda, agar asl yuqori darajadagi kod mavjud bo'lmasa: ular bilan kurashish uchun viruslarni tahlil qilish yoki manba kodini yo'qotish. Assembler tili birinchi/ikkinchi avlod hisoblanadi (biz assembler paydo bo'lishidan oldingi psevdokodlarni va ularning ramziy buyruqlardan farqini alohida ko'rib chiqmaymiz). Men Demo Scene-da assemblerdan foydalanishni ta'kidlamoqchiman: san'at, matematika va past darajadagi kodlashning uyg'unligi, ularning yaratuvchilarining badiiy g'oyalarini resurs cheklovlari bilan videokliplar yaratadigan dasturlar ko'rinishida o'zida mujassam etgan. Ko'pincha dastur va ma'lumotlar faylining umumiy hajmi 256 baytdan oshmasligi kerak (4/64 kilobayt formati ham mashhur). Mana 4 KB hajmli dasturga misol:

C guruhi/Fortran tillari (o'rta/yuqori daraja)

Kompyuter texnologiyalari imkoniyatlarining rivojlanishi bilan, assemblerda kodni amalga oshirishning funktsional imkoniyatlari va vaqtlari endi qoniqarli emas edi. Dasturlarni yozish, sinovdan o'tkazish va ularga xizmat ko'rsatish xarajatlari ularning imkoniyatlaridan ko'ra tezroq o'sdi. Uskunaning ishlashini bilish nuqtai nazaridan dasturchiga qo'yiladigan talablarni kamaytirish, unga inson mantig'iga yaqin tillarda yozish imkonini beradigan vositani berish kerak edi. Dasturlash tili turlarining yangi darajasiga o'ting. Keyingi ketma-ket qo'ng'iroqlar (protsessual dasturlash paradigmasi) bilan har xil modullarga bo'linish qobiliyatini ta'minlash, ularni yaratish qobiliyati bilan har xil turdagi ma'lumotlarni taqdim etish va hokazo. Bundan tashqari, bu chora-tadbirlar kodning boshqa platformalarga ko'chirilishini yaxshilashga, yanada qulayroq tashkil etishga olib keldi. jamoaviy ish. Yuqorida aytilganlarning barchasini qo'llab-quvvatlagan birinchi tillardan biri o'tgan asrning 50-yillarida ishlab chiqilgan Fortran edi . Matn ko'rinishida tsikllar, novdalar, pastki dasturlardan foydalangan holda bajarish mantiqining tavsifi bilan yaratish va massivlar bilan ishlash va ma'lumotlarni haqiqiy, butun va murakkab raqamlar ko'rinishida taqdim etish muhandislar va olimlarni quvontirdi. Qisqa vaqt ichida ilmiy "ramkalar" va kutubxonalar yaratildi. Bularning barchasi Fortran tor ilmiy muhitda bo'lsa ham, bugungi kunda ham dolzarbligi va rivojlanayotganligining natijasi edi, chunki ishlanmalar bagaji juda katta, faqat IMSL kutubxonasi 1970 yildan beri faol rivojlanmoqda (!), shunga o'xshash ko'plab tegishli dasturlarni eslay olasizmi? - eski taymerlar? Ushbu darajadagi tillar rivojlanishining yana bir tarmog'i C. Agar Fortran olimlar uchun vositaga aylangan bo'lsa, u holda C dasturchilarga amaliy dasturlarni yaratishda yordam berish uchun yaratilgan: operatsion tizimlar, drayverlar va boshqalar. Til xotirani taqsimlashni qo'lda boshqarish imkonini beradi va apparat resurslariga bevosita kirish imkonini beradi. C dasturchilari past darajadagi ob'ektlarni nazorat qilishlari kerak, shuning uchun ko'pchilik C ilg'or assembler tili va ko'pincha "o'rta darajadagi" til deb ataladi, degan fikrda. Assemblerga ma'lumotlarni yozishni, protsessual va modulli dasturlash elementlarini kiritgan holda, C tili hanuzgacha tizim dasturlash uchun asosiy tillardan biri bo'lib qolmoqda, bunga so'nggi yillarda mikroelektronikaning jadal rivojlanishi ham yordam berdi. Barcha turdagi gadjetlar, kontrollerlar, tarmoq va boshqa qurilmalar drayverlarga, hamkorlik protokollarini amalga oshirishga va uskunalar bilan o'zaro aloqani amalga oshirish uchun boshqa nisbatan past darajadagi dasturiy ta'minotga muhtoj. Yuqorida aytilganlarning barchasi bugungi kunda tilga bo'lgan talabga yordam beradi. Ob'ektga yo'naltirilgan va funktsional tamoyillar C sintaksisidan ko'p narsalarni olib, C++, C#, Java ko'rinishida yanada ishlab chiqilgan .
  • Kod yaratish jarayonini soddalashtirish: turlarni kiritish, modullarga bo'lish, dasturlar ro'yxatini qisqartirish.
  • Прозрачная логика заложенного алгоритма вследствие ухода от машинных codeов к более понятным для человека командам в семантически описательном стиле.
  • Переносимость. Стало достаточно перекомпorровать текст программы для выполнения на другой платформе (возможно, с небольшой модификацией).
  • Скорость откомпorрованных программ.
Минусы:
  • Отсутствие автоматического управления памятью и необходимость постоянного её контроля.
  • Отсутствие реализации концепций an objectно-ориентированного и функционального программирования.

Развитие языков высокого уровня

Yuqori darajadagi dasturlash tillari, dasturiy ta'minotni yaratish nuqtai nazaridan, mashina kodlaridan tobora uzoqlasha boshladi va protsessuallardan tashqari, turli xil dasturlash paradigmalarini amalga oshira boshladi. Bularga ob'ektga yo'naltirilgan tamoyillarni amalga oshirish ham kiradi. C++, Java, Python, JavaScript, Ruby... - bu turdagi tillar diapazoni bugungi kunda eng ommabop va talabga ega. Ular turli xil dasturiy ta'minotni amalga oshirish uchun ko'proq imkoniyatlar beradi va ularning har birining "mutaxassisligini" aniq aniqlash mumkin emas. Ammo tegishli sohalarda dasturning mashhurligi ular bilan ishlash uchun kutubxonalar/ramkalar bilan bog'liq, masalan: JavaScript - Frontend. Til mijoz veb-brauzeri va foydalanuvchi va masofaviy server o'rtasidagi o'zaro aloqa uchun mo'ljallangan. Eng mashhur kutubxonalar - Angular, React va VUE. Hozirda u web va boshqa serverlarda (backend) nisbatan faol foydalanilmoqda, Node.js ayniqsa mashhur. Ruby - Backend. U skriptlar (xizmat fayllari) va veb-serverlarda yaratish uchun ishlatiladi. Asosiy ramka Ruby On Rails. Python ilmiy va muhandislik domenidir (veb-domendan tashqari). U standart hisoblash va matematik paketlarga (Mathematica, Octave, MatLab...) muqobildir, lekin tilning odatiy semantikasiga va ko‘p sonli kutubxonalarga ega. Mashinani o'rganish tizimlari, statistika va sun'iy intellekt sohasida ko'plab muxlislarga ega. Tez-tez ishlatiladigan kutubxonalarga django, numpy, pandas va tensorflow kiradi. C++ – C tilining universal, evolyutsion rivojlanishi.Past darajadagi apparat vositalari bilan oʻzaro aloqada boʻlish qobiliyatini yoʻqotmagan holda funksional va obyektga yoʻnaltirilgan dasturlash imkoniyatlarini taʼminlaydi. Shu sababli, dasturiy ta'minotni yaratishda unumdorlik va moslashuvchanlik amalga oshiriladi, lekin narx ham mos keladi: tilning murakkab spetsifikatsiyasi tufayli kirish uchun yuqori to'siq, dasturni bajarishda resurslarni mustaqil nazorat qilish zarurati. Uning yordamida ko'plab bir foydalanuvchi va tizim dasturlari yoziladi: operatsion tizim modullari (Windows, Symbian...), o'yinlar, muharrirlar (Adobe Photoshop, Autodesk Maya...), ma'lumotlar bazalari (MSSQL, Oracle...), pleyerlar ( WinAmp...) va hokazo. Shuni ta'kidlash kerakki, zamonaviy dasturiy ta'minot murakkab mahsulot bo'lib, uni ishlab chiqishda bir vaqtning o'zida bir nechta dasturlash tillari qo'llaniladi va ularning har birining ishtirok etish darajasini aniqlash juda qiyin bo'lishi mumkin. umumiy natija.

Keyingi taraqqiyot

So'nggi paytlarda dasturlashning yana bir turi mashhurlik kasb etmoqda - funktsional (til darajasini yanada rivojlantirish) . Bu erda hisob-kitoblar uchun abstraktsiyaning yana bir turi - funktsiyalar to'plamini argument sifatida qabul qiladigan va boshqasini qaytaradigan funktsiyalar. O'zgaruvchilar rolini bir xil funktsiyalar bajaradi (bizga tanish bo'lgan o'zgaruvchilar Java-da turdagi deklaratsiyadan oldingi finalga o'xshash oddiygina doimiy ifodalardir). Funktsiyaning o'zi o'z doirasi bo'yicha yopiq, uning ishlash natijasi faqat berilgan argumentlarga bog'liq. Bundan ikkita ajoyib xususiyat kelib chiqadi:
  • Sinov uchun bizga faqat funktsiya argumentlari kerak (ish natijasi tashqi o'zgaruvchilarga bog'liq emas va hokazo).
  • Funktsional uslubdagi dastur mo''jizaviy tarzda bir vaqtning o'zida tayyor: ketma-ket funksiya qo'ng'iroqlari qo'shni iplarda berilishi mumkin (chunki ularga tashqi omillar ta'sir qilmaydi) va qulflashni talab qilmaydi (ya'ni, sinxronizatsiya muammolari yo'q). Ko'p yadroli protsessorlarning keng qo'llanilishini hisobga olgan holda, ushbu mavzuga vaqt ajratish uchun yaxshi rag'bat.
Biroq, kirish chegarasi OOPga qaraganda yuqori: samarali kod uchun funktsiyalar ko'rinishidagi bajarish algoritmini tavsiflovchi dasturni qurish kerak. Shu bilan birga, sof funktsional uslub uchun mantiq va toifalar nazariyasi asoslarini bilish yaxshi bo'lar edi. Eng mashhurlari Haskell, Scala, F#. Ammo qo'rqmang, Java-da (shuningdek, boshqa zamonaviy uchinchi avlod tillarida) funktsional dasturlash elementlari paydo bo'ldi va ular OOP bilan birlashtirilishi mumkin. Siz JavaRush onlayn stajirovkasida ushbu tafsilotlarni batafsilroq bilib olasiz. Mantiqiy dasturlash sohasi (tillarning keyingi darajasi) kam talab tufayli hali keng amaliy qo'llanilishini topmagan. Dasturlarni yaratish diskret matematika asoslarini, predikat mantiqini, cheklash vositalarini va matematik mantiqning boshqa sohalarini bilishni talab qiladi. Eng mashhur faol til bu Prolog.

Xulosa

Hozirgi vaqtda eng keng tarqalgan tillar OOP. Java, yaratilganidan beri, har doim eng yuqori o'rinlarda, odatda, eng mashhur uchta tilda bo'lgan. OOP ga qo'shimcha ravishda u funktsional dasturlash elementlarini o'z ichiga oladi va siz dasturlarni yozishning turli uslublarini birlashtira olasiz. Java-ning ilovalar doirasi juda keng - bular biznes vazifalari, veb-serverlarni (backend) amalga oshirish, Android ilovalarini yaratish uchun asosiy til, o'zaro platformali dasturlash muhitlari va ish joylari (IDE/AWM) va modellashtirish va boshqalar. . Java-ning o'rni ayniqsa Enterprise sektorida - yuqori sifatli va uzoq muddatli kodni va eng murakkab biznes mantiqini amalga oshirishni talab qiladigan korporativ dasturiy ta'minot sohasida kuchli.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION