Что такое скриптовый движок?
Я видел здесь то, что отличает язык программирования от языка сценариев, - это механизм сценариев. Но я не понимаю, как это работает, поэтому не вижу разницы.
например, я вижу код в методах вызова 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 в качестве языка сценариев - языка, используемого в конце пользователь для автоматизации (или" скрипта") сложных задач.
одно полезное различие между скриптовыми / интерпретируемыми языками и скомпилированными языками заключается в том, что интерпретатор скриптового языка обычно можно встроить в скомпилированный проект, например в игровой движок.