Қатысушы:Zhamalbekov/зертхана

Уикипедия — ашық энциклопедиясынан алынған мәлімет
Навигацияға өту Іздеуге өту

Информатикада жоғары деңгейдегі бағдарламалау тілдері – бұл компьютер бөлшектерінен алынған қуатты абстракциясы бар бағдарламалау тілдері деп атаймыз. Төменгі деңгейдегі бағдарламалау тілдерімен салыстырғанда, жоғары деңгейлі бағдарламалау тілдері түпнұсқалық тілдердің элементтерін ғана қолданып қоймай, есептеуіш жүйелерінің маңызды және мағыналы бөліктерін автоматтандырып(компьютердің жадын басқару), бағдарлама құрау үдерісін өте жеңіл және түсінікті етеді. Компьютерлерге арналған ең алғашқы жоғарғы деңгейдегі бағдарламалау тілі “Планкалкюль” болды. Оны Конрад Цузе құрады. Алайда, өз заманында “Планкалкюль” толығырақ жүзеге аспаған еді. Ал ең бірінші кең таралған жоғары деңгейдегі бағдарламалау тілі Fortran болды. Ол IBM автокодының алдыңғы жүйелерінің машиналы-тәуелсіз ғылыми зерттемесі. 1958 және 1960 жылдары компьютерлік ғалымдардың еуропалық және америкалық комитеттері ретінде анықталған Algol, тек рекурсияны ғана енгізіп қоймай, сонымен қатар салынған функцияларды да лексикалық сфераға енгізді. Бұл мағына мен параметрлер-есімдер және олардың сәйкес семантикалары арасындағы анық айырмашылығы бар болған ең алғашқы бағдарламалау тілі болды. Algol бағдарламалаудың құрамалы түсініктерін көрсетті. Мысалы: while-do және if-then-else конструкциялары. Олардың синтаксистары Бэкус-Наур формының (БНФ) формалды тәсілі арқылы ең алғаш рет сипатталды. Сол уақыт период аралығында Cobol ең алғаш рет жазбаларды(басқаша structs деп аталады) көрсетті және Lisp ең алғаш рет бағдарламалау тіліндегі лямбданың жалпы абстракциясын көрсетті.


