JavaRush /Блоги Java /Random-TG /Сатҳи забонҳои барномасозӣ
Marat Sadykov
Сатҳи

Сатҳи забонҳои барномасозӣ

Дар гурӯҳ нашр шудааст

Муқаддима

Забонҳои гуногуни барномасозӣ кадомҳоянд? Дар онҳо чӣ гуна мафҳумҳо ҷойгир шудаанд? Онҳо чӣ гуна инкишоф ёфтанд? Дар ин мақола, мо намудҳои забонҳои барномасозиро дар асоси сатҳҳои номбаршуда дида мебароем - аз рамзҳои мошин (сатҳи паст, наздик ба сахтафзори компютерӣ) то забонҳо ба монанди Java ё C# (сатҳи баланд). Чӣ қадаре ки листинги матнии барнома дар роҳи табдил ба маҷмӯи сифрҳо ва якҳо камтар табдил ёбад, ҳамон қадар сатҳ пасттар мешавад.
Сатҳи забонҳои барномасозӣ - 1
Минбаъд мо дида мебароем:
  1. Забонҳои сатҳи паст (рамзҳои мошин ва васлкунӣ)
  2. Сатҳи миёна (C, Fortran….)
  3. Сатҳи баланд (C++, Java, Python, Ruby, JavaScript...)
Сатҳ инчунин тавсиф мекунад, ки рӯйхати барномаи оянда барои татбиқи татбиқ то чӣ андоза бояд муфассал бошад. Ин раванд барои одамон то чӣ андоза содда аст? Сатҳи забонро набояд нишондиҳандаи якхелаи имкониятҳои он донист. Забони барномасозӣ абзорест, ки дар як соҳа муассир ва дар дигар соҳаҳо камтар муфид аст. Хам дуредгар ва хам дуредгар бо чуб кор мекунанд. Якум асбоби асосй — мачмуи чизель, дуюм — табар дорад. Аммо дуредгар кабинети кандакориро зеботар мегардонад, дуредгар бошад, тезтар хона месозад. Ҳарчанд ҳар кадоми онҳо кори дигареро иҷро карда метавонанд, аммо онҳо онро хеле камтар самаранок иҷро мекунанд. Маълумотҳои гуногун дар компютер ҳамчун маҷмӯи сифрҳо ва якҳо ифода карда мешаванд. Фармонҳои идоракунӣ барои коркарди он ҳамон маълумоте мебошанд, ки дастурҳоро дар бар мегиранд, ки ҷойгиршавии информатсияи зарурӣ ва усули тағир додани онро муайян мекунанд.

Забонҳои мошин (сатҳи пасттарин)

Мо бояд аз минтақаи нармафзор ба минтақаи сахтафзор як сафари кӯтоҳе кунем. Биёед онро дар шакли соддашуда дида бароем. Протсессор «мағзи» асосии компютер мебошад. Дар motherboard, ки дар он насб карда шудааст, дорои контроллерҳоест, ки барои муошират бо дастгоҳҳои дигар тавассути автобусҳо (каналҳои маълумот барои алоқа) истифода мешаванд.
Сатҳи забонҳои барномасозӣ - 2
Баъзеҳо бо суръати баланд кор мекунанд (тирҳои сурх): протсессор аз хотира фармонҳоро мегирад ва маълумотро идора мекунад, корти видео, махсусан дар бозиҳои 3D, миқдори зиёди матнҳо, шаклҳо, координатаҳои пиксел ва дигар an objectҳоро барои сохтани тасвир дар экрани монитор истеъмол мекунад . Дигарон (ба сабаби маҳдудияти суръати мубодилаи иттилоот) ба чунин нишондиҳандаҳои баланд ниёз надоранд. Дар диаграмма дастгоҳҳои гуногуни дохилӣ ва берунӣ бо тирчаҳои сабз пайваст карда шудаанд.

Ҷаҳони ботинии протсессор

