Кіріспе

Компьютерлік жабдықтың егжей-тегжейін абстракциялайтын бағдарламалау тілі. Компьютерлік ғылымда жоғары деңгейдегі бағдарламалау тілі – компьютердің егжей-тегжейінен күшті абстракцияланған бағдарламалау тілі. Төмен деңгейдегі бағдарламалау тілдерінен айырмашылығы, ол табиғи тіл элементтерін пайдалана алады, пайдалану оңайырақ болуы мүмкін немесе есептеу жүйелерінің маңызды салаларын автоматтандыруы мүмкін (немесе тіпті толығымен жасыруы мүмкін) (мысалы, жад басқару), бағдарламаны әзірлеу процесін төмен деңгейдегі тілді қолданудан гөрі қарапайым және түсінікті етеді. Берілген абстракцияның мөлшері бағдарламалау тілінің қаншалықты «жоғары деңгейлі» екенін анықтайды. 1960 жылдары компиляторды қолданатын жоғары деңгейдегі бағдарламалау тілі әдетте автокод деп аталатын. Автокодтардың мысалдары COBOL және Fortran болып табылады. Компьютерлер үшін жасалған алғашқы жоғары деңгейдегі бағдарламалау тілі Конрад Цузе жасаған Plankalkül болды. Алайда, ол өз уақытында іске асырылмаған, ал оның алғашқы үлестері Екінші дүниежүзілік соғысқа байланысты басқа дамулардан едәуір оқшауланды, сонымен қатар тілдің Хайнц Рутихаузердің «Суперплан» тіліне әсерінен және белгілі бір дәрежеде ALGOL тіліне де ықпал етті. Бірінші кең таралған жоғары деңгейдегі тіл – Фортран, IBM-нің бұрынғы Autocode жүйелерінің машинаға тәуелсіз дамуы. ALGOL отбасы, 1958 жылы ALGOL 58 және 1960 жылы ALGOL 60 анықтамасымен Еуропалық және Америкалық компьютерлік ғалымдар комитеттері рекурсияны, сондай-ақ лексикалық аядағы ұялы функцияларды енгізді. ALGOL 60 сонымен қатар құндылық пен атау параметрлері мен олардың сәйкес семантикасы арасында айқын айырмашылықты көрсететін алғашқы тіл болды. ALGOL сонымен қатар бірнеше құрылымды бағдарламалау тұжырымдамаларын енгізді, мысалы while do және if then else конструкциялары және оның синтаксисі алғаш рет ресми белгіде сипатталған Backus–Naur формасы (BNF). Шамамен сол кезеңде COBOL жазбаларды (сонымен қатар, structs деп аталады) енгізді және Lisp алғаш рет бағдарламалау тілінде толық жалпы ламбдалық абстракцияны енгізді.

Ерекшеліктері

"Жоғары деңгейдегі тіл" машина тілінен абстракцияның жоғары деңгейін білдіреді. Регистрлер, жад адрестері және шақыру стегімен жұмыс істеудің орнына, жоғары деңгейдегі тілдер айнымалылармен, массивтермен, объектілермен, күрделі арифметикалық немесе логикалық өрнектермен, кіші программалармен және функциялармен, циклдармен, жіптермен, құлыптармен және басқа да абстрактілі компьютерлік ғылымдардың ұғымдарымен жұмыс істейді, бұл ретте бағдарламаның ең тиімді жұмыс істеуінен гөрі пайдалануға қолайлылығына баса назар аударады. Төмен деңгейдегі ассемблер тілдерінен айырмашылығы, жоғары деңгейдегі тілдерде машинаның түпкі опкодтарына тікелей аударылатын тілдік элементтердің саны аз немесе мүлдем жоқ. Сонымен қатар, жолдарды өңдеу процедуралары, объектіге бағытталған тілдің мүмкіндіктері және файлдық кіріс/шығыс сияқты мүмкіндіктер де болуы мүмкін. Жоғары деңгейдегі бағдарламалау тілдерінің бір ерекшелігі – бұл тілдер бағдарламашыны машинадан ажыратып, оны бөлек етеді. Яғни, ассемблер немесе машина тілі сияқты төмен деңгейлі тілдерден өзгеше, жоғары деңгейлі бағдарламалау бағдарламашының нұсқауларын күшейте алады және оның білместен көптеген деректерді қозғалысқа келтіре алады. Нұсқауларды орындау жауапкершілігі мен құқығы бағдарламашыдан машинаға берілді.

Абстракция үшін айыппұл