Ерекшеліктер Жоғары деңгейдегі бағдарламалау тілдері машина тіліндегі жоғарырақ деңгейдегі абстракцияға қатысы бар. Жоғары деңгейдегі бағдарламалау тілдері регистрлармен, жад адрестерімен және шақырулар стегімен жұмыс істеудің орнына, сілемдермен, айнымалылармен, объектермен, күрделі арифметикалық немесе логикалық өрнектермен, ішкі бағдарламалармен, функциялармен, циклдармен, ағындармен, блокировкалармен және т.б. информатиканың абстрактты түсініктерімен, бағдарламаның тиімді нәтижелігімен ыңғайлы қолдану акцентімен жұмыс жасайды. Төменгі деңгейдегі ассемблер тілдерімен салыстырғанда, жоғары деңгейдегі бағдарламалау тілдерінде машиналы опкодтарға тікелей аударатын тілдік элементтер өте аз. Сонымен қатар басқа да функциялар бар. Мысалы: жол өндеуі, объектті-бейімделген бағдарламалау тілдерінің функциялары және файлдардың енгізілуі/шығарылуы. Тағы бір атап өту керек ерекшелік, ол осы жоғары деңгейдегі бағдарламалау тілдерінің бағдарламалаушыны машинадан алшақтатып, екеуін бөліп тастауға мүмкіндік береді.Яғни, ассемблер және машиналық тіл сияқты төменгі деңгейдегі бағдарламалау тілдерімен салыстырғанда, жоғары деңгейдегі бағдарламалау тілдері бағдарламалаушы маманның инструкцияларын дамытып, бағдарламалаушының рұқсатынсыз фондық режимде мағлұматтардың көптеген қозғалыстарын шақыра алады. Бағдарламалаушыдан машинаға жауапкершілік және инструкция орындау билігі берілді. Абстракциялық айыппұл Жоғары деңгейдегі бағдарламалау тілдері жалпы тапсырмаларды стандарттайтын, қымбат жөндеуді қамтамасыз ететін және архитекторлық агностицизмды қолдайтын функцияларды ұсынуға ниеттеніп тұрса, төменгі деңгейдегі бағдарламалау тілдері жоғарырақ тиімділігі бар кодты, нақты жүйелік архитектураға арналған оптимизация арқылы жасайды. Абстракциялық айыппұл деп жоғары деңгейдегі бағдарламалау тілдер тәсілдерінің есептеуіш шектеулерінің, сәйкестік стандарттар немесе физикалық шектеулердің төменгі деңгейлі архитектуралық ресурстарға мүмкіндік алу сияқты жағдаяттарға бөгет болатын шекараны айтамыз. Жоғары деңгейлі бағдарламалау жалпы мағлұматтар/амалдар құрамалары, орындалу уақытының интерпретациясы және аралық кодтың файлдары сияқты функцияларды атқарады. Олар көбінесе өте көп амалдардың орындалуына алып келеді және әдетте қажет нормадан асып кетеді. Жадының өте жоғарырақ қолданысы және бағдарламаның жоғарырақ екілік өлшемі. Осы себепке байланысты, тез және тиімді жұмыс істеу керек код, жоғары деңгейлі бағдарламалау тілдерінің кодтауды жеңілдететіне қарамастан, төменгі деңгейдегі бағдарламалау тілдерінің қолдануын талап етуі мүмкін. Көп жағдайларда, жоғары деңгейлі бағдарламалау тілдеріндегі бағдарламалардың критикалық бөліктері, ассемблер тілінде қолдан кодталуы мүмкін. Осы жағдайлар өте жылдам, әрі нәтижелі немесе сенімді функциясын атқаратын оптимизацияланған бағдарламаны қалыптастырады. Алайда, заманауи микропроцессорлы архитектуралардың қиыншылықтарының дамуына байланысты, жоғары деңгейдегі бағдарламалау тілдеріне сапалы құрастырылған компиляторлардың жиі-жиі құрастыратын кодының тиімділігін, жақсығырақ ортақ нәтижелерді қамтамасыз ететін және қуаттығырақ тәсілдерді мүмкін қылдыра алатын жоғарырық абстракциямен салыстыруға болады. Жоғары деңгейдегі бағдарламалау тілдері есептеуіш жүйенің нақты архитектурасынан тәуелсіз құрастырылған. Бұл қасиет осы тілде жазылған және JIT немесе интерпретацияланған бағдарламаларға үйлесімділік қолдауы бар кез-келген есептеуіш жүйеде бағдарламаның орындалуын жеңілдетеді. Жоғары деңгейдегі бағдарламалау тілдері жақсартыла алады, ал олардың дизайнерлері жақсартулар құрастырып жатыр. Басқа жағдайларда жаңа жоғары деңгейдегі бағдарламалау тілдері, жаңа немесе жақсартылған функциялары бар танымалдырақ конструкцияларды біреуден немесе бірнешеуден біріктіру мақсатында дамиды. Мысал ретінде “Javawhich”-пен қайтымды сәйкестікті қолдайтын “Scala” болып келеді. Бұл дегеніміз, бағдарламалық цехтың “Scala”-ға ауыстырылып қосылуына қарамастан, “Java”-да жазылған бағдарламалар мен кітапханалардың жалғасып қолданыла алатындығын білдіреді. Бұл қасиет орын ауыстыруды жеңілдетіп, жоғары деңгейлі кодтаудың өмір сүру ұзақтығын белгісіз қылдырады. Осымен салыстырғанда, қатал тексерусіз жазылған төменгі деңгейлі бағдарламалар жүйелі архитектураның шет жағында сирек-сирек сақталады. Бұл абстракциялық айыппұлға арналған инженерлік “келісім” болып келеді.

Салыстырмалы мағына 

Қазіргі кездегі жиі қолданыстағы жоғары деңгейлі бағдарламалау тілдеріне Python, Visual Basic, Delphi, Perl, PHP, ECMAScript, Ruby және басқа көптеген тілдерді жатқызуға болады. Жоғары деңгейлі және төмен деңгейлі деген терминдер өз табиғаты бойынша салыстырмалы. Бірнеше он жылдықтар бұрын, ассемблер тілі төменгі деңгейдегі бағдарламалаушы тіл болып саналғанда, С бағдарламалау тілі және оған аналог бола алатын бағдарламалаушы басқа тілдерде өрнекті бағалау, рекурсивті функцияларды параметрлеу, типтер және мағлұматтар құрылымы сияқты түсініктерді қолданғаны үшін жоғары деңгейлі бағдарламалаушы тілдер деп саналды. Алайда қазіргі кезде көптеген бағдарламалаушы мамандардың ойынша С тіліндегі орындалу жүйесіне кететін уақыттың аз болуына, негізінде тек скалярлы амалдарды қолдануына және жадының тікелей дербестендіруін қамтамасыз етуіне байланысты осы тілді төменгі деңгейдегі бағдарламалаушы тілдер қатарына жатқызады. Сондықтан да, осы бағдарламалаушы тіл ассемблер тілімен, машиналы деңгейдегі процессор және микробақылаушылармен үйлесімді болып келеді. Тұрақтылар, өрнектер, кейде айнымалылар, процедуралармен мағлұматтар құрылымы сияқты түсініктерді, ассемблер бағдарламалаушы тілі қолданатынына байланысты, осы тіл машина кодының жоғары деңгейдегі түсінігі бола алады. Машина коды өз кезегінде, көптеген процессорлардың ішіндегі қолданылатын микрокод немесе микроамалдарға қарағанда бірнеше деңгейге жоғарырақ орналасады. Орындалу режимі Заманауи жоғары деңгейлі бағдарламалаушы тілдерге арналған 3 негізгі орындалу режимдері бар.

 Интерпретацияланған 