Ҳама фармонҳои протсессор аз хотира барои иҷро дар шакли дуӣ меоянд. Формат, шумора, зермаҷмӯи дастурҳо аз меъмории он вобаста аст. Аксари онҳо бо ҳамдигар номувофиқанд ва ақидаҳои гуногунро пайравӣ мекунанд. Ва инчунин намуди фармон аз реҷаи (8/16/32... умқи бит) ва манбаи маълумот (хотира, регистр, стек...), ки бо он протсессор кор мекунад, вобаста аст. Як амалро бо дастурҳои гуногун ифода кардан мумкин аст. Протсессор барои илова кардани ду операнд (ADD X,Y) ва илова кардани як ба операнд (INC X) дастурҳо дорад. Илова кардани сегона ба операнд мумкин аст ҳамчун ADD X,3 ё бо занг задан ба INC X се маротиба анҷом дода шавад.Ва барои протсессорҳои гуногун пешгӯӣ кардан ғайриимкон аст, ки кадоме аз ин усулҳо аз ҷиҳати суръат ё изофаи хотира оптималӣ хоҳанд буд. Барои роҳат, иттилооти дуӣ дар шакли шонздаҳӣ навишта шудааст. Биёед як қисми барномаи шиносро баррасӣ кунем (забони C, ки синтаксиси он ба Java монанд аст)
int func() {
    int i = getData("7") ;
    return ++i;
   ...
}
Коде, ки ҳамон амалҳоро дар шакли пайдарпайии дастурҳо барои протсессор амалӣ мекунад: ... 48 83 ec 08 bf bc 05 20 00 31 c0 e8 e8 fe ff ff 48 83 c4 08 83 c0 01 ... Ин аст он чизе ки забони барномасозии сатҳи пасти протсессори Intel ба назар мерасад. Фрагменте, ки методро бо аргумент даъват мекунад ва натиҷаро як маротиба зиёд мекунад. Ин забони мошинист (code), ки мустақиман бидуни тағирот ба протсессор барои иҷро интиқол дода мешавад. Тарафдор:
  • Мо комилан устои вазъият мебошем, мо барои истифодаи протсессор ва аппаратураи компютерй имкониятхои васеъ дорем.
  • Ҳама имконоти ташкил ва оптимизатсияи code барои мо дастрасанд.
Камбудиҳо:
  • Дар бораи кори протсессорҳо дониши васеъ доштан ва ҳангоми иҷрои code миқдори зиёди омилҳои сахтафзорро ба назар гирифтан лозим аст.
  • Эҷоди барномаҳое, ки нисбат ба мисоли овардашуда каме мураккабтаранд, боиси якбора зиёд шудани вақти навиштани code ва ислоҳи он мегардад.
  • Вобастагии платформа: барномае, ки барои як протсессор сохта шудааст, умуман аз дигарон кор намекунад. Мумкин аст, ки барои ин протсессор дар дигар шеваҳои кори он таҳриркунии code талаб карда шавад.
Рамзҳои мошинӣ дар ибтидои компютерҳо ба таври васеъ истифода мешуданд, дар замони пешравони компютер усулҳои дигари барномасозӣ вуҷуд надоштанд. Дар айни замон, онҳо баъзан аз ҷониби муҳандисони микроэлектроника ҳангоми таҳия ё санҷиши сатҳи пасти протсессорҳо истифода мешаванд.

Забони ассамблея (сатҳи паст)

Баръакси компютер, шумо ва ман маълумотро дар шакли матн/семантикӣ беҳтар қабул мекунем, на дар шакли рақамӣ. Шумо метавонед дар смартфони худ ба осонӣ панҷоҳ номи алоқаро номбар кунед, аммо шумо гумон аст, ки рақамҳои телефони мувофиқи онҳоро аз ёд бинависед. Бо барномасозӣ низ ҳамин тавр аст. Мо бо андешидани се қадами асосӣ ба зинапояи навъи худ меравем:
  • Биёед як дастури рамзиро ба гурӯҳҳои дастурҳои протсессори рақамӣ, ки амалҳои мувофиқро иҷро мекунанд, пайваст кунем.
  • Биёед далелҳои дастурҳои протсессорро алоҳида таъкид кунем.
  • Биёед қобorяти номгузории минтақаҳои хотира, тағирёбандаҳо ва ҷойгиршавии фармонҳои алоҳидаро ҷорӣ кунем.
