Бағдарламалаудың жоғары деңгейі - High-level programming language

Жылы Информатика, а жоғары деңгейлі бағдарламалау тілі Бұл бағдарламалау тілі мықты абстракция бөлшектерінен компьютер. Айырмашылығы бағдарламалаудың төменгі деңгейдегі тілдері, ол қолдануы мүмкін табиғи тіл элементтер, пайдалану оңайырақ болады немесе есептеу жүйелерінің маңызды аймақтарын автоматтандыруы (немесе тіпті жасыруы мүмкін) (мысалы, жадыны басқару ), бағдарламаны жасау процесін төменгі деңгейдегі тілді қолданудан гөрі қарапайым және түсінікті ету. Берілген абстракция мөлшері бағдарламалау тілінің қаншалықты «жоғары деңгейге» ие екендігін анықтайды.[1]

1960 жж. Қолданатын жоғары деңгейлі бағдарламалау тілдері құрастырушы деп аталады автокодтар.[2]Автокодтардың мысалдары COBOL және Фортран.[3]

Компьютерлерге арналған бірінші деңгейлі бағдарламалау тілі болды Планкалькүл, жасалған Конрад Зусе.[4] Алайда, бұл оның уақытында жүзеге асырылған жоқ, және оның бастапқы жарналары негізінен басқа дамулардан оқшауланған Екінші дүниежүзілік соғыс, «Superplan» тіліне тілдің әсерінен басқа Хайнц Рутишаузер сонымен қатар белгілі бір дәрежеде Алгол. Бірінші дәрежелі кең таралған жоғары деңгейдегі тіл болды Фортран, IBM-дің машинадан тәуелсіз дамуы Автокод жүйелер. Алгол, 1958 және 1960 жылдары Еуропалық және американдық компьютер ғалымдарының комитеттері анықтаған, енгізілген рекурсия Сонымен қатар кірістірілген функциялар астында лексикалық аясы. Бұл сондай-ақ олардың арасындағы айырмашылықты анықтаған алғашқы тіл болды мәні және параметрлері және оларға сәйкес семантика.[5] Алгол сондай-ақ бірнеше ұсынды құрылымдық бағдарламалау сияқты ұғымдар әзірге және егер олай болса конструкциялары және оның синтаксис ресми нотада бірінші болып сипатталған - «Backus – Наур формасы «(BNF). Шамамен сол кезеңде, Кобол енгізілді жазбалар (структуралар деп те аталады) және Лисп толық жалпылама енгізді лямбда абстракциясы бағдарламалау тілінде бірінші рет.

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

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

Абстракциялық жаза

Жоғары деңгейдегі тілдер жалпы міндеттерді стандарттайтын, бай отладка мүмкіндік беретін және архитектуралық агностицизмді қолдайтын мүмкіндіктерді ұсынуға ниетті; ал төменгі деңгейдегі тілдер көбінесе тиімді кодты шығарады оңтайландыру белгілі бір жүйенің архитектурасы үшін. Абстракциялық жаза дегеніміз - жоғары деңгейлі бағдарламалау техникасы өнімділікті оңтайландыруға немесе белгілі бір жабдықты пайдалануға қабілетсіздігі үшін төлейтін шығын, себебі олар төменгі деңгейдегі сәулет ресурстарының артықшылығын пайдаланбайды. Жоғары деңгейлі бағдарламалау деректердің жалпы құрылымы мен операциялары, жұмыс уақытының интерпретациясы және кодтық кодтардың аралықтары сияқты мүмкіндіктерді ұсынады; бұл көбінесе қажеттіліктен әлдеқайда көп операциялардың орындалуына, жадтың көп тұтынылуына және бағдарламаның үлкен екілік өлшеміне әкеледі.[6][7][8] Осы себепті, әсіресе жылдам және тиімді жұмыс істеуі қажет код, егер жоғары деңгейлі тіл кодтауды жеңілдетсе де, төменгі деңгейдегі тілді қолдануды қажет етуі мүмкін. Көп жағдайда бағдарламаның маңызды бөліктерін көбіне жоғары деңгейлі тілде қолмен кодтауға болады құрастыру тілі, әлдеқайда жылдам, тиімдірек немесе жай жұмыс істеуге әкеледі оңтайландырылған бағдарлама.