Код интерпретациясы кезінде оның синтаксисы оқылып, содан кейін тікелей компиляциясыз орындалады. Интерпретатор деп аталатын бағдарлама, басқа бағдарламалардың әр нұсқауын оқып, бағдарлама ағынына ілеседі және содан кейін не істеу керек екенін шешіп алып, сол істі жасайды. Интерпретатордың және компилятордың гибриді машина кодына нұсқауды құрастырып оны орындайды; егер жол қайтадан орындалса, онда машина коды интерпретациялану мақсатында серпіліс жасайды. Интерпретаторлар әдетте жоғарыда айтылған екі варианттарға қарағанда, бағдарламалаушы тілдер тәртібінің қарапайым іс жүзінде жүзеге асырылуы болып келеді Компиляцияланған Код компиляциясы кезінде оның синтаксисі іске қосу алдында орындалу формасына айналады. Компиляцияның екі түрі бар: Машина кодының құралуы Кейбір компиляторлар алғашқы кодты тікелей машина кодына компиляциялайды. Бұл алғашқы режим компиляциясы және тікелей және толық машина кодына айнала алатын тілдер, “шыныменде компиляцияланған” тілдер деп атала алады. Аралық көрсетілу Аралық көрсетілуге компиляцияланған, бағдарламалаушы тілде жазылған код кезінде, алғашқы файлды қайтадан оқу қажеттілігі жоқ кезекті орындалу үшін осы көрсетілу оптимизациялануы немесе сақталуы мүмкін. Аралық көрсетілу сақталған кезде, ол байт-код сияқты формада болуы мүмкін. Кейін аралық көрсетілу орындалу мақсатында, ол интерпретациялануы немесе қосымша компиляциялануы керек. Байт-кодын тікелей орындайтын немесе оны машина кодына ары қарай ауыстыратын виртуалды машиналар, аралық көрсетулер және компиляцияланған бағдарламалаушы тілдер арасындағы нақты айырмашылықтарды түсінуге қиындатады. Транс-компиляция немесе дерекөзден-дереккөзге аудару Бағдарламалаушы тілде жазылған код, төмен деңгейлі бағдарламалаушы тілдерге аударылуы мүмкін. Осындай аударушылар үшін Javascript және С бағдарламалаушы тілдері жиі-жиі қолданылады. Мысалы : CofeeScript, Chicken Scheme және Eiffel. Соның ішінде C және C++ тілдерінің туындатылған коды, EIFGEN каталогының кез-келген компиляцияланған эйфел жобасында байқалуы мүмкін. Eiffel-де аударылған үдеріс Транс-комиляцияланатын немесе Транс-компиляцияланған және Eiffel-дің Transcompiler сияқты компиляторға қатысы бар.

Тілдердің сапалы интерпретацияланған немесе компиляцияланған емес екендігіне көңіл бөлген жөн болады. Тілдердің техникалық жағдайын жүзеге асырылуында интерпретация немесе компиляция қолданылады. Интерпретацияланған мысалдар ретінде Алгол-60 және Фортран бола алады. Сәйкесінше, Java жүзеге асырылудың орнына тілдерге осы таңбашаларды қолдану үшін талпыну кезінде, қиыншылықтарды көрсетеді. Java байт-кодқа компиляцияланады және байт-код дәйекті түрде интерпретация немесе компиляция есебінен орындалады. Сонымен қатар, компиляциялану, транс-компиляциялану және интерпретациялану компилятор артефактының тек сипаттауымен ғана шектелмейді. Жоғары деңгейлі компьютердің архитектурасы Нұсқа ретінде, жоғары деңгейлі бағдарламалаушы тілдер үшін компьютер арқылы тікелей жүзеге асырылу мүмкіндігі бар. Компьтер тікелей HLL кодын орындайды. Бұл жоғары деңгейлі тілді компьютер архитектурасы ретінде саналады. Компьютер архитектурасы өз кезегінде арнайы жоғары деңгейлі бағдарламалаушы тілдің мақсаты болуына арналған.