Биёед порчаҳои барномаи қаблиро дар codeи мошинӣ (марказ) ва дар забони ассемблер (аз рост) муқоиса кунем:
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
Тавре ки шумо мебинед, раванди навиштани барнома содда карда шудааст: барои тавлиди арзишҳои фармонҳои рақамӣ, ҳисоб кардани дарозии гузариш, паҳн кардани маълумот дар хотира дар ячейкаҳои он ва дигар хусусиятҳои протсессор истифода бурдани маълумотномаҳо лозим нест. Мо амали заруриро аз маҷмӯи фармонҳои рамзӣ ва аргументҳои барои мантиқи иҷро зарурӣ тавсиф мекунем ва сипас барномаи тарҷумон файли матниро ба маҷмӯи сифрҳо ва барои протсессор фаҳмо тарҷума мекунад. Тарафдор:
  • Раванди навиштан ва тағир додани code содда карда шудааст.
  • Назорат аз болои тамоми захирахои аппаратура нигох дошта мешуд.
  • Гузаронидани барнома ба платформаҳои дигар нисбатан осонтар аст, аммо онҳо вобаста ба мутобиқати сахтафзор тағиротро талаб мекунанд.
Камбудиҳо:
  • Забони ассемблер забони барномасозии сатҳи паст аст. Эҷоди ҳатто қисмҳои хурди code душвор аст. Гайр аз ин, кори конкретии тачхизотро низ ба назар гирифтан лозим аст.
  • Вобастагии платформа.
Намунаи маъмултарини намоишии Java:
public static void main(String[] args) {
    System.out.println("Hello World!");
}
(синтаксиси NASM, бо истифода аз Windows API ва kernel32.lib) чунин назар хоҳад кард:
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:
Мисли рамзҳои мошин, забони ассемблерро бештар муҳандисон ва барномасозони система истифода мебаранд. Он барои навиштани қисмҳои аз сахтафзор вобастаи ядрои системаи оператсионӣ истифода мешавад, ки барои хусусиятҳои татбиқи драйверҳо барои дастгоҳҳои гуногуни периферӣ аз ҷиҳати вақт муҳим ё муҳиманд. Аммо вақтҳои охир онҳо ба он камтар ва камтар муроҷиат мекунанд, зеро истифодаи он интиқоли барномаҳоро ба платформаҳои дигар хеле коҳиш медиҳад. Баъзан онҳо раванди ҷудокуниро истифода мебаранд - онҳо рӯйхати монтажи барномаро аз рамзҳои рақамӣ эҷод мекунанд, то мантиқи иҷрои порчаҳои хурдро таҳлил кунанд. Дар ҳолатҳои нодир, агар рамзи аслии сатҳи баланд мавҷуд набошад: таҳлor вирусҳо барои мубориза бо онҳо ё гум кардани codeи манбаъ. Забони ассамблея насли якум/дуюм ҳисобида мешавад (мо пеш аз пайдоиши ассемблер псевдоcodeҳо ва фарқияти онҳоро аз фармонҳои рамзӣ алоҳида баррасӣ намекунем). Ман мехоҳам истифодаи ассемблерро дар Demo Scene таъкид намоям: омезиши санъат, математика ва рамзгузории сатҳи паст, ки ғояҳои бадеии эҷодкорони онҳоро дар шакли барномаҳое, ки клипҳои видеоиро бо маҳдудияти захираҳо тавлид мекунанд, таҷассум мекунад. Аксар вақт ҳаҷми умумии барнома ва файли маълумот набояд аз 256 byte зиёд бошад (формати 4/64 килоbyte низ маъмул аст). Ин аст як мисоли барномаи 4 KB:

