Интерпретируемый язык - Википедия - Interpreted language
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
An интерпретируемый язык это тип язык программирования для которых большинство его реализаций выполняют инструкции напрямую и свободно, без предварительного составление а программа в машинный язык инструкции. В устный переводчик выполняет программу напрямую, переводя каждый оператор в последовательность из одного или нескольких подпрограммы, а затем на другой язык (часто Машинный код ).
Условия интерпретируемый язык и компилируемый язык не определены должным образом, потому что теоретически любой язык программирования можно интерпретировать или компилировать. В реализации современного языка программирования все более популярными становятся платформы, предоставляющие оба варианта.
Интерпретируемые языки также можно противопоставить машинным языкам. Функционально и выполнение, и интерпретация означают одно и то же - выборку следующей инструкции / оператора из программы и ее выполнение. Хотя интерпретируется байтовый код дополнительно идентичен машинному коду по форме и имеет ассемблер представление, термин "интерпретируемый" иногда зарезервирован для языков, "обрабатываемых программным обеспечением" ( виртуальная машина или же эмулятор ) поверх родного (т.е. аппаратное обеспечение ) процессор.
В принципе, программы на многих языках могут компилироваться или интерпретироваться, эмулироваться или выполняться изначально, поэтому это обозначение применяется исключительно на основе общепринятой практики реализации, а не представляет собой существенное свойство языка.
Многие языки были реализованы с использованием как компиляторов, так и интерпретаторов, включая БАЗОВЫЙ, C, Лисп, и Паскаль. Ява и C # собраны в байт-код, то интерпретируемый язык, удобный для виртуальных машин. Реализации Лиспа может свободно смешивать интерпретируемый и скомпилированный код.
Различие между компилятором и интерпретатором не всегда четко определено, и многие языковые процессоры сочетают и то, и другое.
Историческое прошлое
На заре компьютерных технологий на дизайн языка сильно повлияло решение использовать компиляцию или интерпретацию в качестве способа выполнения. Например, Болтовня (1980), который был разработан для интерпретации во время выполнения, позволяет универсальным объектам динамически взаимодействовать друг с другом.
Первоначально интерпретируемые языки компилировались построчно; то есть каждая строка была скомпилирована в момент ее выполнения, и если цикл или подпрограмма заставляли определенные строки выполняться несколько раз, они каждый раз перекомпилировались. Это стало гораздо реже. Большинство так называемых интерпретируемых языков используют промежуточное представление, который сочетает в себе компиляцию и интерпретацию.
Примеры включают:
Промежуточное представление можно скомпилировать раз и навсегда (как в Ява ), каждый раз перед выполнением (как в Рубин ), или каждый раз, когда перед выполнением обнаруживается изменение источника (как в Python ).
Преимущества
Интерпретация языка дает реализациям некоторую дополнительную гибкость по сравнению с скомпилированными реализациями. Возможности, которые часто проще реализовать в интерпретаторах, чем в компиляторах, включают:
- независимость от платформы (Например, байтовый код Java)
- отражение и рефлексивное использование оценщика (например, первого порядка оценка функция)
- динамическая типизация
- меньший размер исполняемой программы (поскольку реализации имеют гибкость в выборе кода инструкции)
- динамическое определение
Кроме того, исходный код можно читать и копировать, что дает пользователям больше свободы.
Недостатки
Эта секция возможно содержит оригинальные исследования.Июль 2019) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Недостатки интерпретируемых языков:
- Без статическая проверка типов, что обычно выполняется компилятором, программы могут быть менее надежными,[нужна цитата ] потому что проверка типов устраняет целый класс ошибок программирования (хотя проверка типов кода может выполняться с помощью дополнительных автономных инструментов. См. Машинопись например)
- Переводчики могут быть восприимчивы к Внедрение кода атаки.
- Более медленное выполнение по сравнению с прямым родным Машинный код казнь на хосте ЦПУ. Техника, используемая для повышения производительности: своевременная компиляция который преобразует часто выполняемые последовательности интерпретируемых инструкций в машинный код хоста. JIT чаще всего сочетается с компиляцией в байтовый код, как в Ява.
- Исходный код можно читать и копировать (например, JavaScript на веб-страницах) или более легко реконструировать с помощью отражение в приложениях, где интеллектуальная собственность имеет коммерческое преимущество. В некоторых случаях, обфускация используется как частичная защита от этого.
Лакмусовые тесты
Эта секция возможно содержит оригинальные исследования.Август 2019 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Для определения того, будет ли конкретный язык называться компилируемым или интерпретируемым его пользователями, можно использовать несколько критериев:
- Если подпрограмма может быть вызвана до того, как она определена в исходном коде, весь исходный код, вероятно, компилируется в промежуточное представление перед выполнением. Примеры: Perl, Ява
- Если промежуточное представление (например, байт-код) обычно создается и вызывается непосредственно как отдельный шаг при выполнении кода, язык, скорее всего, будет считаться скомпилированным. Примеры: Ява, C
- Если синтаксическая ошибка в исходном коде не препятствует выполнению предыдущих операторов, скорее всего, это интерпретированная парадигма. Примеры: Оболочка Unix языки
Они не являются окончательными. Скомпилированные языки могут иметь свойства, подобные интерпретатору, и наоборот.
Список часто используемых интерпретируемых языков
- APL Векторный ориентированный язык с необычным набором символов
- J Вариант APL, в котором неявное определение дает некоторые преимущества компиляции
- БАЗОВЫЙ (хотя исходная версия, Dartmouth BASIC, была скомпилирована, как и многие современные BASIC)
- Системы обработки и решения уравнений
- Эйфория Интерпретировано или составлено.
- Язык GameMaker Байт-код после GameMaker: Studio.
- JavaScript
- Четвертый
- Лава
- Лисп
- Lua
- МАМПЫ
- PHP
- PostScript
- PowerShell
- Рубин
- REXX
- Семя7
- Болтовня
- Таблицы
- S
- Tcl
- Оболочка Unix
- VBScript
- XMLmosaic - XML-файл, содержащий язык программирования C #, интерпретируемый консольным приложением, написанным на Visual Basic .NET.[1]
Языки, обычно компилируемые в байт-код
Многие языки сначала компилируются в байт-код. Иногда байт-код также можно скомпилировать в собственный двоичный файл с помощью Компилятор AOT или выполняются изначально аппаратным процессором.
- AppleScript
- Erlang (скомпилирован в байт-код Erlang и интерпретирован BEAM VM)
- Эликсир (работает на виртуальной машине Erlang)
- Ява (скомпилирован в байт-код Java для интерпретации JVM )
- .NET Framework языки (переведены в байт-код, называются CIL ).
- Лисп
- Lua
- Perl
- Щука
- Python (скомпилирован в байт-код Python и интерпретирован CPython )
- Писк Smalltalk
- Visual FoxPro
Смотрите также
Цитирование
- ^ «Архив CodePlex». Архив CodePlex. Получено 7 апреля 2018.
Рекомендации
- Браун, П.Дж. (1979). Написание интерактивных компиляторов и интерпретаторов. Джон Вили. ISBN 0-471-27609-X.