Компьютерных наук и технологий
Компьютерная инженерия
Вычислительные машины, комплексы, системы и сети
Компьютерные системы и сети, бакалавриат
Компьютерные системы и сети, магистратура
Я, Святоха Артем Александрович, родился 31 марта 1995 года в городе Красный Луч, Луганской области. Уже с детства я проявлял интерес к технике, как это все устроено. При чем разобрать что-то для меня, как обычно было заметно легче чем собрать это назад. Моими любимыми игрушками были разнообразные конструкторы. Благодаря тому, что отец увлекался электроникой у него были различные советские журналы на соответствующую тематику, но даже читая их я все равно не понимал, что к чему, так как не знал никаких основ.
В 7 лет я, как и все дети, пошел в школу. В школе я учился хорошо, но уже с первых классов из всех предметов мне больше всего нравилась математика, позже к этому списку подключилась физика и химия. Также отдельно от школы я увлекался рисованием, но это было просто увлечение и профессионально я этим никогда не занимался, в основном придумывал и рисовал свои комиксы. В 2011 году мне пришлось перейти в другую школу и именно в этот период я увлёкся программированием. Принимал участие в различных олимпиадах.
Когда я учился в 8-9 классе я начал посещать местную библиотеку и читать различные книги (в основном советские), связанные с компьютерной техникой и программированием, в частности. Именно из них я узнал про компьютерную логику, про системы счисления и про то, как работают логические элементы. С этим и связан мой выбор университета ДонНТУ, и направления компьютерной инженерии. По Украине этот университет считается лучшим по подготовке именно в этом направлении и мне захотелось поступить в него.
Летом в 2013 году после сдачи ЗНО я подал документы в ВУЗ и в итоге поступил на бюджет на очную форму обучения. Поначалу было сложно, так как и обучение в школе и в университете значительно отличается.
В целом благодаря четырём курсам в университете мне удалось улучшить свои знания, а также приобрести новые. После получения диплома бакалавра, мной было принято решение продолжить обучение по выбранной специальности и в 2017 я успешно сдал вступительные экзамены и поступил в магистратуру.
Основная цель на данный момент успешная защита магистерской работы и получение диплома о полном высшем образовании. В будущем планирую расширять свой кругозор, в особенности в IT сфере, найти работу связанную с разработкой программного обеспечения, а также начать разрабатывать свои собственные проекты.
При написании данного реферата магистерская работа еще не завершена. Окончательное завершение: июнь 2019 года. Полный текст работы и материалы по теме могут быть получены у автора или его руководителя после указанной даты.
С каждым годом возрастает роль средств вычислительной техники, при этом все компоненты вычислительных систем располагаются на интегральных микросхемах, не позволяя получить доступ к отдельным узлам или элементам, осложняя тем самым процесс изучения функционирования компьютерных систем и их компонентов.
Глубокое понимание принципов построения и функционирования сложных систем достигается лишь при практической работе с такими системами или их моделями. Даже самое подробное описание работы с базовым цифровым устройством и детальные иллюстрации процесса выполнения команд не могут заменить действительной работы с этим устройством.
Данная проблема особенно актуальна в технических вузах и для ее решения разрабатываются специальные модели: физические или функциональные[1], наглядно демонстрирующие представление данных, выполнение операций, взаимодействие с периферией по средствам операций ввода-вывода и системы прерываний.
Для поддержки дисциплин аппаратного направления требуются модели, которые позволяют рассмотреть конвейерную обработку команд, спекулятивное выполнение, кеширование данных, а также разнообразные архитектуры процессорных элементов, такие как: суперскалярная архитектура, VLIW, векторные процессоры. Также дополнительно следует рассмотреть процесс компиляции и оптимизации машинного кода, под разнообразные архитектуры.
Современный мир уже сложно представить без вычислительной техники, а её основным компонентом все ещё являются процессорные элементы. Для технических вузов особенно важно подготавливать студентов с пониманием принципов работы процессоров, принципов их функционирования и разнообразия архитектур. Как нельзя лучше для этого подходят демонстрационные модели, которые наглядно демонстрируют работу того или иного компонента устройства в определённой ситуации, т.е. учебный материал может быть представлен более эффективно.
Многоуровневая демонстрационная модель гипотетического компьютера позволит наглядно демонстрировать работу процессорных компонентов, их взаимодействие с памятью, и другими периферийными устройствами.
Данная магистерская работа посвящена разработке функциональной демонстрационной модели, а также разработке компилятора для данной модели и исследованию способов оптимизации генерации машинного кода.
В результате работы планируется рассмотреть различные процессорные архитектуры, общие процессорные технологии, такие как конвейерная обработка команда, спекулятивное выполнение, предсказание переходов, кеширование данных. Разработать функциональную демонстрационную модель, и оптимизирующий компилятор для неё.
Несмотря на то, что на сегодняшний день практически каждое электронное устройство управляется микропроцессорами, достаточно подробных демонстрационных моделей существует не так уж и много. На данный момент существует множество демонстрационных систем, которые позволяют освоить базовые принципы работы процессоров и другой периферии, но они не рассматривают такие аспекты работы процессора как конвейерная обработка команд, предсказание ветвлений, спекулятивное выполнение, кеширование данных. То есть такие решения подходят лишь для начальных курсов вузов с технической направленностью.
Кажется, что на данный момент работа процессоров за долгие годы развития процессоров отточена до идеала. Но исследования, проведённые в середине 2017 года в недрах компании Google в сотрудничестве с другими компаниями, показали, что все процессоры фирмы Intel с 1995 года производства и процессоры на архитектуре ARM имеют аппаратные уязвимость[2]. Эта уязвимость связана со спекулятивным выполнением команд и реализацией страничной адресации памяти. Спекулятивное выполнение позволяет коду частично выполнятся, не дожидаясь окончания исполнения предыдущих команд, при этом доступ к памяти при спекулятивном исполнении выполняется независимо от прав доступа, при этом если происходит промах по кешу, то данные будут загружены в кеш, после чего их можно прочитать. Таким образом пользовательский код может получать и записывать данные в защищённые области памяти. 4 января 2018 года были произведены атаки, которые использовали данную уязвимость, им дали названия Meltdown[3] и Spectre[4], после чего детали уязвимости были опубликованы.
Таким образом углублённое понимание архитектур и принципов работы процессоров необходимо для обнаружения и понимания возможных ошибок, чтобы не допускать их при проектировании. Демонстрационная модель поможет улучшить процесс обучения путем более наглядного и индивидуализированного подхода к рассмотрению работы процессорных элементов и работы периферии.
Дейл Скриен разработал функциональную модель окружения для симуляции простых компьютеров CPU Sim[5]. Программа позволяет студентам понять принципы компьютерной архитектуры. Предоставляет возможность симулировать работу простых процессоров, либо задать конфигурацию собственного процессора со своим набором команд, которые реализуются с помощью последовательности микроинструкций. Позволяет симулировать процессоры различных архитектур, таких как основанных на регистре-аккумуляторе, RISC или стековых машин.
MikroSim[6] – это образовательная программа для аппаратно-неспецифического объяснения общего функционирования и поведения виртуального процессора.
Поиск материалов по теме показал наличие публикаций на тему различных процессорных архитектур. Например, архитектура POSTRISC[7] – архитектура, идущая на замену RISC. Виртуальный учебный процессор POSTRISC и разработанные для него инструменты (ассемблер, дизассемблер, эмулятор) предназначены для изучения на этом примере внутренней структуры системных программ, таких как ассемблеры, дизассемблеры, компоновщики, для изучения алгоритмов хранения внутренних данных ассемблеров и компиляторов (хеширование и бинарный поиск), для изучения и сравнительного анализа различных сред исполнения и характерных для них моделей исполняемых программ, для изучения особенностей системного программирования для разных целевых машинных архитектур и для изучения архитектурно-зависимых аспектов прикладного программирования.
Была опубликована статья на тему "Моделирование внутренних операций процессорных элементов" в научном журнале ДонНТУ "Информатика и кибернетика", авторами которой явлются наши преподователи Мальчева Р.В. и Завадская Т.В. В статье выполнен анализ необходимости разработки демонстрационных обучающих и имитационных моделей внутри процессорных операций.
Суперскалярный процессор[10] – процессор, поддерживающий так называемый параллелизм на уровне инструкций то есть, процессор, способный выполнять несколько инструкций одновременно за счёт включения в состав его вычислительного ядра нескольких одинаковых функциональных узлов таких как АЛУ, FPU, умножитель , сдвигающее устройство и другие устройства. Планирование исполнения потока инструкций осуществляется динамически вычислительным ядром, а не статически компилятором.
Архитектура VLIW[9] (Very Long Instruction Word – «очень длинная машинная команда») отличаются от традиционных архитектур RISC и CISC, реализованную в современных массовых микропроцессорах. Важно различать архитектуру набора команд – программная модель процессора – от реализации (физический чип и его характеристики). VLIW микропроцессоры и суперскалярные реализации традиционных наборов команд имеют некоторые общие характеристики – несколько исполнительных блоков и возможность выполнять несколько операций одновременно. Так же, как RISC архитектуры имеют более простые и дешевые высокопроизводительные реализации. Архитектура VLIW проще, чем CISC, и дешевле, чем RISC. Из-за аппаратных упрощений, VLIW архитектура, требует поддержки со стороны компилятора.
Спекулятивное выполнение[11] – это метод оптимизации, когда компьютерная система выполняет некоторую задачу, которая может не потребоваться. Работа выполняется до того, как станет известно, действительно ли она необходима, чтобы предотвратить задержку, которая могла бы возникнуть при выполнении после того, как стало известно, что она необходима. Если выясняется, что в конце концов работа не нужна, большинство изменений, внесенных этой работой, отменяются, а результаты игнорируются.
Роль вычислительной техники, с каждым годом возрастает. Компьютеры становятся всё сложнее, соответственно и уровень подготовки специалистов в технических вузах должен расти. И для достижения необходимого уровня подготовки студентов дисциплин аппаратурной направленности, в ходе данной работы будет разработана многоуровневой модели гипотетического компьютера наглядно демонстрирующие представление данных, выполнение операций, взаимодействие с периферией по средствам операций ввода-вывода и системы прерываний.
Многоуровневая модель позволит рассмотреть конвейерную обработку команд, спекулятивное выполнение, кеширование данных, а также разнообразные архитектуры процессорных элементов, такие как: суперскалярная архитектура, VLIW, векторные процессоры. Также будет рассмотрен процесс компиляции и оптимизации машинного кода, под разнообразные архитектуры.
Авторы: Святоха А.А., Мальчева Р.В.
Описание: В данной работе была разработана простая демонстрационная модель гипотетического компьютера, а также приведена теорическая информация по теме.
Автор: Святоха А.А.
Описание: В данной работе рассмотрена реализация системы логирования и представления действий пользователя.
Автор: Святоха А.А.
Описание: В данной работе рассмотрены зависимости применения процессоров на различных архитектурах, в различных классах вычислительных устройств.
Автор: Святоха А.А.
Описание: В данной работе рассмотрены зависимости применения процессоров на различных архитектурах, в различных классах вычислительных устройств.
Автор: Плесовских Г.А.
Описание: В данной статье рассмотрено создание процессоров и их значительные изменения, без которых, скорее всего не было сегодняшней компьютерной техники. Проанализированы характерные особенности, которые способствовали развитию и созданию процессоров. В проведенном исследовании даются определения и формулируются основные характеристики процессоров.
Источник: Плесовских Г.А. РАЗВИТИЕ ПРОЦЕССОРОВ И ИХ РОЛЬ В ЖИЗНИ ПК СЕГОДНЯ // Молодежный научный форум: Технические и математические науки: электр. сб. ст. по мат. XXXV междунар. студ. науч.-практ. конф. № 6(35). URL: https://nauchforum.ru/archive/MNF_tech/6(35).pdf (дата обращения: 26.01.2019)
Авторы: Р.В. Мальчева, Т.В. Завадская
Описание: Выполнен анализ необходимости разработки демонстрационных обучающих и имитационных моделей внутри процессорных операций.
Источник: Научный журнал "Информатика и кибернетика". – Д.: ДонНТУ, – 2016. – № 3(5). – 117 c.
Автор: Тлупов З.А.
Описание: В данной работе рассматриваются структуры компонентов ЭВМ, включая многопроцессорные вычислительные системы.
Источник: URL: http://www.zaurtl.ru/UkVT/UKVT3.html
Автор: Тлупов З.А.
Описание: В данной работе рассматриваются структур памяти ЭВМ и её разновидности.
Источник: URL: http://www.zaurtl.ru/UkVT/UKVT14.html
Автор: Тлупов З.А.
Описание: В данной работе рассматриваются формат машинных команд процессора Intel и дано краткое описание некоторых из них.
Источник: URL: http://www.zaurtl.ru/UkVT/UKVT17.html
Автор: Тлупов З.А.
Описание: В данной работе рассматриваются функции и параметры микропроцессора, кратко представленны основны архитектуры процессоров и устройства входящие в состав процессора.
Источник: URL: http://www.zaurtl.ru/UkVT/UKVT15.html
Автор: Dale Skrien
Описание: В статье подробно рассматриваются основы работы программным пакетом CPU Sim 3.1, предназначенным для проектирования, модифицирования и сравнения различных компьютерных архитектур на уровне регистров и так далее.
Источник (англ.): CPU Sim 3.1: A Tool for Simulating Computer Architectures for Computer Organization Classes
Описание: Персональный сайт на портале магистров ДонНТУ, 2003 г.
Руководитель: к.т.н., инженер кафедры "ЭВМ" Дорожко Л.И.
Статья об упрощенном учебном компьютере.
Статья о различных архитектурах компьютеров.
Статья о истории развития процессоров Itanium фирмы Intel.
В статье рассматривается проблема программной эмуляции семейства бортовых вычислительных машин с открытой системой команд.
Описывается развитие процессоров и различных архитектур, а также рассматриваются пути дальнейшего возможного развития.
Наглядный пример разработки эмуляторов на примере простой игровой приставки CHIP-8
Статья поссвещённая уязвимости в процессорах и атаке под назвнием Meltdown.
Статья поссвещённая уязвимости в процессорах и атаке под назвнием Spectre.
Статья посвящена основным этам работы компиляторов.
Статья посвещённая оптимизации в компиляторах высокоуровневых языков программирования.
Книга описывающая основные узлы вычислительных машин.
Книга описывающая архитектуру процессорного ядра компьютеров.
В книге описывается архитектура базовых учебных моделей ЭВМ.
В этом учебном пособии даны первоначальные сведения об ЭВМ, их устройстве и применении, о подготовке решения задач на ЭВМ с помощью алгоритмов.
В книге подробно расмотренны архитектуры компьютеров и их компонентов.
Архитектура процессоров VLIW и её сравнение с другими архитектурами.
Рассматриваются основы теории формальных языков, приводятся методы и алгоритмы построения основных частей трансляторов и интерпретаторов.
Рассматриваются основы компиляторов, процесса компиляции, интерпретации и оптимизации программ написанных на языках высокого уровня.
Работа посвящена методам оптимизации, используемым в современных компиляторах для архитектур с явным параллелизмом команд и аппаратной поддержкой двоичной с овместимости.
Обзор базовых методов оптимизации в компиляторах для трех категорий: машинно зависимые, архитектурно зависимые и архитектурно независимые оптимизаци.
Cайт вопросов и ответов для программистов.
Крупнейший веб-сервис для хостинга IT-проектов и их совместной разработки.
Веб-сервис для хостинга проектов и их совместной разработки, основанный на системе контроля версий Mercurial и Git.
Сайт и система управления репозиториями кода для Git, из дополнительных возможностей: собственная вики и система отслеживания ошибок. ПО доступно в системе управления пакетами Omnibus.
Крупнейший архив научной и практической информации по всем направлениям компьютерных наук.
Блог, посвященный различным тематикам: программированию, алгоритмам, администрированию, информационной безопасности и т.д.
Форум который содержит множество различных тем.
Содержит любые темы касательно компьютеров, ОС, ПО и тд.
Форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию, математике, физике и другим наукам, решение проблем с компьютером, операционными системами.
Содержит множество различных статей, публикаций и прочего.
Краткое описание учебной модели компьютера Е97.
Функциональная модель окружения для симуляции простых компьютеров.
Образовательная программа для аппаратно-неспецифического объяснения общего функционирования и поведения виртуального процессора.
Учебный симулятор процессора Intel 8085. Обладает графической оболочкой, ассемблером и отладчиком.
Функциональных модель, которая входит в пакет программ Proteus Design Suite.
Среда моделирования и симуляции цифровых электронных схем, состоящая из графического редактора с интерфейсом.
Графическая среда имитационного моделирования, позволяющая при помощи блок-диаграмм в виде направленных графов, строить динамические модели, включая дискретные, непрерывные и гибридные, нелинейные и разрывные системы.
Простая демонстрационная машина (собственная разработка).
Общая информация о центральных процессорах
Рассмотрены основные особености процессоров на архитектуре CISC.
Рассмотрены основные особености процессоров на архитектуре RISC.
Проекты гипотетических процессоров, идущих на смену процессорам с архитектурой RISC.
Рассмотрены основные особености процессоров на архитектуре VLIW.
Информация о процессорах Itanium фирмы Intel, основаных на архитектуре EPIC/VLIW.
Рассмотрены особенности векторных процессоров.
Рассмотрены особенности суперскалярных процессоров.
Статья про спекулятивное выполнение команд.
Отчет Google об уязвимостях Meltdown и Spectre.
Статья о предсказателе переходов в процессорах.
Представленный отчет позволяет оценить информационную ситуацию по теме магистерской работы. Он является основным документальным подтверждением глубины и полноты информационного поиска, а также служит для фиксации текущей ситуации в исследуемой области.
Поиск выполнен с использованием четырех поисковых систем (Google, Яндекс, Bing, Meta). Результаты сведены в таблицу. Всего произведено 15 запросов, имеющих отношение к магистерской работе. Из них три запроса соответствует названию магистерской работы на трех языках, три запроса с ФИО руководителя, а также девять запросов с ключевыми понятиями по теме магистерской работы.
Ниже приведены две таблицы с отчетами о поиске, которые разделяет временной промежуток в два месяца, а также ряд диаграмм, которые позволяют сравнить основные изменения, произошедшие за этот период.
Строка поиска | ||||
На русском языке | ||||
Разработка многоуровневой модели гипотетического компьютера для поддержки дисциплин аппаратурной направленности | 76.4 тыс | 92 млн | 0 | 2.3 тыс |
Мальчева Раиса Викторовна ДонНТУ | 4.1 тыс | 10.4 тыс | 5 | 8 |
Суперскалярный процессор | 10.8 тыс | 21 млн | 1.2 тыс | 5.1 тыс |
Архитектура VLIW | 13.1 тыс | 81 млн | 4.7 тыс | 7.3 тыс |
Спекулятивное выполнение | 168 тыс | 12 млн | 3.3 тыс | 64.7 тыс |
На украинском языке | ||||
Розробка багаторівневої моделі гіпотетичного комп'ютера для підтримки дисциплін апаратурної спрямованості | 5 | 98 млн | 0 | 89 |
Мальчева Раїса Вікторівна ДонНТУ | 4.1 тыс | 6 млн | 2 | 8 |
Суперскалярний процесор | 10.8 тыс | 23 млн | 49 | 0 |
Архітектура VLIW | 298 тыс | 61 млн | 4.3 тыс | 143 тыс |
Спекулятивне виконання | 136 тыс | 8.2 млн | 1.6 тыс | 101 тыс |
На английском языке | ||||
Development of a multi-level model of a hypothetical computer to support hardware direction disciplines | 624 тыс | 267 млн | 64 | 313 тыс |
Malcheva Raisa DonNTU | 226 | 53 млн | 12 | 24 |
Superscalar processor | 334 тыс | 22 млн | 83.3 тыс | 185 тыс |
VLIW architectures | 326 тыс | 31 млн | 32.4 тыс | 194 тыс |
Speculative execution | 5.7 млн | 6.7 млн | 623 тыс | 2.5 млн |
Строка поиска | ||||
На русском языке | ||||
Разработка многоуровневой модели гипотетического компьютера для поддержки дисциплин аппаратурной направленности | 85.1 тыс | 109 млн | 0 | 2.6 тыс |
Мальчева Раиса Викторовна ДонНТУ | 4.3 тыс | 11 тыс | 5 | 9 |
Суперскалярный процессор | 11.2 тыс | 25 млн | 1.4 тыс | 5.6 тыс |
Архитектура VLIW | 13.5 тыс | 84 млн | 4.9 тыс | 7.7 тыс |
Спекулятивное выполнение | 188 тыс | 15 млн | 3.6 тыс | 92.1 тыс |
На украинском языке | ||||
Розробка багаторівневої моделі гіпотетичного комп'ютера для підтримки дисциплін апаратурної спрямованості | 7 | 116 млн | 0 | 104 |
Мальчева Раїса Вікторівна ДонНТУ | 4.4 тыс | 8 млн | 2 | 9 |
Суперскалярний процесор | 11.2 тыс | 25 млн | 51 | 0 |
Архітектура VLIW | 308 тыс | 69 млн | 4.6 тыс | 162 тыс |
Спекулятивне виконання | 149 тыс | 9 млн | 1.8 тыс | 110 тыс |
На английском языке | ||||
Development of a multi-level model of a hypothetical computer to support hardware direction disciplines | 669 тыс | 296 млн | 72 | 331 тыс |
Malcheva Raisa DonNTU | 235 | 59 млн | 14 | 27 |
Superscalar processor | 364 тыс | 25 млн | 96.3 тыс | 200 тыс |
VLIW architectures | 353 тыс | 34 млн | 35.7 тыс | 206 тыс |
Speculative execution | 6.5 млн | 8 млн | 671 тыс | 3.3 млн |
Сравнивая результаты запросов по различным поисковым системам, можно прийти к выводу, что наилучшие результаты показала система Google. Во всех случаях было найдено достаточное количество документов на всех языках.
Необходимо отметить, что поисковая система Яндекс при большом числе найденных страниц не дает возможности зафиксировать их точное количество. Поэтому в таблице для Яндекса и приведены приблизительные значения, которые предоставляет поисковая система.
При сравнении и анализе результатов в отчетах о поиске, которые разделяют два месяца, необходимо отметить, что для всех поисковых запросах количество найденных страниц выросло. Процент изменения для каждого запроса в каждой из поисковых систем приведен на диаграмме ниже.
Из диаграммы можно сделать вывод, что максимальный рост поисковой выдачи не превышает 29%, а для некоторых запросов количество найденных страниц не изменилось.
Диаграмма также позволяет оценить изменения для каждого выполненного запроса.
Так, например, количество найденных страниц в поисковой системе Meta для запроса "Speculative execution" выросло на 24%, а поисковая выдача по запросу "Архитектура VLIW" в системе Google возросла лишь на ≈ 8%. При этом количество страниц по некоторые запросам совсем не изменилось (например, "Розробка багаторівневої моделі гіпотетичного комп\'ютера для підтримки дисциплін апаратурної спрямованості" в системе Bing).
Интерпретатор[1] – программа выполняющая построчный анализ, обработку и выполнение исходного кода программы или запроса (в отличие от компиляции, где весь текст программы, перед запуском, анализируется и транслируется в машинный или байт-код, без её выполнения).
Интерпретируемые или скрипотовые языки программирования на сегодняшний день широко используются как языки сценариев для администрирования операционной системы, как встраиваемые языки или для создания прикладного программного обеспечения. Основными преимуществами скриптовых языков является:
Недостатками являются:
Не смотря на недостатки со скоростью выполнения программ интерпретаторами, зачастую их встраивают в приложение, чтобы иметь возможность расширять его функционал без перекомпиляции. Скрипты обычно некритичны к скорости выполнения задачи, а требовательные к производительности участки выполняются за счет вызова подпрограмм на машинном коде из скрипта. Самым ярким представителем встраиваемых скриптовых языков, является JavaScript в браузерах, который позволяет выполнять интерактивные действия на веб страницах, и работает на всех системах в которых есть интернет браузеры.
Каждый интерпретатор после получения исходного кода скрипта (будь то загрузка из файла, или получение в параметре в виде строки), выполняет следующие действия:
Лексический анализ или токенизация (от англ. token – знак; представление лексемы в виде обьекта) – процесс разбиения исходного текста программы на лексемы (токены), которые являются атомарными сущностями языка, такие как. числа, строки, операторы и разделительные знаки. С такими сущностями интерпретатору далее будет намного удобней работать. На этом этапе также опускаются комментарии и сокращаются последовательности пробельных символов. Процесс примерного разбиение на лексемы показан на рисунке 1.
При лексическом анализе в строках также заменяются управляющие последовательности символов. Для того чтобы в случае возникновении ошибки, была возможность сообщить о её местоположении в исходном коде, в токенах также сохраняется информация с номером строки и первого символа лексемы. Таким образам после лексического анализа мы получем список токенов.
Получив список токенов интерпретатор выполняет синтаксический анализ, проверяя расположения лексем в управляющих конструкциях и выражениях в соответствии с правилами языка программирования. Параллельно с проверкой на корректность кода, синтаксический анализатор строит в памяти абстрактное синтаксическое дерево (AST – англ. Abstract Syntax Tree)[2], в котором узлами являются операторы, а листья представляют собой либо переменные, либо константы.
После постройки абстрактного синтаксического дерева список токенов далее не будет участвовать в процессе интерпретации и можно освободить память, использующуюся для его хранения. В каждом узле дерева также стоит сохранять информацию о месторасположении синтаксической конструкции в исходном коде, которую можно получить из токенов, это позволит выводить более детальную информации об ошибках времени исполнения.
Оптимизация в интерпретаторах может производится по усмотрению разработчика, так как обычно оптимизация осуществляется только по одному критерию, а именно либо по скорости выполнения, либо по потреблению памяти. И так, после формирования абстрактного синтаксического дерева интерпретатор может произвести несколько базовых оптимизаций, характерных как для интерпретаторов, так и для компиляторов.
Свёртка констант (англ. Constant Folding)[3] – эта оптимизация рекурсивно проходит по всем узлам абстрактного синтаксического дерева и если все листья являются константами, то узел вычисляется и заменяется вычисленной константой. Иначе говоря, эта оптимизация заменяет выражения, которые можно посчитать на этапе трансляции. Например, x = (10 + 5) * y; можно заменить на х = 15 * y.
Распространение констант (англ. Constant Propagation)[4] – подстановка значений вместо констант. Например:
const x = 5;
var y = 2 * x - 8;
Поскольку x имеет константное значение 5, мы можем подставить его во второе выражение:
const x = 5;
var y = 2 * 5 - 8;
Далее свёртка констант посчитает выражение и мы получим:
const x = 5;
var y = 2;
Удаление мёртвого кода (англ. Dead Code Elimination, DCE)[5] – оптимизация удаляет пустые блоки кода и узлы выполняющие бесполезные вычисления.
Упрощение выражений (англ. Expression Simplification) – эта оптимизация заменяет выражения на аналогичные, но более эффективные. Например: x = y * -1 можно заменить на x = -y.
JIT-компиляция (англ. Just-in-time compilation, компиляция «на лету»), динамическая компиляция (англ. dynamic translation)[6] – промежуточная компиляция абстрактного синтаксического дерева в байт-код некоторой виртуальной машины или машинный код конкретной платформы. За счёт этого может достигаться скорость выполнения программы сравнимая с компилируемыми программами. Однако возрастают требования к потреблению памяти и повышаются начальные временные затраты так как появляется дополнительная стадия компиляции.
Этап выполнения зависит была ли использована JIT-компиляция или нет. При отсутствии JIT-компиляции интерпретатор начинает рекурсивно проходит по каждому узлу абстрактного синтаксического дерева и выполняет операцию, ассоциированную с данным узлом. В случае использования JIT, в зависимости от вида компиляции, либо выполняется байт-код на виртуальной машине (что требует ещё и включения виртуальной машины в состав интерпретатора), либо исполняется непосредственно машинный код.
Скриптовые языки играют важную роль в современной IT сфере и понимание принципов работы интерпретаторов позволит создавать более качественные скриптовые программы. Также стоит отметить собственные разработки автора[7] в данной сфере, а именно небольшой встраиваемый язык для приложений на платформе Java, синтаксически напоминающий JavaScript.