Интерпретатор — это программа, которая выполняет код на языке программирования. Отличается от компилятора, который перед выполнением преобразует исходный код в машинный язык. Интерпретатор используется при написании динамических языков программирования, когда нужно быстро получить результат.
Интерпретатор компилирует код построчно и тут же выполняет его. Преимущество такого подхода — возможность пошагово отслеживать процесс выполнения программы, выводить и изменять промежуточные результаты. Недостатком может стать замедление работы программы, по сравнению с некоторыми языками, которые используют компиляцию.
Основное преимущество интерпретатора — это его универсальность. Он может выполнять код на различных языках программирования, поддерживать различные платформы и операционные системы. Например, JavaScript — динамический язык программирования, которым поддерживаются все современные браузеры. Интерпретатор JavaScript означает, что скрипты не нужно компилировать, а браузер сам вызывает интерпретатор.
Отличие интерпретируемого языка программирования от компилируемого для самых маленьких и нубов.
Интерпретатор – что это такое?
Интерпретатор – это программа, которая выполняет код на определенном языке программирования.
В отличие от компилятора, который преобразует исходный код в машинный язык один раз, интерпретатор выполняет код построчно, без необходимости предварительной компиляции.
Таким образом, интерпретатор – это утилита, которая позволяет использовать язык программирования прямо в интерактивном режиме.
Наиболее распространенными интерпретируемыми языками программирования являются Python, JavaScript и Ruby.
Использование интерпретатора может быть полезно для быстрого тестирования кода, отладки и написания скриптов, но может снижать производительность программы, поскольку каждый раз при выполнении будет тратиться время на интерпретацию кода.
Понятие интерпретатора в программировании
Интерпретатор – это специальная программа, которая позволяет интерпретировать (выполнять) исходный код программы. Она необходима для того, чтобы пользователь мог запускать программы на своем компьютере без предварительной компиляции.
Интерпретатор работает следующим образом: он построчно считывает исходный код, и, если всё в порядке, выполняет его. Если встречается ошибка или проблема, то интерпретатор заканчивает работу и показывает ошибку пользователю.
Существуют разные типы интерпретаторов. Например, интерпретатор JavaScript работает в браузере и позволяет создавать динамические веб-страницы. Python-интерпретатор, в свою очередь, используется для создания реализации интерпретатора языка Python.
Интерпретаторы имеют свои преимущества и недостатки. Один из главных плюсов – это скорость разработки. Разработчики могут быстро тестировать свой код и проверять его работоспособность без необходимости компиляции. Недостатком является более низкая скорость выполнения программы по сравнению с компилируемыми языками программирования, что может быть заметно в случае больших проектов.
Что такое компилятор и интерпретатор ? Их основные отличия.
Таким образом, интерпретаторы являются важным инструментом для быстрого и удобного написания программ. Однако, при работе с большими проектами, компилируемые языки программирования могут быть более эффективны в плане скорости выполнения программы.
Как работает интерпретатор
Интерпретатор — это программа, которая считывает и обрабатывает исходный код написанный на определенном языке программирования. При работе интерпретатора исходный код программы обрабатывается построчно, при этом сразу же происходит выполнение команд. Таким образом, интерпретатор не преобразует исходный код в машинный код, а непосредственно выполняет написанный код.
Работа интерпретатора заключается в том, что он последовательно считывает код и определяет, что делать с каждой из написанных в нем команд. Интерпретатор может решать задачи, связанные с контролем выполнения команд, оперированиями со значениями переменных и тд.
Каждый отдельный язык программирования имеет свой набор инструкций, которые может понимать интерпретатор. Как только интерпретатор обнаруживает команду на конкретном языке программирования, он тут же выполняет ее.
Интерпретация происходит во времени выполнения программы, когда он уже запущен. Это позволяет более просто и быстро разрабатывать программы, потому что интерпретаторы не требуют компиляции перед запуском программы. Таким образом, разработчик может тут же увидеть результат своего кода.
Более того, использование интерпретаторов позволяет более производительно разрабатывать веб-приложения, так как веб-браузеры могут использовать интерпретатор для обработки JavaScript веб-страниц.
Процесс работы интерпретатора в программировании
Интерпретатор — это программа, которая считывает и исполняет исходный код на определенном языке программирования. Процесс работы интерпретатора в программировании основывается на выполнении следующих шагов:
- Считывание исходного кода программы.
- Лексический анализ исходного кода с помощью лексера.
- Синтаксический анализ и объединение лексем в грамматически правильные конструкции (абстрактное синтаксическое дерево).
- Исполнение кода на основе абстрактного синтаксического дерева.
Интерпретатор исполняет программу построчно, переводя каждую строку в выполнимый машинный код и сразу же её исполняя. Это делает работу интерпретатора более гибкой, чем у компилятора, который должен весь исходный код перевести в один раз и только потом запустить программу.
Преимуществом работы с интерпретатором является возможность легко вносить изменения и исправления в код программы в процессе её работы. Однако по сравнению с компилятором, работа интерпретатора требует большего количества ресурсов и может иметь меньшую производительность.
Источник: stduviewer-free.ru
Интерпретируемый язык программирования
Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации [1] . Классифицируя языки программирования по способу исполнения [2] , к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) [3] с помощью специальной программы-интерпретатора (что противопоставляется [1] компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код [3] ). Такой язык может реализовывать конструкции, допускающие динамические изменения на этапе выполнения (модификация существовавших или создание новых подпрограмм). Эти конструкции затрудняют компиляцию и трансляцию на компилируемый язык [1] .
В общем случае, любой язык может быть компилируемым и интерпретируемым. В предельном случае такой язык можно реализовать только при помощи интерпретаторов [4] . Также встречаются названия interpretative language («интерпретативный») [4] , interpretable language («поддающийся интерпретации»), interpreted language («интерпретируемый») [5] .
При этом для многих языков существует различие в производительности между компилируемой и интерпретируемой реализацией.
Большое количество языков, включая Бейсик, Си, Лисп, Паскаль и Python, имеют обе реализации. В Java используется JIT-компиляция для генерации машинного кода, хотя изначально он переводится в интерпретируемую форму. Языки Microsoft .NET Framework компилируются в Common Intermediate Language (CIL), который во время выполнения компилируется в машинный код. Большинство реализаций Лиспа позволяют смешивать оба вида кода.
История
В ранние годы развития программирования на языки сильно влиял выбор способа выполнения. Например, компилируемые языки требовали задания типа данных переменной в момент её описания или первого использования. В то время как интерпретируемые языки в силу своей динамической природы позволяли отказаться от этого требования, что давало больше гибкости и ускоряло разработку.
Изначально интерпретируемые языки преобразовывались в машинный код построчно, то есть каждая логическая строка компилировалась непосредственно перед выполнением. В результате каждая инструкция, заключенная в тело цикла и исполняемая несколько раз, столько же раз обрабатывалась транслятором. В настоящее время такие эффекты редки.
Большинство интерпретируемых языков предварительно транслируются в промежуточное представление. Оно представляет собой байт-код или шитый код (threaded code). Это набор инструкций по вызову небольших фрагментов более низкоуровневого кода, эквивалентный нескольким командам ассемблера или командам виртуальной машины соответственно. Уже этот код исполняется интерпретатором или виртуальной машиной. Например, такую схему используют Java, Python и Ruby (использует представление кода в виде абстрактного синтаксического дерева).
Промежуточный код может создаваться как явной процедурой компиляции всего проекта (Java), так и скрытой трансляцией каждый раз перед началом выполнения программы (Perl, Ruby) и при изменении исходного кода (Python).
Преимущества
Есть ряд возможностей, которые значительно легче реализовать в интерпретаторе, чем в компиляторе:
- кроссплатформенность,
- рефлексия и интроспекция,
- динамическая типизация,
- использование динамической области видимости и замыканий,
- пошаговое отслеживание выполнения программы [1] ,
- модификация программы во время исполнения [1] ,
- меньшие затраты времени на разработку и отладку [5] ,
- простой способ создания переносимых программ [6] ,
- не требует затрат на компиляцию небольших программ [6] .
Кроме того, принципы и стиль программирования часто не требуют создания и описания специальных конструкций, оформляющих программу (манифестов, классов, типов данных). Это позволяет разрабатывать и тестировать код постепенно, что удобно как для написания небольших программ, так и для изолированной разработки модулей для сложных систем. В силу своей универсальности их удобно применять в качестве сценарных языков.
Исключение этапа компиляции позволяет производить более быструю разработку программ, поэтому интерпретируемые языки используются при написании сложных одноразовых программ (например, для проведения однократного вычисления).
Недостатки
Основным недостатком является более медленное выполнение программы [1] [6] [7] по сравнению с выполнением программы, предварительно скомпилированной в машинный код. Например, выполнение PHP и Python может оказаться более чем в 100 раз медленнее чем C++ [8] . Трансляция в байт-код и JIT-компиляция не решают этой проблемы полностью. Дополнительный слой интерпретатора или виртуальной машины замедляет выполнение программы и может требовать больше ресурсов. Во время выполнения интерпретатор всегда должен быть загружен в память (а это могут быть и большие программы, как браузер для JS или Office для VBA) [6] . Комментарии могут снижать производительность и для обхода этого создают две версии кода — готовую для использования (с удалёнными комментариями) и разрабатываемую [9] .
В результате в среднем интерпретируемый код следует тестировать тщательнее компилируемого, строже придерживаться соглашений по оформлению программ и использовать дополнительные анализаторы качества кода. Последний недостаток выражен несильно, так как при серьёзной разработке на компилируемых языках также необходимо применение этих средств.
Примечания
- ↑ 1,01,11,21,31,41,5Дорот В. Л., Новиков Ф. А.Интерпретируемый язык программирования, Интерпретация // Толковый словарь современной компьютерной лексики. — 3-е изд. — СПб. : БХВ-Петербург, 2004. — С. 215. — 608 с. — ISBN 9785941574919. — ISBN 5941574916.
- ↑Макарова Н. В., Волков В. Б.19.1.2. Классификация языков программирования // Информатика: Учебник для вузов. — СПб. : Питер, 2015. — С. 557. — 576 с. — ISBN 9785496015509.
- ↑ 3,03,1Microsoft Press. interpret, interpreted language // Толковый словарь по вычислительной технике. — М. : Русская редакция, 1995. — С. 236. — 496 с. — ISBN 5750200086. — ISBN 1556155972.
- ↑ 4,04,1 I.153 interpretative language // Толковый словарь по вычислительным систамам / Под ред. В. Иллингуорта и др.. — М. : Машиностроение, 1990. — С. 241—242. — 560 с. — ISBN 521700617X.
- ↑ 5,05,1Кочергин В. И. interpreter // Большой англо-русский толковый научно-технический словарь компьютерных информационных технологий и радиоэлектроники. — 2016. — ISBN 978-5-7511-2332-1.
- ↑ 6,06,16,26,3 Интерпретатор, Интерпретация // Толковый словарь по информатике / Под. ред. Г. Г. Пивняка. — Днепропетровск: Национальный горный университет, 2008. — С. 327-328. — 599 с. — ISBN 978-966-350-087-4.
- ↑Воройский Ф. С.Интерпретация, Интерпретатор // Информатика. Энциклопедический словарь-справочник. — М. : Физматлит, 2006. — С. 325. — 768 с. — ISBN 5922107178. — ISBN 9785457966338.
- ↑Макконнелл, 2010, 25.3. Где искать жир и патоку? Интерпретируемые языки, с. 585.
- ↑Макконнелл, 2010, 32.4. Советы по эффективному комментированию. Производительность не является разумной причиной отказа от комментирования, с. 774.
Литература
- Интерпретация языка структурная // Энциклопедия кибернетики / Глушков В. М.. — Киев: Главная редакция УСЭ, 1974. — Т. 1. — С. 390—391. — 608 с.
- Шаблон:Книга:Кнут
- Макконнелл С.Совершенный код[en] . — М. : Русская редакция, 2010. — 896 с. — ISBN 9785750200641.
- Роберт У. Себеста. 1.7.2 Чистая интерпретация // Основные концепции языков программирования. — 5-е изд. — М. : Вильямс, 2001. — С. 50-52. — 672 с. — ISBN 5845901928.
- Michael L. Scott. Programming Language Pragmatics. — Morgan Kaufmann, 2000. — ISBN 1558604421.
- Интерпретаторы
- Реализации языков программирования
- Языки программирования
Источник: xn--h1ajim.xn--p1ai
Интерпретируемый язык программирования
Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации [1] . Классифицируя языки программирования по способу исполнения [2] , к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) [3] с помощью специальной программы-интерпретатора (что противопоставляется [1] компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код [3] ). Такой язык может реализовывать конструкции, допускающие динамические изменения на этапе выполнения (модификация существовавших или создание новых подпрограмм). Эти конструкции затрудняют компиляцию и трансляцию на компилируемый язык [1] .
В общем случае, любой язык может быть компилируемым и интерпретируемым. В предельном случае такой язык можно реализовать только при помощи интерпретаторов [4] . Также встречаются названия interpretative language («интерпретативный») [4] , interpretable language («поддающийся интерпретации»), interpreted language («интерпретируемый») [5] .
При этом для многих языков существует различие в производительности между компилируемой и интерпретируемой реализацией.
Большое количество языков, включая Бейсик, Си, Лисп, Паскаль и Python, имеют обе реализации. В Java используется JIT-компиляция для генерации машинного кода, хотя изначально он переводится в интерпретируемую форму. Языки Microsoft .NET Framework компилируются в Common Intermediate Language (CIL), который во время выполнения компилируется в машинный код. Большинство реализаций Лиспа позволяют смешивать оба вида кода.
Источник: wiki2.org