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

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

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

РЕДАКТИРОВАТЬ: О механизме сценариев, являющемся интерпретатором... Является ли язык Java не интерпретированным? Я знаю там скомпилированный байт-код, но все же, это не имеет смысла для меня.

Ответ 1

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

Свойства "языков сценариев" имеют тенденцию включать:

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

В принципе, intrereter (или механизм сценариев, если вы предпочитаете), является компонентом, который отвечает за превращение script в машинный код во время выполнения (в отличие от компилятора, который создает машинный код до времени выполнения).

Ответ 5

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

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

Ответ 6

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