Что такое скриптовый движок?

Я видел здесь то, что отличает язык программирования от языка сценариев, - это механизм сценариев. Но я не понимаю, как это работает, поэтому не вижу разницы.

например, я вижу код в методах вызова Java в импортированных библиотеках, но он не кажется "достаточно отличным" от кода Python или Ruby - оба являются языками сценариев, верно? Я предполагаю, что это также связано с процедурной и объектно-ориентированной парадигмами, но, в конце концов, я не понимаю, почему они классифицируются так, как они есть.

редактировать: о скриптовом движке, являющемся интерпретатором... Разве Java не является интерпретируемым языком? Я знаю, что есть скомпилированный байт-код, но все равно, это не имеет смысла для меня.

6 ответов


нет жесткой и быстрой линии между "языком сценариев"и" языком программирования".

свойства "скриптовых языков", как правило, включают:

  • диспетчер памяти, собранный мусором, без необходимости явно выделять и освобождать объекты

  • возможность просто выполнять команды, без кучу шаблонного кода. Java обычно используется в качестве встречного примера этого. В Python, вы можете просто сказать print("Hello, world!") но в Java вам нужно намного больше синтаксиса (пример здесь - семь строк кода).

  • связанные с вышеизложенным, обычно на "языке сценариев" вам не нужно явно объявлять переменные, и вам редко нужно объявлять типы переменных. Некоторые языки сценариев (например, Javascript) будут принуждать типы с диким отказом, а другие (например, Python) строго типизированы и вызывают исключения при несоответствиях типов.

  • нет необходимости явный шаг компиляции или ссылки; вы просто пишете код и запускаете его. ("Язык сценариев" по-прежнему может быть скомпилирован только вовремя внутри; Python делает это, например.)

помимо этих основ, " язык сценариев "может варьироваться от чего-то примитивного и тривиального, например," пакетного " языка в MS-DOS, до выразительного и мощного языка, такого как Python, Ruby и т. д.


вы в основном обнаружили, что различие между языком сценариев и "не-скриптовым" языком довольно искусственно. Python может быть скомпилирован в байт-код JVM (с Jython), и я считаю, что Ruby также может-тогда "движок", выполняющий код Python или Ruby, будет JVM, тот же "движок", который запускает код Java (или код Scala и т. д.). Аналогично с .NET и IronPython (или IronRuby) - тогда "движок" является CLR Microsoft, так же, как для C#, Boo и так далее. Языки, которые называются "скриптами", часто динамически типизируются... но я никогда не слышал термин, используемый для других важных динамически типизированных языков, таких как Smalltalk, Mozart/OZ или Erlang...;-).


Я знаю, что вы приняли ответ, однако есть некоторые amgiguity.

при обращении к движок, мы обычно имеем в виду небольшой встроенный язык, который находится в шаблоне и генерирует текстовые выходные данные или документы. Например, Freemarker и Velocity часто называют обработчиками сценариев. Erb тоже сидел бы здесь, но, как ни странно, не упоминается как скриптовый движок, который часто.

A скриптовый язык вообще должен нет шага компиляции, поэтому можно запустить более просто как, или, из сценария оболочки. Это включает в себя такие вещи, как awk, perl, tcl, python, ruby и так далее. Эти языки обычно должны быть краткими, а безопасность типов часто необязательна. Windows поддерживает несколько языков, в это сценарии услуги. Это создает языки сценариев для различных компонентов в Windows.

таким образом, полностью скомпилированные языки, такие как Java, могут работать как байт-код и может рассматриваться как интерпретируемый, однако дело в том, что существует явный шаг компиляции, нет интерпретатора (с Sun JRE в любом случае), который предоставляет исполняемую среду выполнения для кода java.

другие языки как VBA врезаны, много из языков выше можно врезать. Встроенные языки также можно назвать механизмом сценариев для хост-приложения.

на мой взгляд, скриптовый движок интерпретирует программные инструкции и turn инструктирует более крупное хост-приложение или систему. Инструкции выполняются немедленно, не заботясь о каких-либо оставшихся инструкциях.

много шепелявит нет различий между данными и кодом, возможно, динамически компиляции во время выполнения. Шаги интерпретации, компиляции и выполнения доступны программисту Lisp для манипулирования, как программисты манипулируют данными на других языках.


вероятно, самое близкое к тому, о чем вы говорите, это переводчик:

в информатике переводчик обычно означает компьютерную программу, которая выполняет, т. е. выполняет инструкции написано на языке программирования. При устном переводе и компиляции два основных средства, с помощью которых реализованы языки программирования, они не полностью различаются категории, одна из причин, что большинство перевода системы выполните некоторые переводческие работы, просто как компиляторы.

в основном intepreter (или scripting engine, если вы предпочитаете) - это компонент, который отвечает за превращение скрипта в машинный код во время выполнения (в отличие от компилятора, который создает машинный код до времени выполнения).


"язык сценариев"можно назвать разговорным. Термин не определен, и вы увидите некоторые разногласия относительно того, какие языки являются языками сценариев. Иногда это полезно для передачи смутного представления о свойствах языка (см. steveha это).

"язык сценариев" может также относиться к конкретному использованию языка. Например, часть программного обеспечения может использовать Lua в качестве языка сценариев - языка, используемого в конце пользователь для автоматизации (или" скрипта") сложных задач.


одно полезное различие между скриптовыми / интерпретируемыми языками и скомпилированными языками заключается в том, что интерпретатор скриптового языка обычно можно встроить в скомпилированный проект, например в игровой движок.