Жоғары деңгейдегі тілдердің мақсаты – жиі кездесетін тапсырмаларды стандарттау, кең ауқымды жөндеу мүмкіндіктерін ұсыну және архитектуралық тәуелсіздікті сақтау; ал төмен деңгейдегі тілдер көбінесе белгілі бір жүйелік архитектураға оңтайландыру арқылы тиімдірек кодты жасауға мүмкіндік береді. Абстракция салдары – жоғары деңгейдегі бағдарламалау техникаларының өнімділікті оңтайландыруға немесе белгілі бір аппаратты пайдалануға қабілетсіздігі үшін төлейтін құны, себебі олар төмен деңгейдегі архитектуралық ресурстардың артықшылықтарын пайдаланбайды. Жоғары деңгейдегі бағдарламалауда көбінесе жалпы дерек құрылымдары мен операциялар, орындалу кезіндегі түсіндіру және аралық код файлдары сияқты мүмкіндіктер қолданылады; бұл қажеттіден әлдеқайда көп операциялардың орындалуына, жадты көп пайдалануға және бағдарламаның үлкен өлшемге ие болуына әкелуі мүмкін. Сондықтан, ерекше жылдамдық пен тиімділік қажет болатын код, тіпті жоғары деңгейдегі тіл кодтауды жеңілдеткенімен, төмен деңгейдегі тілді пайдалануды талап етуі мүмкін. Көп жағдайларда бағдарламаның маңызды бөліктері, көбінесе жоғары деңгейдегі тілде жазылған, ассемблер тілінде қолмен кодталып, нәтижесінде әлдеқайда жылдам, тиімді немесе жай ғана сенімді жұмыс істейтін оңтайландырылған бағдарлама жасалуы мүмкін. Дегенмен, қазіргі заманғы микропроцессор архитектурасының күрделенуіне байланысты, жоғары деңгейдегі тілдер үшін жақсы жасалған компиляторлар көбінесе төмен деңгейдегі бағдарламашылардың қолмен жасайтын кодқа тең тиімділікке ие кодты шығарады, ал жоғары абстракция кейбір жағдайларда төмен деңгейдегі әріптестерінен гөрі жақсы нәтижелер беретін қуаттырақ техникаларды қолдануға мүмкіндік береді. Жоғары деңгейдегі тілдер белгілі бір есептеу жүйесінің архитектурасынан тәуелсіз жасалады. Бұл интерпретацияланған немесе JIT бағдарламасын қолдайтын кез келген есептеу жүйесінде осындай тілде жазылған бағдарламаны орындауды жеңілдетеді. Жоғары деңгейдегі тілдерді олардың жасаушылары жетілдіре береді. Басқа жағдайларда жаңа жоғары деңгейдегі тілдер бір немесе бірнеше тілдерден жаңа немесе жақсартылған мүмкіндіктері бар ең танымал құрылымдарды біріктіру мақсатымен дамиды. Мысалы, Java-мен кері үйлесімділікті сақтайтын Scala, яғни Java-да жазылған бағдарламалар мен кітапханалар, тіпті бағдарламалау ұйымы Scala-ға ауысса да, қолданыла береді; бұл ауысуды жеңілдетеді және мұндай жоғары деңгейдегі кодтаудың өмір сүру мерзімін шексіз етеді. Керісінше, төмен деңгейдегі бағдарламалар көбінесе жазылған жүйелік архитектурадан тысқары жерде маңызды өзгерістерсіз жарамайды. Бұл – "Абстракция салдары" үшін инженерлік "қайта бағалау".

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

Бүгінгі таңда белсенді қолданылып жүрген жоғары деңгейдегі бағдарламалау тілдеріне Python, JavaScript, Visual Basic, Delphi, Perl, PHP, ECMAScript, Ruby, C#, Java және тағы да басқалары жатады. Жоғары деңгей мен төмен деңгей терминдері өзінен-өзі салыстырмалы. Осыдан бірнеше он жыл бұрын C тілі және оған ұқсас тілдер көбінесе "жоғары деңгейдегі" деп саналды, себебі ол өрнектерді бағалау, параметрленген рекурсивті функциялар және дерек түрлері мен құрылымдары сияқты ұғымдарды қолдады, ал ассемблер тілі "төмен деңгейдегі" деп саналды. Бүгінгі таңда көптеген бағдарламашылар C-ді төмен деңгей деп атайды, өйткені оған үлкен орындалу уақыты жоқ (қоқыс жинау жоқ, т.б.), негізінен скалярлық операцияларды ғана қолдайды және тікелей жад адрестеуді қамтамасыз етеді; сондықтан ол ассемблер тілімен және процессорлар мен микробасқарушылардың машина деңгейімен оңай үйлеседі. Сондай-ақ, Брайан Керниган мен Деннис Ричидің "C бағдарламалау тілі" кітабының кіріспе тарауында C тілі "өте жоғары деңгейдегі" тіл емес деп сипатталған. Ассемблер тілінің өзі машиналық кодты жоғары деңгейдегі (бірақ көбінесе макростарсыз қолданылса, бір-бірге сәйкес) бейнелеу ретінде қарастырылуы мүмкін, себебі ол тұрақтылар мен (шектелген) өрнектерді, кейде тіпті айнымалылар, процедуралар және деректер құрылымдары сияқты ұғымдарды қолдайды. Машиналық код, өз кезегінде, көптеген процессорларда ішкі пайдаланылатын микрокод немесе микрооперациялардан сәл жоғары деңгейде болады.

Жоғары деңгейдегі тіл компьютерлік архитектурасы

Сонымен қатар, жоғары деңгейдегі тіл компьютерде тікелей іске асырылуы мүмкін – компьютер жоғары деңгейдегі тіл кодын тікелей орындайды. Бұл жоғары деңгейдегі тілге арналған компьютерлік архитектура деп аталады – компьютерлік архитектураның өзі нақты бір жоғары деңгейдегі тілге бағытталған етіп жасалады. Мысалы, "Бурауз" үлкен жүйелері ALGOL 60 үшін арналған машиналар болды.