Сценарный язык





Сценарный язык (язык сценариев, жарг. скриптовый язык; англ. scripting language) — высокоуровневый язык сценариев (англ. script) — кратких описаний действий, выполняемых системой. Разница между программами и сценариями довольно размыта. Сценарий — это программа, имеющая дело с готовыми программными компонентами[1].


Согласно Джону Устерхауту, автору языка Tcl, высокоуровневые языки можно разделить на языки системного программирования (англ. system programming languages) и сценарные языки (англ. scripting languages). Последние он также назвал склеивающими языками (англ. glue languages) или языками системной интеграции (англ. system integration languages). Сценарии обычно интерпретируются, а не компилируются[2], хотя сценарные языки программирования один за другим обзаводятся JIT-компиляторами[3][4][5].


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




Содержание






  • 1 Классификация


    • 1.1 Командно-сценарные языки


    • 1.2 Встроенные (прикладные сценарные) языки


    • 1.3 Языки общего назначения




  • 2 Критика


  • 3 Плагины и скрипты


  • 4 Примечания


  • 5 Литература


  • 6 Ссылки





Классификация |


Языки программирования вообще и сценарные языки в частности могут быть классифицированы множеством различных способов.


В плане быстродействия скриптовые языки можно разделить на языки динамического разбора (sh, COMMAND.COM) и предварительно компилируемые (Perl). Языки динамического разбора считывают инструкции из файла программы минимально требующимися блоками, и исполняют эти блоки, не читая дальнейший код. Предкомпилируемые языки транслируют всю программу в байт-код и затем исполняют его. Некоторые скриптовые языки имеют возможность компиляции программы «на лету» в машинный код (т. н. JIT-компиляция).


По применению языки можно грубо разделить на три типа[7]:



  • командно-сценарные;

  • прикладные сценарные;

  • универсальные сценарные.



Командно-сценарные языки |



Появились ещё в 1960-х годах для управления заданиями в операционных системах. Из языков того времени наиболее известен JCL для OS/360. В этот класс входят языки пакетной обработки (англ. batch language) и языки командных оболочек, например sh, csh для Unix. Эти языки чаще всего используются в пакетном режиме обработки[7].



  • AutoHotkey

  • JCL


  • sh

    • bash

    • csh

    • ksh



  • Pilot[7]

  • REXX

  • AppleScript


  • COMMAND.COM и cmd.exe

  • VBScript

  • PowerShell

  • AutoIt


Например, язык AppleScript операционной системы MacOS имеет редактор Script Editor, который позволяет записывать действия по мере их выполнения пользователем в системе в файл сценария (текстовый файл) и оформлять в виде исполняемой программы. Такой подход позволяет составлять простейшие сценарии непрограммирующим пользователем[8].



Встроенные (прикладные сценарные) языки |



Сценарные языки этого типа начали появляться в 1980-е годы, когда на промышленных персональных компьютерах стало возможным интерактивное общение с ОС. В клиент-серверной архитектуре такие языки работали в клиентской части программного обеспечения[7].



  • AutoLISP


  • ECMAScript и его диалекты (JScript, JavaScript, ActionScript)[7]

  • Emacs Lisp

  • ERM

  • Game Maker Language

  • LotusScript[7]

  • Lua


  • MQL4 script

  • UnrealScript

  • VBA

  • Встроенный язык программирования 1С:Предприятие



Языки общего назначения |


Этот тип сценарных языков наиболее известен (особенно в применении к веб-программированию). Языки этого типа стали возникать с 1990-х годов[7].




  • Tcl (Tool command language)

  • Lua

  • Perl

  • PHP

  • Python

  • REBOL

  • Ruby

  • JavaScript


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



Критика |


Создатель Java Джеймс Гослинг отвёл динамическим языкам программирования (упомянув PHP и Ruby) роль сценарных языков, генерирующих веб-страницы, но непригодных для применения в более широкой нише приложений из-за проблем с масштабируемостью и производительностью[9]. Приверженцы динамических языков не оставили критику без ответа по всем пунктам, в частности о его старании представить современные динамические языки всего лишь «сценарными»[10].



