Кіріспе
Программа, бастапқы кодты жеке компиляция қадамысыз орындайтын
In computer science, an interpreter is a computer program that directly executes instructions written in a programming or scripting language, without requiring them previously to have been compiled into a machine language program. An interpreter generally uses one of the following strategies for program execution:
Parse the source code and perform its behavior directly;
Translate source code into some efficient intermediate representation or object code and immediately execute that;
Explicitly execute stored precompiled bytecode made by a compiler and matched with the interpreter's Virtual Machine. Early versions of Lisp programming language and minicomputer and microcomputer BASIC dialects would be examples of the first type. Perl, Raku, Python, MATLAB, and Ruby are examples of the second, while UCSD Pascal is an example of the third type. Source programs are compiled ahead of time and stored as machine independent code, which is then linked at run time and executed by an interpreter and/or compiler (for JIT systems). Some systems, such as Smalltalk and contemporary versions of BASIC and Java, may also combine two and three types. Interpreters of various types have also been constructed for many languages traditionally associated with compilation, such as Algol, Fortran, Cobol, C and C++. While interpretation and compilation are the two main means by which programming languages are implemented, they are not mutually exclusive, as most interpreting systems also perform some translation work, just like compilers. The terms "interpreted language" or "compiled language" signify that the canonical implementation of that language is an interpreter or a compiler, respectively. A high level language is ideally an abstraction independent of particular implementations.
Компьютерлік ғылымда интерпретатор – бұл бағдарламалау немесе сценарий тілінде жазылған нұсқауларды машина тіліндегі бағдарламаға алдын ала компиляциялауды қажет етпей тікелей орындайтын компьютерлік бағдарлама. Интерпретатор бағдарламаны орындау үшін әдетте келесі стратегиялардың бірін қолданады: бастапқы кодты талдап, оның әрекетін тікелей орындау; бастапқы кодты тиімді аралық өрнекке немесе объектілік кодқа аударып, оны дереу орындау; компилятор жасаған және интерпретатордың виртуалды машинасымен үйлесетін алдын ала компиляцияланған байткодты тікелей орындау. Lisp бағдарламалау тілінің және мини- және микрокомпьютерлік BASIC диалектілерінің алғашқы нұсқалары бірінші типтің мысалы болар еді. Perl, Raku, Python, MATLAB және Ruby екінші типтің мысалдары, ал UCSD Pascal үшінші типтің мысалы. Бастапқы бағдарламалар алдын ала компиляцияланады және машинаға тәуелсіз код ретінде сақталады, содан кейін орындалу кезінде байланыстырылады және интерпретатормен және/немесе компилятормен орындалады (JIT жүйелері үшін). Кейбір жүйелер, мысалы Smalltalk және BASIC пен Java-ның қазіргі нұсқалары, екі және үш типті де біріктіре алады. Algol, Fortran, Cobol, C және C++ сияқты әдетте компиляциямен байланысты болатын көптеген тілдер үшін де әртүрлі типтегі интерпретаторлар құрылды. Интерпретация және компиляция – бағдарламалау тілдерін іске асырудың екі негізгі тәсілі болғанымен, олар бір-бірінен толыққанды ажыратылмайды, өйткені көптеген интерпретация жүйелері, компиляторлар сияқты, кейбір аударма жұмыстарын да атқарады. "Интерпретацияланған тіл" немесе "компиляцияланған тіл" терминдері осы тілдің канондық іске асырылуы тиісінше интерпретатор немесе компилятор екенін көрсетеді. Жоғары деңгейдегі тіл – бұл нақты іске асырылудан тәуелсіз абстракция.
In computer science, an interpreter is a computer program that directly executes instructions written in a programming or scripting language, without requiring them previously to have been compiled into a machine language program. An interpreter generally uses one of the following strategies for program execution:
Parse the source code and perform its behavior directly;
Translate source code into some efficient intermediate representation or object code and immediately execute that;
Explicitly execute stored precompiled bytecode made by a compiler and matched with the interpreter's Virtual Machine. Early versions of Lisp programming language and minicomputer and microcomputer BASIC dialects would be examples of the first type. Perl, Raku, Python, MATLAB, and Ruby are examples of the second, while UCSD Pascal is an example of the third type. Source programs are compiled ahead of time and stored as machine independent code, which is then linked at run time and executed by an interpreter and/or compiler (for JIT systems). Some systems, such as Smalltalk and contemporary versions of BASIC and Java, may also combine two and three types. Interpreters of various types have also been constructed for many languages traditionally associated with compilation, such as Algol, Fortran, Cobol, C and C++. While interpretation and compilation are the two main means by which programming languages are implemented, they are not mutually exclusive, as most interpreting systems also perform some translation work, just like compilers. The terms "interpreted language" or "compiled language" signify that the canonical implementation of that language is an interpreter or a compiler, respectively. A high level language is ideally an abstraction independent of particular implementations.
Тарих
Интерпретаторлар 1952 жылдан бастап сол кездегі компьютерлердің мүмкіндіктерінің шектеулеріне байланысты бағдарламалауды жеңілдету үшін қолданылды (мысалы, бағдарлама сақтау үшін жеткіліксіз жад немесе қозғалмалы нүктелі сандарға тікелей қолдау болмауы). Интерпретаторлар төмен деңгейдегі машина тілдерін аудару үшін де пайдаланылды, бұл әлі салынып жатқан машиналар үшін код жазуға және оларды қолданыстағы компьютерлерде сынауға мүмкіндік берді. Алғашқы жоғары деңгейдегі интерпретацияланатын тіл – Lisp болды. Lisp тілін алғаш рет Стив Рассел IBM 704 компьютерінде іске қосты. Рассел Джон Маккартидің "Символикалық өрнектердің рекурсивті функциялары және оларды машинамен есептеуі, 1-бөлім" деген мақаласын оқып, (Маккартидің өзіне де күтпегендей) Lisp eval функциясын машиналық кодта іске асыруға болатынын түсінді. Соның нәтижесінде Lisp бағдарламаларын іске қосуға, немесе дәлірек айтқанда, "Lisp өрнектерін бағалауға" арналған Lisp интерпретаторы құрылды.
Жалпы пайдалану
Интерпретатор әдетте орындала алатын белгілі командалар жиынтығынан және бағдарламашы оларды орындауды қалайтын ретпен осы командалар тізімінен тұрады. Әрбір команда (сондықтан нұсқау деп те аталады) бағдарламашы өзгертуді көздейтін деректерді және деректерді қалай өзгертуге болатыны туралы ақпаратты қамтиды. Мысалы, интерпретатор "Кітаптарға 5 қосу" дегенді оқып, оны Кітаптар айнымалысына 5 санын қосу туралы сұраныс ретінде түсіндіре алады. Интерпретаторлардың әртүрлі міндеттерді орындауға бағытталған кең ауқымды нұсқаулары бар, бірақ сіз математикалық операциялар, тармақтану және жадты басқару үшін интерпретатор нұсқауларын жиі кездестіресіз, бұл көптеген интерпретаторларды Тьюринг толықтығына жеткізеді. Көптеген интерпретаторлар қоқыс жинаушымен (garbage collector) және қателіктерді жою құралымен (debugger) тығыз байланысты болады.
Компиляторлар мен аудармашылар
Жоғары деңгейдегі тілде жазылған бағдарламалар интерпретатордың бірімен тікелей орындалады немесе компилятор (және ассемблер және линкер) арқылы машиналық кодқа түрлендіріледі. Компиляторлар (және ассемблерлер) әдетте компьютерлік аппараттық құралдармен тікелей орындалатын машиналық кодты жасайды, бірақ олар жиі (қажет болған жағдайда) объектілік код деп аталатын аралық форманы да жасай алады. Бұл, негізінен, машинаға тән кодтың өзі, бірақ орындалатын блоктарды (немесе модульдерді) анықтауға және жылжытуға мүмкіндік беру үшін атаулары мен белгілері бар символдар кестесімен толықтырылған. Компиляцияланған бағдарламалар әдетте осындай объектілік код модульдерінің кітапханасында сақталатын құрылыс блоктарын (функцияларды) пайдаланады. Линкер (байланыстырушы) алдын ала жасалған кітапхана файлдарын қосымшаның объектілік файлдарымен біріктіріп, бір орындалатын файлды құру үшін қолданылады. Орындалатын файлды жасау үшін қолданылатын объектілік файлдар көбінесе әртүрлі уақытта жасалады, кейде тіпті әртүрлі тілдерде (бірдей объектілік форматты жасауға қабілетті). Төмен деңгейдегі тілде (мысалы, ассемблер) жазылған қарапайым интерпретатор жоғары деңгейдегі тілдің функцияларын іске асыратын ұқсас машиналық код блоктарын сақтай алады және функцияның іздеу кестесіндегі жазбасы сол кодқа сілтеме жасағанда оларды орындайды. Дегенмен, жоғары деңгейдегі тілде жазылған интерпретатор әдетте басқа тәсілдерді қолданады, мысалы, талдау ағашын жасап, одан кейін оны жүзеге асыру, немесе аралық бағдарламалық нұсқауларды жасап, орындау, немесе екеуін де қолдануы мүмкін. Осылайша, компиляторлар мен интерпретаторлар бастапқы кодты (мәтіндік файлдарды) әдетте токендерге түрлендіреді, екеуі де (немесе болмауы мүмкін) талдау ағашын жасайды және екеуі де дереу нұсқауларды (стек машинасы, төрттік код немесе басқа тәсілдермен) жасай алады. Негізгі айырмашылық – компилятор жүйесі, (құрастырылған немесе жеке) линкерді қоса, автономды машиналық код бағдарламасын жасайды, ал интерпретатор жүйесі жоғары деңгейдегі бағдарламамен сипатталған әрекеттерді орындайды. Компилятор бастапқы кодтың семантикасын машина деңгейіне бір рет үшін мәңгілікке (яғни бағдарлама өзгертілгенге дейін) түрлендіре алады, ал интерпретатор осы түрлендіру жұмысының бір бөлігін әрбір оператор немесе функция орындалған сайын орындауы керек. Дегенмен, тиімді интерпретаторда аударма жұмысының көп бөлігі (типтерді талдау және т.б.) бөлініп, бағдарлама, модуль, функция немесе тіпті оператор алғаш рет орындалғанда ғана орындалады, бұл компилятордың жұмыс істеу тәсіліне ұқсас. Дегенмен, компиляцияланған бағдарлама көп жағдайда әлдеқайда жылдам жұмыс істейді, өйткені компиляторлар кодты оңтайландыру үшін жасалған және оған жеткілікті уақыт беріледі. Бұл әсіресе көптеген динамикалық деректер құрылымдары, тексерулер немесе типтік тексерулер жоқ қарапайым жоғары деңгейдегі тілдер үшін дұрыс. Дәстүрлі компиляцияда линкердің орындалатын шығысы (.exe файлдары немесе .dll файлдары немесе кітапхана, суретті қараңыз) әдетте жалпы операциялық жүйеде орындалғанда, объектілік код модульдері сияқты, жылжытылатын болады, бірақ бұл жылжу динамикалық түрде орындалу кезінде, яғни бағдарлама орындалу үшін жүктелген кезде жасалады. Екінші жағынан, кішігірім кіріктірілген жүйелер үшін құрастырылған және байланыстырылған бағдарламалар әдетте статикалық түрде бөлінеді, көбінесе NOR флэш-жадында қатты кодталған, өйткені онда көбінесе екінші жаджай және операциялық жүйе болмайды. Тарихи тұрғыдан алғанда, көптеген интерпретатор жүйелерінде өздігінен құрастырылған редактор болған. Бұл компиляторларда да жиі кездеседі (сонда олар IDE деп аталады), бірақ кейбір бағдарламашылар өздері таңдаған редакторды пайдалануды және компиляторды, линкерді және басқа құралдарды қолмен іске қосуды жөн көреді. Тарихи тұрғыдан алғанда, компиляторлар интерпретаторлардан бұрын пайда болған, өйткені сол кездегі аппараттық құралдар интерпретаторды және интерпретацияланған кодты қолдамады, ал сол кездегі әдеттегі пакеттік орта интерпретацияның артықшылықтарын шектеді.
Даму циклі
Бағдарламалық жасақтаманы әзірлеу кезеңінде бағдарламашылар бастапқы кодқа жиі өзгерістер енгізеді. Компилятор қолданғанда, бастапқы кодқа әр өзгеріс енгізілген сайын, олар компилятордың өзгертілген бастапқы файлдарды аударып, бағдарламаны орындау алдында барлық екілік код файлдарын біріктіруін күтуі керек. Бағдарламаның көлемі неғұрлым үлкен болса, күту соғұрлым ұзаққа созылады. Ал интерпретаторды пайдаланатын бағдарламашы көбінесе аз күтеді, себебі интерпретатор көбінесе жұмыс істеп жатқан кодты аралық форматқа аударуды ғана қажет етеді (немесе оны мүлдем аудармайды), демек өзгерістерді тексеру үшін әлдеқайда аз уақыт жұмсалады. Бастапқы кодты сақтап, бағдарламаны қайта жүктеген кезде нәтижесі байқалады. Компиляцияланған кодты түзету әдетте қиын, себебі өңдеу, компиляциялау және байланыстыру – бұл дұрыс реттілікте, дұрыс командалар жиынтығымен орындалуы тиіс тізбекті процестер. Осы себепті көптеген компиляторларда «Makefile» және бағдарлама деп аталатын орындауға көмектесетін құрал бар. «Makefile» компилятор мен линкердің командалық жолдарын және бағдарламаның бастапқы код файлдарын тізімдейді, бірақ үшінші топты (нұсқаулар жиынтығын) таңдап, компиляторға командаларды жіберетін қарапайым командалық жол мәзірін енгізуді қажет етуі мүмкін (мысалы, «Make 3»), содан кейін көрсетілген бастапқы код файлдарын линкерге беру үшін.
Тарату
Компилятор бастапқы кодты нақты бір процессор архитектурасы үшін екілік нұсқауларға түрлендіреді, соның салдарынан оның тасымалдану мүмкіндігі төмендейді. Бұл түрлендіру тек бір рет, дамытушының ортасында жасалады, содан кейін сол екілік файл пайдаланушының машиналарына таратылып, қосымша аудармасыз орындалуы мүмкін. Кросс-компилятор пайдаланушы машинасының процессоры код құрастырылған машинадан өзгеше болған жағдайда да, олар үшін екілік кодты жасай алады. Интерпретацияланатын бағдарлама бастапқы код түрінде таратылуы мүмкін. Оны әрбір соңғы машинада аудару қажет, бұл көбірек уақыт алады, бірақ бағдарлама таратуды машина архитектурасынан тәуелсіз етеді. Дегенмен, интерпретацияланатын бастапқы кодтың тасымалдануы, мақсатты машинада тиісті интерпретатордың болуына байланысты. Егер интерпретатор бастапқы кодпен бірге жеткізілуі керек болса, жалпы орнату процесі, монолитті атқарылатын файлды жеткізуге қарағанда күрделірек болады, себебі интерпретатордың өзі орнатылатын бөлік болып табылады. Интерпретацияланатын кодты адамдар оңай оқи және көшіре алатыны авторлық құқық тұрғысынан мазасыздық тудыруы мүмкін. Алайда, түрлі шифрлау және бүркемелеу жүйелері бар. Байткод сияқты аралық кодты жеткізу, бүркемелеуге ұқсас әсер етеді, бірақ байткодты декомпилятор немесе дизассемблер арқылы декодтауға болады.
Регрессия
Интерпретация орындаудың жалғыз әдісі ретінде қолданыла алмайды: интерпретатордың өзі интерпретацияланса да, тікелей орындалатын бағдарлама стектің түбінде болуы керек, себебі интерпретацияланатын код, анықтама бойынша, процессор тікелей орындай алатын машиналық кодтан өзгеше болады.
Байт-код аудармашылары
Бағдарлама орындалғанға дейін жасалған талдау мөлшеріне қарай, интерпретация мен компиляция арасында мүмкіндіктер спектрі бар. Мысалы, Emacs Lisp байт-кодқа компиляцияланады, ол Lisp кодының жоғары сығылған және оңтайландырылған түрі, бірақ машиналық код емес (сондықтан ол нақты аппарат құрылғысына тәуелді емес). Бұл "компиляцияланған" код байт-код интерпретаторымен (өзі C тілінде жазылған) орындалады. Бұл жағдайда компиляцияланған код – виртуалды машинаның машиналық коды, ол аппараттық емес, байт-код интерпретаторында жүзеге асырылады. Мұндай компиляциялық интерпретаторлар кейде компретерлер деп те аталады. Байт-код интерпретаторында әрбір команда бір байттан басталады, сондықтан байт-код интерпретаторларында 256-ға дейін команда болуы мүмкін, бірақ олардың бәрі қолданылмайды. Кейбір байт-кодтар бірнеше байттан тұруы және кез келгендей күрделі болуы мүмкін. Компиляция фазасынан өту қажеттілігі жоқ басқару кестелері, байт-код интерпретаторларына ұқсас әдіспен бейімделген интерпретаторлар арқылы тиісті алгоритмдік басқару ағынын анықтайды.
Сызықты кодтар интерпретаторлары
Сызықты код интерпретаторлары байт-код интерпретаторларына ұқсас, бірақ байттардың орнына сілтемелерді пайдаланады. Әрбір "нұсқау" – функцияға немесе нұсқаулар тізбегіне көрсетіп тұратын сөз, оған параметрлер де қосылуы мүмкін. Сызықты код интерпретаторы нұсқауларды циклмен алып, олар көрсеткен функцияларды шақырады, немесе бірінші нұсқауды алып, тікелей оған секіреді, ал әрбір нұсқаулар тізбегі келесі нұсқауды алу және оған секіру арқылы аяқталады. Байт-кодтан өзгеше, қолданылатын жад пен адрес кеңістігінен басқа, әртүрлі нұсқаулардың санына ешқандай нақты шектеу жоқ. Сызықты кодтың классикалық мысалы – Ашық микробағдарламалық жүйелерде қолданылатын Forth коды: бастапқы тіл "F кодына" (байт-код) компиляцияланады, содан кейін оны виртуалды машина түсіндіреді.
Абстрактілі синтаксистік ағаш интерпретаторлары
Интерпретация мен компиляция арасындағы спектрде тағы бір тәсіл – бастапқы кодты оңтайландырылған абстрактты синтаксистік ағашқа (AST) түрлендіру, содан кейін осы ағаш құрылымын қолданып бағдарламаны орындау немесе оны қажетті уақытта түпкі кодты жасау үшін пайдалану. Мұндай тәсілде әрбір сөйлем бір рет ғана талдалады. Байткодқа қарағанда AST-ның артықшылығы – ол бағдарламаның жалпы құрылымын және операторлар арасындағы байланыстарды сақтайды (байткодта бұл ақпарат жоғалады), ал қысылғанда ықшамдау форматты ұсынады. Сондықтан AST-ны дереу компиляторлар үшін байткодтан жақсы аралық формат ретінде қарастыру ұсынылған. Бұл жүйеге орындалу барысында жақсырақ талдау жасауға да мүмкіндік береді. Дегенмен, интерпретаторлар үшін AST байткод интерпретаторына қарағанда көбірек жүктеме тудырады, себебі синтаксисқа қатысты түйіндер ешқандай пайдалы жұмыс атқармайды, ағаш құрылымының өзі тізбектей емес (көптеген сілтемелерді аралау қажет) және ағаштың өзін аралау қосымша жүктеме береді.
Уақытша жинақтау
Интерпретаторлар, байт-код интерпретаторлары және компиляция арасындағы шекараны одан әрі жою – бұл уақытында компиляция (JIT), яғни аралық өрнек орындалу барысында түпкілікті машиналық кодқа компиляцияланатын техника. Бұл түпкілікті кодты орындаудың тиімділігін қамтамасыз етеді, бірақ бастапқы жүктелу уақытын ұзартуға және байт-код немесе AST алғаш компиляцияланғанда жадты көп пайдалануға әкеледі. Ең алғашқы JIT компиляторы 1960 жылы Джон Маккартидің LISP бойынша жұмысымен байланысты. Адаптивтік оптимизация – бұл интерпретатордың жұмыс істеп жатқан бағдарламаны талдап, ең көп қолданылатын бөліктерін түпкілікті кодқа компиляциялайтын қосымша техника. Бұл әдіс бірнеше он жылдан бері қолданылып келеді, 1980-ші жылдары Smalltalk сияқты тілдерде пайда болды. Уақытында компиляция соңғы жылдары тілді жүзеге асырушылардың арасында кең танылды, қазір Java, .NET Framework, көптеген заманауи JavaScript жүзеге асырулары және Matlab JIT компиляторларын қамтиды.
Үлгі интерпретаторы
Шаблон интерпретаторы деп аталатын арнайы интерпретатор дизайны компиляторлар мен интерпретаторлардың арасындағы шекараны одан да нашарлай түседі. Кодты орындау үшін барлық мүмкін байт-кодты қамтитын үлкен коммутаторлық операторды пайдаланудың орнына, бағдарламалық стек немесе ағаш бойынша өту арқылы жұмыс істейтін шаблон интерпретаторы, байт-кодтың (немесе кез келген тиімді аралық өрнектің) үлкен массивін тікелей хост аппараттық құрылғысында орындалатын сәйкес машиналық нұсқауларға бейнелейді. Бұл бейнелеу негізгі-мәнді жұптар түрінде (немесе тиімдірек дизайндарда, машиналық нұсқауларға тікелей мекенжайлар) "Шаблон" деп аталады. Кодтың белгілі бір бөлігі орындалғанда, интерпретатор шаблондағы опкодқа сәйкес келетін жазбаны жүктейді немесе оған секіреді және оны тікелей аппараттық құрылғыда орындайды. Өзінің дизайнына байланысты, шаблон интерпретаторы дәстүрлі интерпретатордың емес, жай уақытта компиляциялаушыға (JIT) көбірек ұқсайды. Алайда, ол техникалық тұрғыдан JIT емес, себебі ол кодты тілден машиналық шақыруларға бір опкодтан кейін бірін аударады, ал толық код сегментінен CPU орындай алатын нұсқаулардың оңтайландырылған тізбектерін жасамайды. Интерпретатордың аппараттық құрылғыға тікелей шақыруларды жіберудің қарапайым дизайны оны басқа барлық түрлерден, тіпті байт-код интерпретаторларынан да жылдам етеді және белгілі бір деңгейде қателерге төзімді етеді. Бірақ, оның кемшілігі – интерпретатор платформадан тәуелсіз виртуалды машинаның немесе стекенің орнына бірнеше әртүрлі архитектураларға аударманы қолдауға тиіс болғандықтан, оны күтуге қиын. Бүгінгі күнге дейін, кең танымал тілдердің ішінде шаблон интерпретаторының жалғыз іске асырылған нұсқасы – Java-ның ресми анықтамалық нұсқасындағы интерпретатор, Sun HotSpot Java Virtual Machine. Өзін-өзі интерпретациялау (әсіресе рефлексивті интерпретациялау) туралы көптеген зерттеулер Схема бағдарламалау тілінде, Lisp-тің бір түрінде жүргізілді. Алайда, жалпы алғанда, кез келген Тьюринг толық тілі өзінің интерпретаторын жазуға мүмкіндік береді. Lisp осындай тіл, өйткені Lisp бағдарламалары символдар мен басқа тізімдердің тізімінен тұрады. XSLT де осындай тіл, өйткені XSLT бағдарламалары XML-де жазылған. Метапрограммалаудың бір саласы – доменге арналған тілдерді (DSL) жазу. Клайв Гиффорд өзіндік интерпретатордың сапасын бағалау үшін (эгенрацио) өлшемді енгізді: N өзіндік интерпретаторлардың стегін орындауға кеткен компьютер уақыты мен N-1 өзіндік интерпретаторлардың стегін орындауға кеткен уақыт арасындағы қатынастың лиміті. Бұл мән орындалып жатқан бағдарламаға байланысты емес. "Компьютерлік бағдарламалардың құрылымы мен интерпретациясы" кітабы Scheme және оның түрлері үшін метациркулярлық интерпретацияның мысалдары келтіреді. Өзін-өзі интерпретациялайтын басқа тілдердің мысалдары – Forth және Pascal.
Микрокод
Микрокод – "компьютердің аппараттық және архитектуралық деңгейлері арасына интерпретатор енгізетін" өте кең таралған техника. Осылайша, микрокод – көптеген цифрлық өңдеу элементтерінде жоғары деңгейдегі машиналық код нұсқауларын немесе ішкі күй машинасының тізбегін іске асыратын аппараттық деңгейдегі нұсқаулардың қабаты. Микрокод жалпы мақсаттағы орталық процессорларда, сондай-ақ микроконтроллерлерде, цифрлық сигнал процессорларында, арна контроллерлерінде, дискі контроллерлерінде, желілік интерфейс контроллерлерінде, желілік процессорларда, графикалық процессорларда және басқа да аппараттық құралдарда қолданылады. Микрокод әдетте арнайы жоғары жылдамдықты жадта орналасады және машиналық нұсқауларды, күй деректерін немесе басқа да кірісті детальды схемалық деңгейдегі операциялар тізбегіне аударады. Ол машиналық нұсқауларды негізгі электроникадан бөліп, нұсқауларды еркін жобалауға және өзгертуге мүмкіндік береді. Сондай-ақ, ол күрделі көп қадамды нұсқауларды құруды жеңілдетеді, сонымен бірге компьютерлік схемалардың күрделілігін азайтады. Микрокодты жазуды көбінесе микропрограммалау деп атайды, ал нақты процессордағы микрокодты кейде микропрограмма деп атайды. Көлемді микрокодтау шағын және қарапайым микроархитектураларға кеңірек сөз ұзындығымен, көбірек орындау бірліктерімен және т.б. жабдықталған қуатты архитектураларды эмуляциялауға мүмкіндік береді, бұл процессорлар отбасындағы әртүрлі өнімдер арасында бағдарламалық үйлесімділікті қамтамасыз етудің салыстырмалы түрде оңай жолы.
Компьютерлік процессор
Тіпті микрокодтауды қолданбаған компьютер процессоры да машиналық код нұсқауларын талдап, дереу орындайтын, жалпы мақсаттағы аппараттық сипаттама тілі, мысалы VHDL-да жазылған бірден орындалатын интерпретатор ретінде қарастырылуы мүмкін.
Аудармашының жұмысын түсіну
Java, Perl және Tcl сияқты тілдерде жазылған интерпретаторлар қазіргі кезде бинарлық эмуляция және интернет-қосымшалар сияқты көптеген есептеу міндеттері үшін қажет. Олардың бейімделу қабілетіне қарамастан, интерпретатордың жұмысы, әсіресе аппараттық ресурстары шектеулі жүйелерде, әлі де алаңдау тудырады. Жаңа аспаптар мен із кесу әдістері MIPS командалар жиынтығына және Tcl, Perl және Java сияқты бағдарламалау тілдеріне арналған интерпретаторларды бағалау арқылы орындалу барысында интерпретатордың жұмыс істеу механизмін және процессор ресурстарын пайдалануын түсінуге көмектеседі. Интерпретатордың күрделілігі оның жұмысына әсер етеді, бұл компиляцияланған кодпен салыстыру арқылы көрсетілген. Интерпретатордың тиімділігі интерпретацияланатын нақты қосымшадан гөрі, интерпретатордың ерекшеліктері мен ресурстық қажеттіліктеріне көбірек байланысты екені анық.
Қолданбалар
Интерпретаторлар командалық тілдерді орындау үшін жиі қолданылады, және олар "желім" тілдері ретінде де қолданылады, себебі командалық тілде орындалатын әрбір оператор әдетте редактор немесе компилятор сияқты күрделі процедураны шақыру болып табылады. Өзін-өзі өзгертетін код интерпретацияланатын тілде оңай жүзеге асырылуы мүмкін. Бұл Lisp тіліндегі интерпретацияның және жасанды интеллект зерттеулерінің бастауларымен байланысты. Виртуализация. Нақты аппараттық архитектураға арналған машиналық кодты виртуалды машина арқылы орындауға болады. Бұл көбінесе жоспарланған архитектура қол жетімді болмаған жағдайда, немесе басқа мақсаттармен, мысалы, бірнеше дананы іске қосу үшін қолданылады. Қоршау (Sandboxing): Қоршаудың кейбір түрлері операциялық жүйенің қорғанысына сүйенсе де, интерпретатор немесе виртуалды машина жиі қолданылады. Нақты аппараттық архитектура және бастапқыда арналған аппараттық архитектура бірдей немесе әртүрлі болуы мүмкін. Бұл бесс мағынасыз сияқты көрінуі мүмкін, бірақ қоршаулар өңделіп жатқан бастапқы кодтың барлық нұсқауларын орындауға міндетті емес. Атап айтқанда, ол жұмыс істейтін қауіпсіздік шектеулерін бұзатын кодты орындаудан бас тарта алады. Эмуляторлар – ескірген және қол жетімсіз аппараттық құралдар үшін жазылған компьютерлік бағдарламалық жасақтаманы заманауи құралдарда іске қосу үшін қолданылады.