Алайда, қазіргі заманғы күрделене отырып микропроцессор архитектуралар, жоғары деңгейлі тілдерге арналған жақсы құрастырылған компиляторлар көбінесе тиімділігі жағынан төменгі деңгейлі бағдарламашылардың қолмен жасай алатындығымен салыстырылатын кодты шығарады, ал жоғары абстракция олардың төменгі деңгейдегі аналогтарынан гөрі жақсы нәтижелерді қамтамасыз ететін қуатты әдістерге мүмкіндік береді. нақты параметрлер.[9]Жоғары деңгейдегі тілдер белгілі бір есептеу жүйесінің архитектурасынан тәуелсіз құрастырылған. Бұл кез-келген есептеу жүйесінде осындай тілде жазылған бағдарламаны Интерпретацияланғанды ​​немесе қолдайтын қолдауды қолдана отырып жеңілдетеді JIT бағдарлама. Жоғары деңгейдегі тілдерді жақсартуға болады, өйткені олардың дизайнерлері жетілдірулерді дамытады. Басқа жағдайларда, жоғары деңгейдегі жаңа тілдер ең танымал конструкцияларды жаңа немесе жетілдірілген мүмкіндіктермен біріктіру мақсатымен бір немесе бірнеше басқалардан дамиды. Бұған мысал келтіруге болады Скала ол артқа үйлесімділікті сақтайды Java бұл дегеніміз, Java-да жазылған бағдарламалар мен кітапханалар бағдарламалау дүкені Scala-ға ауысса да, қолданыста болады; бұл ауысуды жеңілдетеді және осындай жоғары деңгейлі кодтаудың қызмет ету мерзімін шексіз етеді. Керісінше, төменгі деңгейлі бағдарламалар жүйелік архитектурадан тыс өмір сүреді, олар үлкен қайта қаралмай жазылған. Бұл «абстракциялық айыппұл» үшін инженерлік «айырбас».

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

Қазіргі кезде белсенді қолданылып жүрген жоғары деңгейлі бағдарламалау тілдерінің мысалдары Python, Visual Basic, Delphi, Перл, PHP, ECMAScript, Рубин, C #, Java және басқалары.

Шарттары жоғары деңгей және төменгі деңгей табиғатынан салыстырмалы болып табылады. Бірнеше онжылдықтар бұрын C тілі және ұқсас тілдер көбінесе «жоғары деңгей» болып саналды, өйткені ол өрнектерді бағалау, параметрленген рекурсивті функциялар, және мәліметтер типтері мен құрылымдары, ал құрастыру тілі «төменгі деңгей» деп саналды. Бүгінгі күні көптеген бағдарламашылар С-ны төменгі деңгейге жатқызуы мүмкін, өйткені ол үлкен деңгейге ие емес жұмыс уақыты -жүйе (қоқыс жиналмайды және т.б.), негізінен тек скалярлық операцияларды қолдайды және жадтың тікелей адрестелуін қамтамасыз етеді. Сондықтан ол құрастыру тілімен және машина деңгейімен оңай үйлеседі CPU және микроконтроллерлер.

Ассемблер тілінің өзі жоғары деңгей ретінде қарастырылуы мүмкін (бірақ егер онсыз қолданылса, көбіне бір-бірден) макростар ) ұсыну машина коды, өйткені ол тұрақты және (шектеулі) өрнектер сияқты ұғымдарды қолдайды, кейде тіпті айнымалылар, процедуралар және мәліметтер құрылымы. Машина коды, өз кезегінде, қарағанда біршама жоғары деңгейде микрокод немесе микро операциялар ішкі көптеген процессорларда қолданылады.[10]

Орындау режимдері

Қазіргі жоғары деңгейлі тілдер үшін үш жалпы орындалу режимі бар:

Түсіндірілген
Тілде жазылған код қашан түсіндірілді, оның синтаксисі оқылады, содан кейін тікелей орындалады, компиляция сатысы жоқ. Деп аталатын бағдарлама аудармашы бағдарлама ағынының артынан бағдарламаның әр операторын оқиды, содан кейін не істеу керектігін шешеді және оны орындайды. Аудармашы мен компилятордың гибриді оператордың машиналық кодына тұжырым жасайды және оны орындайды; содан кейін машина коды жойылады, егер жол қайтадан орындалса, оны жаңаша түсіндіру керек. Аудармашылар - тілдің мінез-құлқының қарапайым орындалуы, мұнда келтірілген басқа екі нұсқаға қарағанда.
Құрастырылды
Тілде жазылған код қашан құрастырылған, оның синтаксисі орындалмас бұрын орындалатын формаға айналады. Жинақтың екі түрі бар:
Машина кодын құру
Кейбір компиляторлар бастапқы кодты тікелей компиляциялайды машина коды. Бұл компиляцияның бастапқы режимі, және осылайша тікелей және толығымен машинаның төл кодына айналған тілдерді атауға болады шынымен құрастырылған тілдер. Қараңыз құрастыру тілі.
Аралық өкілдіктер
Тілде жазылған кодты компиляциялау кезінде аралық өкілдік, бұл ұсынысты бастапқы файлды қайта оқудың қажеті жоқ, кейінірек орындау үшін оңтайландыруға немесе сақтауға болады. Аралық ұсыныс сақталған кезде, ол келесі түрінде болуы мүмкін байт коды. Содан кейін оны орындау үшін аралық өкілдікті түсіндіру немесе одан әрі жинақтау керек. Виртуалды машиналар байт-кодты тікелей орындайтын немесе оны машиналық кодқа айналдыратын аралық көріністер мен шынымен құрастырылған тілдер арасындағы айқын айырмашылықты жойды.
Көзден дереккөзге аударылған немесе аударылған
Тілде жазылған код төменгі деңгейдегі тілге аударылуы мүмкін, ол үшін жергілікті код компиляторлары жиі кездеседі. JavaScript және тіл C - осындай аудармашылар үшін ортақ мақсат. Қараңыз CoffeeScript, Тауық Схема және Эйфель мысал ретінде. Нақтырақ айтсақ, C және C ++ кодтарын көруге болады (Эйфель тілінен алынған сияқты EiffelStudio IDE) кез-келген құрастырылған Эйфель жобасының EIFGENs каталогында. Эйфельде аударылған процесс транскомпилятор немесе транскомпиляция деп аталады, ал Эйфель компилятор транскомпилятор немесе қайнар көзден компилятор.