Гурӯҳи C / Забонҳои Фортран (сатҳи миёна / олӣ)

Бо рушди имкониятҳои технологияи компютерӣ, ҳаҷми функсияҳо ва мӯҳлатҳои татбиқи code дар ассемблер қонеъкунанда набуданд. Хароҷоти навиштан, санҷиш ва нигоҳдории барномаҳо назар ба қобorятҳои онҳо ба андозаи тезтар афзоиш ёфт. Зарур буд, ки талаботро аз барномасоз дар робита ба дониши кори таҷҳизот коҳиш дод, ба ӯ асбоберо диҳад, ки ба ӯ имкон медиҳад бо забонҳои ба мантиқи инсон наздик нависад. Ба сатҳи нави намудҳои забонҳои барномасозӣ гузаред. Имконияти тақсим кардани модулҳои гуногун бо даъвати минбаъдаи пайдарпай (парадигмаи барномасозии мурофиавӣ), таъмин намудани намудҳои гуногуни маълумот бо қобorяти сохтани онҳо ва ғайра. Илова бар ин, ин тадбирҳо интиқоли codeро ба платформаҳои дигар, ташкor бароҳати кори даста. Яке аз аввалин забонҳое, ки ҳамаи гуфтаҳои болоро дастгирӣ мекард , Фортран буд, ки дар солҳои 50-уми асри гузашта таҳия шудааст . Қобorяти эҷод дар шакли матн бо тавсифи мантиқи иҷро бо истифода аз ҳалқаҳо, шохаҳо, зерпрограммаҳо ва кор бо массивҳо ва пешниҳоди маълумот дар шакли ададҳои воқеӣ, бутун ва мураккаб муҳандисон ва олимонро шод гардонд. Дар як муддати кутох чорчубахо» илмй ва китобхонахо ба вучуд омаданд. Ҳамаи ин натиҷаи он буд, ки Фортран имрӯз ҳам аҳамияти худро дорад, гарчанде дар муҳити танги илмӣ ва инкишоф меёбад, зеро бағоҷи таҳаввулот хеле калон аст, танҳо китобхонаи IMSL аз соли 1970 (!) фаъолона инкишоф меёбад. бисёр нармафзори дахлдори шабеҳ шумо метавонед дар хотир доред? - кӯҳнапарастон? Шохаи дигари рушди забонҳо дар ин сатҳ С. Агар Фортран асбоби олимон гардад, пас Си барои кумак ба барномасозон дар сохтани нармафзори амалӣ: системаҳои оператсионӣ, драйверҳо ва ғайра офарида шудааст. Забон ба шумо имкон медиҳад, ки тақсимоти хотираро дастӣ идора кунед ва дастрасии мустақим ба захираҳои сахтафзорро фароҳам меорад. Барномасозони C бояд an objectҳои сатҳи пастро назорат кунанд, аз ин рӯ бисёриҳо бар он ақидаанд, ки C забони пешрафтаи ассемблер аст ва онро аксар вақт забони "сатҳи миёна" меноманд. Забони Си бо ворид кардани чопкунии маълумот ба ассемблер, унсурҳои барномасозии просессуалӣ ва модулӣ, то ҳол яке аз забонҳои асосии барномасозии система мебошад, ки ба он рушди босуръати микроэлектроника дар вақтҳои охир мусоидат мекунад. Ҳама намуди гаҷетҳо, контроллерҳо, шабакавӣ ва дигар дастгоҳҳо ба драйверҳо, татбиқи протоколҳои ҳамкорӣ ва дигар нармафзори нисбатан паст барои амалисозии ҳамкорӣ бо таҷҳизот ниёз доранд. Њамаи гуфтањои боло ба талаботи имрўза ба забон мусоидат мекунанд. Принсипҳои ба an object нигаронидашуда ва функсионалӣ минбаъд дар шакли C++, C#, Java таҳия карда шуданд, ки аз синтаксиси C бисёр чизҳоро гирифтаанд .
  • Соддасозии раванди эҷоди code: ҷорӣ намудани намудҳо, тақсимот ба модулҳо, кам кардани рӯйхати барномаҳо.
  • Прозрачная логика заложенного алгоритма вследствие ухода от машинных codeов к более понятным для человека командам в семантически описательном стиле.
  • Переносимость. Стало достаточно перекомпorровать текст программы для выполнения на другой платформе (возможно, с небольшой модификацией).
  • Скорость откомпorрованных программ.