Плагины и скрипты |



Для написания пользовательских расширений могут использоваться как скрипты (в терминологии некоторых программ «макросы»), так и плагины (независимые модули, написанные на компилируемых языках; в некоторых программах они могут называться «утилитами», «экспортёрами», «драйверами»).


Скриптовый язык удобен в следующих случаях:



  1. Если нужно обеспечить программируемость без риска дестабилизировать систему. Так как, в отличие от плагинов, скрипты интерпретируются, а не компилируются, неправильно написанный скрипт выведет диагностическое сообщение, а не приведёт к системному краху;

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

  3. Скрипты известны низким порогом вхождения. На скриптовом языке может писать даже низкоквалифицированный программист.

  4. Если требуется кроссплатформенность. Например, JavaScript — его исполняют браузеры под самыми разными ОС.

  5. Скриптовые языки не применяются для написания программ, требующих оптимальности и быстроты исполнения. Но из-за простоты на них часто пишутся небольшие одноразовые («проблемные») программы. Многие скриптовые языки общего назначения работают достаточно медленно, поэтому их часто используют только в сочетании со сторонними библиотеками (например, NumPy в сочетании с Python).


У плагинов также есть важные преимущества.



  1. Готовые программы, оттранслированные в машинный код, выполняются значительно быстрее скриптов, которые интерпретируются из исходного кода динамически при каждом исполнении. Большинство программ переносимы на уровне исходного кода и могут быть выполнены интерпретатором соответствующего языка подобно скриптам. Использование же байт-кода (Java, C#, llvm) позволяет хранить, переносить и исполнять программы более эффективным образом, нежели скрипты.

  2. Полный доступ к любому аппаратному обеспечению или ресурсу ОС (в скриптовом языке для этого должен существовать специальный API, написанный на компилируемом языке). Плагины, работающие с аппаратным обеспечением, традиционно называют драйверами.

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

  4. Если языки программирования созданы в разное время и для разных целей, их сравнение по выразительной силе некорректно. Совершенно естественно, что, например, алголоподобные языки (создавались в 60-х и 70-х) будут менее выразительны, чем современные скриптовые языки общего назначения. В сравнении же с "ровесниками" скрипты выглядят уже гораздо менее выгодно.

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



Примечания |





  1. Сузи Р. Сценарные языки: Python. «Мир ПК», 9, 2001


  2. Ousterhout, 1998.


  3. LuaJIT


  4. PyPy


  5. Joab Jackson (IDG News Service), Facebook releases a PHP just-in-time compiler


  6. Денисов Ю. А., Программирование для гуманитариев, 12. Лекция: Представление грамматик, интуит.ру


  7. 1234567 Богатырев, 2001.


  8. Трофимов, Трофимова, 1997.


  9. James Gosling: «Java Is Under No Serious Threat From PHP, Ruby or C#»


  10. Ryan Tomayko, Gosling Didn’t Get The Memo




Литература |



  • Богатырев Р. Природа и эволюция сценарных языков (рус.) // Мир ПК. — 2001. — № 11.

  • Ousterhout J. Scripting: Higher-Level Programming for the 21st Century (англ.) // IEEE Computer. — 1998. — Vol. 31, no. 3. — P. 23-30.

  • Георгиев В.О., Еникеев А.И. Сценарный подход в создании диалоговых систем // Программные продукты и системы. — 1991. — № 3.

  • Трофимов М. И., Трофимова М. П. В поисках компьютерного эсперанто // Открытые системы. — 1997. — № 3.



Ссылки |


  • Lynn Greiner, Q&A: The state of the scripting universe: Scripting languages are becoming more popular, www.computerworld.com, 2008



Popular posts from this blog

Михайлов, Христо

Гороховецкий артиллерийский полигон

Центральная группа войск