Тілдер қатаң емес екенін ескеріңіз түсіндірілді тілдер немесе құрастырылған тілдер. Керісінше, тілдік мінез-құлықты жүзеге асыру интерпретация немесе компиляцияны қолданады. Мысалға, ALGOL 60 және Фортран екеуі де түсіндірілді (олар көбінесе жинақталған болса да). Сол сияқты, Java бұл белгілерді іске асыруға емес, тілдерге қолдануға тырысудың қиындықтарын көрсетеді; Java байт-кодқа жинақталған, содан кейін не интерпретациялау арқылы орындалады (а Java виртуалды машинасы (JVM)) немесе компиляциялау (мысалы, дәл қазір компилятормен) HotSpot, қайтадан JVM-де). Сонымен қатар, компиляция, транскомпиляция және интерпретация тек компилятор артефактісінің сипаттамасымен ғана шектелмейді (екілік орындалатын немесе IL жиынтығы).

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

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

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ HThreads - RD сөздігі
  2. ^ Лондон, Кит (1968). «4, бағдарламалау». Компьютерлермен таныстыру. 24 Russell Square London WC1: Faber және Faber Limited. б. 184. ISBN  0571085938. Бағдарламалаудың «жоғары» тілдерін көбінесе автокодтар және процессор бағдарламасы, компилятор деп атайды.CS1 maint: орналасқан жері (сілтеме)
  3. ^ Лондон, Кит (1968). «4, бағдарламалау». Компьютерлермен таныстыру. 24 Russell Square London WC1: Faber және Faber Limited. б. 186. ISBN  0571085938. Мұнда автокодтардың құрылымы мен мақсатын көрсету үшін мысал ретінде келтіруге болатын екі жоғары деңгейлі бағдарламалау тілі - COBOL (жалпы бизнеске бағытталған тіл) және FORTRAN (формулярлық аударма).CS1 maint: орналасқан жері (сілтеме)
  4. ^ Гилой, Вольфганг, Қ. [де ] (1997). «Конрад Зусенің Планкалькүлі: бірінші жоғары деңгей» нон Нейман «Бағдарламалау тілі». IEEE Annals of Computing тарихы, т. 19, жоқ. 2, 17–24 б., 1997 ж. Сәуір-маусым. (реферат)
  5. ^ Деген ұғым болмағанымен сілтеме-параметрлер, бұл кейбір жағдайларда проблема болуы мүмкін. Бірнеше мұрагерлер, соның ішінде AlgolW, Algol68, Симула, Паскаль, Модула және Ада сондықтан анықтамалық-параметрлер енгізілген (байланысты C тілді отбасы орнына мекенжайларға рұқсат етілген мәні-параметрлер).
  6. ^ Сурана П (2006). «Тілдік абстракциялардың мета-компиляциясы» (PDF). Архивтелген түпнұсқа (PDF) 2015-02-17. Алынған 2008-03-17. Журналға сілтеме жасау қажет | журнал = (Көмектесіңдер)
  7. ^ Кукетаев. «Java-дағы кішігірім объектілер үшін деректерді жинауға арналған айыппұл (DAP) критерийі». Архивтелген түпнұсқа 2009-01-11. Алынған 2008-03-17.
  8. ^ Чатцигорджио; Стефанидтер (2002). «Процедуралық бағдарламалау тілдеріне қарсы бағытталғандық пен қуаттылықты бағалау». Блибергерде; Штроймайер (ред.) Жинақ - сенімді бағдарламалық технологиялар бойынша 7-ші халықаралық конференция - Ada-Europe'2002. Спрингер. б. 367.
  9. ^ Мануэль Карро; Хосе Ф. Моралес; Хенк Л.Мюллер; Г.Пуэбла; M. Hermenegildo (2006). «Шағын құрылғыларға арналған жоғары деңгейлі тілдер: кейс-стади» (PDF). Кіріктірілген жүйелер үшін компиляторлар, сәулет және синтез жөніндегі 2006 жылғы халықаралық конференция материалдары. ACM.
  10. ^ Хайд, Рендалл. (2010). Ассемблер тілі (2-ші басылым). Сан-Франциско: «Крахмал баспасы жоқ». ISBN  9781593273019. OCLC  635507601.
  11. ^ Чу, Яохан (1975), «Жоғары деңгейлі тілдік компьютерлік сәулет тұжырымдамалары», Жоғары деңгейдегі тілдік компьютерлік архитектура, Elsevier, 1-14 бет, дои:10.1016 / b978-0-12-174150-1.50007-0, ISBN  9780121741501

Сыртқы сілтемелер