Минусы:
  • Отсутствие автоматического управления памятью и необходимость постоянного её контроля.
  • Отсутствие реализации концепций an objectно-ориентированного и функционального программирования.

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

Забонҳои барномасозии сатҳи баланд, аз нуқтаи назари эҷоди нармафзор, беш аз пеш ба дур шудан аз рамзҳои мошинӣ ва татбиқи парадигмаҳои гуногуни барномасозӣ ба ғайр аз рамзҳои мурофиавӣ оғоз кардаанд. Инҳо инчунин татбиқи принсипҳои ба an object нигаронидашударо дар бар мегиранд. C++, Java, Python, JavaScript, Ruby... - доираи забонҳои ин навъи имрӯз маъмултарин ва серталаб аст. Онхо барои чорй намудани программахои гуногун имкониятхои бештар фарохам меоваранд ва «ихтисос»-и хар кадоми онхоро аник муайян кардан мумкин нест. Аммо маъруфияти барнома дар соҳаҳои дахлдор ба китобхонаҳо/чаҳорчӯбаҳои кор бо онҳо вобаста аст, масалан: JavaScript - Frontend. Забон барои ҳамкории байни браузери мизоҷ ва корбар ва serverи дурдаст тарҳрезӣ шудааст. Китобхонаҳои маъмултарин Angular, React ва VUE мебошанд. Дар айни замон, он дар веб ва дигар serverҳо (backend) нисбатан фаъолона истифода мешавад, Node.js махсусан маъмул аст. Ruby - Backend. Он барои сохтани скриптҳо (файлҳои хидматӣ) ва дар serverҳои веб истифода мешавад. Чаҳорчӯби асосӣ Ruby On Rails мебошад. Python домени илмӣ ва муҳандисӣ аст (ғайр аз домени веб). Он алтернатива ба бастаҳои стандартии ҳисоббарорӣ ва риёзӣ (Mathematica, Octave, MatLab...) аст, аммо дорои семантикаи муқаррарии забон ва шумораи зиёди китобхонаҳо мебошад. Дар соҳаи системаҳои омӯзиши мошинсозӣ, омор ва зеҳни сунъӣ мухлисони зиёде дорад. Ба китобхонаҳои зуд-зуд истифодашаванда django, numpy, pandas ва tensorflow дохил мешаванд. C++ – Рушди универсалӣ ва эволютсионии забони Си Имкониятҳои барномасозии функсионалӣ ва ба an object нигаронидашударо бидуни гум кардани қобorяти мутақобила бо сахтафзори сатҳи паст таъмин мекунад. Аз ин рӯ, ҳангоми сохтани нармафзор маҳсулнокӣ ва чандирӣ ба амал меояд, аммо нарх низ мувофиқ аст: монеаи баланд барои воридшавӣ аз сабаби мушаххасоти мураккаби забон, зарурати назорати мустақил аз болои захираҳо ҳангоми иҷрои барнома. Бо истифода аз он бисёр нармафзорҳои яккорбар ва системавӣ навишта мешаванд: модулҳои системаи амалиётӣ (Windows, Symbian...), бозиҳо, муҳаррирҳо (Adobe Photoshop, Autodesk Maya...), пойгоҳи додаҳо (MSSQL, Oracle...), плеерҳо ( WinAmp...) ва ғайра. Бояд қайд кард, ки нармафзори муосир як маҳсулоти мураккабест, ки дар таҳияи он якбора якчанд забони барномасозӣ истифода мешавад ва муайян кардани дараҷаи иштироки ҳар яки онҳо дар натичаи умумй.

Пешрафти минбаъда

Дар вактхои охир боз як намуди барномасозй маъруфият пайдо мекунад - функсионалӣ (инкишофи минбаъдаи сатҳи забон) . Дар ин ҷо як намуди дигари абстраксия барои ҳисобҳо - функсияҳое мавҷуданд, ки маҷмӯи функсияҳоро ҳамчун аргумент мегиранд ва дигареро бармегардонанд. Нақши тағирёбандаҳоро ҳамон функсияҳо иҷро мекунанд (тағйирёбандаҳое, ки ба мо шиносанд, танҳо ифодаҳои доимӣ мебошанд, ба монанди ниҳоӣ пеш аз эъломияи навъи Java). Худи функсия дар доираи худ баста аст, натиҷаи амали он танҳо аз аргументҳои додашуда вобаста аст. Аз ин ду хосияти аҷиб бармеояд:
  • Барои санҷиш ба мо танҳо аргументҳои функсия лозиманд (натиҷаи кор аз тағирёбандаҳои беруна вобаста нест ва ғ.).
  • Барномаи услуби функсионалӣ ба таври мӯъҷизавӣ ба ҳамзамон омода аст: зангҳои функсионалии пайдарпай метавонанд дар риштаҳои ҳамсоя дода шаванд (зеро ба онҳо омилҳои беруна таъсир намерасонанд) ва қуфлҳоро талаб намекунанд (яъне мушкилоти ҳамоҳангсозӣ вуҷуд надоранд). Бо дарназардошти қабули васеъи протсессори бисёраслӣ як ангезаи хуб барои ҷудо кардани вақт ба ин мавзӯъ.
Аммо, ҳадди ниҳоии воридшавӣ нисбат ба OOP баландтар аст: барои рамзи самаранок сохтани барномае лозим аст, ки алгоритми иҷроро дар шакли функсияҳо тавсиф мекунад. Аммо инчунин барои услуби функсионалии холис донистани асосҳои мантиқ ва назарияи категория хуб мебуд. Маъмултаринҳо Haskell, Scala, F# мебошанд. Аммо натарсед, ки унсурҳои барномасозии функсионалӣ дар Java (инчунин дар дигар забонҳои насли сеюми муосир) пайдо шудаанд ва онҳоро бо OOP якҷоя кардан мумкин аст. Шумо бо тамоми ин тафсилот дар таҷрибаомӯзии онлайнии JavaRush ба таври муфассал шинос хоҳед шуд. Соҳаи барномасозии мантиқӣ (сатҳи навбатии забонҳо) аз сабаби кам будани талабот то ҳол татбиқи васеи амалӣ пайдо накардааст. Барои сохтани барномаҳо дониши асосҳои математикаи дискретӣ, мантиқи предикатӣ, воситаҳои маҳдудкунӣ ва дигар шохаҳои мантиқи математикиро талаб мекунад. Забони фаъолтарин маъмултарин Prolog мебошад.

Хулоса

Дар айни замон, забонҳои маъмултарин OOP мебошанд. Java, аз замони таъсиси худ, ҳамеша дар боло, одатан дар се забони маъмултарин буд. Илова ба OOP, он дорои унсурҳои барномасозии функсионалӣ мебошад ва шумо метавонед услубҳои гуногуни навиштани барномаҳои худро якҷоя кунед. Доираи барномаҳои Java хеле васеъ аст - инҳо вазифаҳои тиҷоратӣ, татбиқи serverҳои веб (backend), забони асосӣ барои эҷоди замимаҳои Android, муҳитҳои барномасозии кросс-платформавӣ ва ҷойҳои корӣ (IDE/AWM) ва моделсозӣ ва ғайра мебошанд. . Мавқеи Java махсусан дар бахши Enterprise - як соҳаи нармафзори корпоративӣ қавӣ аст, ки рамзи баландсифат ва дарозмуддат ва татбиқи мураккабтарин мантиқи тиҷоратро талаб мекунад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION