Язык сценариев - Scripting language

А сценарии или язык сценария это язык программирования для особого среда выполнения что автоматизирует казнь задач;[1] В качестве альтернативы задачи могут выполняться по очереди человеком-оператором. Языки сценариев часто интерпретированный, скорее, чем составлен.

Примитивы обычно представляют собой элементарные задачи или API звонки[требуется разъяснение ], а язык позволяет объединять их в большее количество программ. Среды, которые можно автоматизировать с помощью сценариев, включают: программного обеспечения Приложения, веб-страница в пределах веб-браузер, использование снаряды из операционные системы (ОПЕРАЦИОННЫЕ СИСТЕМЫ), встроенные системы, а также многочисленные игры. Язык сценариев можно рассматривать как предметно-ориентированный язык для конкретной среды; в случае написания сценария приложения он также известен как язык расширения. Языки сценариев также иногда называют языки программирования очень высокого уровня, поскольку они работают на высоком уровне абстракции, или как языки управления, особенно для языков управления заданиями на мэйнфреймах.

Термин «язык сценариев» также используется в широком смысле для обозначения динамичный высокий уровень общее назначение интерпретируемые языки, такие как Perl,[2] PowerShell, Python, и Tcl.[3] с термином «сценарий», который часто используется для небольших программ (до нескольких тысяч строк кода) на таких языках или на предметно-ориентированных языках, таких как языки обработки текста sed и AWK. Некоторые из этих языков были первоначально разработаны для использования в определенной среде, а затем были преобразованы в переносимые предметно-ориентированные языки или языки общего назначения. И наоборот, многие языки общего назначения имеют диалекты, которые используются в качестве языков сценариев. В этой статье обсуждаются языки сценариев в узком смысле языков для конкретной среды.

Спектр языков сценариев варьируется от очень маленьких до очень высоких. предметно-ориентированные языки к языки программирования общего назначения используется для написания сценариев. Стандартные примеры языков сценариев для конкретных сред включают: Баш, для Unix или Unix-подобный операционные системы; ECMAScript (JavaScript ), для веб-браузеров; и Visual Basic для приложений, для Майкрософт офис Приложения. Lua - это язык, разработанный и широко используемый в качестве языка расширения. Python - это язык общего назначения, который также обычно используется в качестве языка расширения, в то время как ECMAScript по-прежнему в первую очередь является языком сценариев для веб-браузеров, но также используется как язык общего назначения. В Emacs Lisp диалект Лисп (для Emacs редактор) и диалект Visual Basic для приложений Visual Basic являются примерами диалектов языков сценариев для языков общего назначения. Некоторые игровые системы, в частности Вторая жизнь виртуальный мир и Trainz франшиза симуляторов железной дороги была значительно расширена в функциональности за счет расширений сценариев (Язык сценариев Linden и TrainzScript). В других играх вроде Веснот, множество реальных игр, в которые играют игроки, представляют собой сценарии, написанные другими пользователями.

Характеристики

Типичные языки сценариев предназначены для очень быстрого изучения и написания либо в виде коротких файлов исходного кода, либо в интерактивном режиме в цикл чтения – оценки – печати (REPL, языковая оболочка).[4] Обычно это подразумевает относительно простые синтаксис и семантика; обычно "сценарий" (код, написанный на языке сценариев) выполняется от начала до конца как "сценарий" без явного точка входа.

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

общественный класс Привет мир {    общественный пустота printHelloWorld() {        Система.вне.println("Привет мир");    }}

Этот фрагмент кода, предназначенный для печати «Hello World», ничего не делает, поскольку основной() является не объявлен в Привет мир class, хотя приведенный ниже был бы полезен.

общественный класс Привет мир {    общественный пустота printHelloWorld() {        Система.вне.println("Привет мир");    }    общественный статический пустота основной(Строка[] аргументы) {        printHelloWorld();    }}

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

Распечатать("Привет мир")Распечатать "Привет мир"  # Python 2.7 или более ранней версии

Эта одна строка кода Python выводит «Hello World»; нет декларативный заявление как основной() здесь требуется.

Язык сценариев обычно интерпретированный из исходного кода или байт-код.[5] Напротив, программная среда (интерпретатор), для которой написаны сценарии, обычно пишется на компилируемый язык и распространяется в Машинный код форма.

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

Скрипты часто создаются или изменяются тем, кто их выполняет,[6] но они также часто распространяются, например, когда большие части игр написаны на языке сценариев, особенно Гугл Хром Игра тираннозавров.

История

Рано мэйнфреймы (в 1950-е годы) не были интерактивными, вместо этого использовались пакетная обработка. IBM Язык управления заданиями (JCL) - это архетип языков, используемых для управления пакетной обработкой.[7]

Первый интерактивный снаряды были разработаны в 1960-х годах для обеспечения удаленного управления первым совместное времяпровождение системы, и они использовали сценарии оболочки, который управлял запуском компьютерных программ в компьютерной программе, оболочке. Кальвин Мурс в его ПРОФ языку обычно приписывают изобретение подстановка команд, возможность встраивать команды в сценарии, которые при интерпретации вставляют в сценарий строку символов.[8] Мультики называет это активные функции.[9]Луи Пузен написал ранний процессор для командных сценариев под названием RUNCOM для CTSS около 1964 г. Стюарт Мэдник в MIT написал язык сценариев для IBM CP / CMS в 1966 году. Он первоначально назвал этот процессор КОМАНДА, позже названный EXEC.[10] Multics включала в себя ответвление CTSS RUNCOM, также называемое RUNCOM.[11] EXEC в конечном итоге был заменен на EXEC 2 и REXX.

Такие языки как Tcl и Lua были специально разработаны как языки сценариев общего назначения, которые можно было встроить в любое приложение. Другие языки, такие как Visual Basic для приложений (VBA) обеспечил тесную интеграцию со средствами автоматизации базовой системы. Внедрение таких универсальных языков сценариев вместо разработки нового языка для каждого приложения также имело очевидные преимущества, избавляя разработчика приложений от необходимости кодировать языковой переводчик с нуля и позволяя пользователю применять навыки, полученные в других местах.

Некоторое программное обеспечение включает несколько разных языков сценариев. Современный веб-браузеры обычно предоставляют язык для написания расширений для самого браузера и несколько стандартных встроенных языков для управления браузером, включая JavaScript (диалект ECMAScript ) или XUL.

Типы

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

Склейте языки

Сценарии часто противопоставляются системное программирование, как в Дихотомия Остерхаута или "программирование в большом и программирование в малом ". В этом представлении сценарии клей код, подключение программные компоненты, и язык, специализированный для этой цели, является клей язык. Конвейеры и сценарии оболочки являются архетипическими примерами связующих языков, и Perl изначально был разработан для выполнения этой же роли. веб-разработка можно рассматривать как использование «клеящих» языков для взаимодействия между база данных и веб сервер. Но если значительный объем логики написан в сценарии, его лучше охарактеризовать как просто еще один программный компонент, а не как «клей».

Склеивающие языки особенно полезны для написания и сопровождения:

  • пользовательские команды для командной оболочки;
  • программы меньшего размера, чем те, которые лучше реализованы на компилируемом языке;[нужна цитата ]
  • программы-оболочки для исполняемых файлов, такие как пакетный файл, который перемещает файлы или манипулирует ими и выполняет другие действия с операционной системой до или после запуска приложения, такого как текстовый процессор, электронная таблица, база данных, ассемблер, компилятор и т. д .;
  • скрипты, которые могут измениться;
  • Быстрая разработка приложений решения, в конечном итоге реализованного на другом, обычно компилируемом, языке.

Примеры языков склейки:

Макрос языки, доступные для компонентов операционной системы или приложений, могут служить связующими языками. Они включают Visual Basic для приложений, WordBasic, LotusScript, CorelScript, Hummingbird Basic, QuickScript, Rexx, SaxBasic, и WinWrap Basic. Другие инструменты, такие как AWK также могут считаться связующими языками, как и любой язык, реализованный Хост сценариев Windows движок (VBScript, JScript и VBA по умолчанию в Windows и сторонних движках, включая реализации Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, Delphi и C). Большинство приложений могут получать доступ и использовать компоненты операционной системы через объектные модели или его собственные функции.

Другие устройства, такие как программируемые калькуляторы, также могут иметь языки склейки; операционные системы КПК, такие как Windows CE, могут иметь доступные собственные или сторонние инструменты макросов, которые склеивают приложения вместе, в дополнение к реализациям общих языков склейки, включая Windows NT, MS-DOS и некоторые оболочки Unix, Rexx, Modern Pascal, PHP и Perl. В зависимости от версии ОС доступны WSH и механизмы сценариев по умолчанию (VBScript и JScript).

Программируемые калькуляторы можно запрограммировать на связующих языках тремя способами. Например, Инструменты Техаса ТИ-92, по умолчанию может быть запрограммирован на языке командных сценариев. Включение скриптового и связующего языков Lua в TI-NSpire серию калькуляторов можно рассматривать как преемницу этого. Первичные встроенные языки программирования высокого уровня большинства графических калькуляторов (чаще всего базовые варианты, иногда производные от Lisp и, что реже, производные на языке C) во многих случаях могут объединять функции калькулятора, такие как графики, списки, матрицы и т. Д. Доступны сторонние реализации более полной базовой версии, которые могут быть ближе к вариантам, перечисленным в качестве связующих языков в этой статье, а также упоминаются попытки реализовать Perl, Rexx или различные оболочки операционных систем на графических калькуляторах TI и HP. C на базе ПК кросс-компиляторы для некоторых машин TI и HP, используемых в сочетании с инструментами, которые конвертируют между C и Perl, Rexx, AWK, а также сценарии оболочки в Perl, Modern Pascal, VBScript в Perl и из Perl позволяют писать программу на клею язык для возможной реализации (в виде скомпилированной программы) на калькуляторе.

Языки редактора

Ряд текстовых редакторов поддерживает макросы, написанные либо с использованием макроязыка, встроенного в редактор, например, Редактор SemWare (TSE), vi улучшен (VIM) или с использованием внешней реализации, например, XEDIT или оба, например, КЕДИТ. Иногда текстовые редакторы и макросы редактирования используются для предоставления других приложений, например, FILELIST и RDRLIST в CMS .

Языки и оболочки управления заданиями

Основной класс языков сценариев вырос из автоматизации контроль работы, который относится к запуску и контролю поведения системных программ. (В этом смысле можно подумать о оболочках как о потомках IBM JCL или Язык управления заданиями, который использовался именно для этой цели.) Многие интерпретаторы этих языков дублируют интерпретаторы командной строки такой как Оболочка Unix или MS-DOS COMMAND.COM. Другие, такие как AppleScript предлагают использование команд на английском языке для создания сценариев.

Сценарий GUI

С появлением графических пользовательских интерфейсов появился специализированный язык сценариев для управления компьютером. Эти языки взаимодействуют с теми же графическими окнами, меню, кнопками и т. Д., Что и пользователь-человек. Они делают это, моделируя действия пользователя. Эти языки обычно используются для автоматизации действий пользователя. Такие языки еще называют "макросы "когда управление осуществляется с помощью имитации нажатия клавиш или щелчков мыши, а также касания или нажатия на сенсорном экране.

Эти языки в принципе могут использоваться для управления любым приложением с графическим интерфейсом пользователя; но на практике их использование ограничено, поскольку для их использования требуется поддержка со стороны приложения и со стороны Операционная система. Есть несколько исключений из этого ограничения. Некоторые языки сценариев GUI основаны на распознавании графических объектов на их экране дисплея. пиксели. Эти языки сценариев графического интерфейса пользователя не зависят от поддержки со стороны операционной системы или приложения.

Когда графический интерфейс предоставляет соответствующие интерфейсы, как в IBM Рабочее место Shell, общий язык сценариев, например, OREXX, можно использовать для написания скриптов графического интерфейса.

Языки для конкретных приложений

Языки, специфичные для приложений, могут быть разделены на множество различных категорий, например, автономные языки приложений (исполняемые) или внутренние языки приложений (postscript, xml, gscript как некоторые из широко распространенных скриптов, соответственно реализованные Adobe, MS и Google) среди других, включая идиоматический язык сценариев, адаптированный к потребностям пользователя приложения. Точно так же многие компьютерная игра системы используют специальный язык сценариев для выражения запрограммированных действий неигровые персонажи и игровая среда. Подобные языки предназначены для одного приложения; и хотя они могут внешне напоминать конкретный язык общего назначения (например, QuakeC, созданный по образцу C), у них есть особые особенности, которые их отличают. Emacs Lisp, в то время как полностью сформированный и способный диалект Лисп, содержит множество специальных возможностей, которые делают его наиболее полезным для расширения функций редактирования Emacs. Язык сценариев для конкретного приложения можно рассматривать как предметно-ориентированный язык программирования специализированный для одного приложения.

Расширяемые / встраиваемые языки

Ряд языков был разработан с целью замены языков сценариев для конкретных приложений путем встраивания в прикладные программы. Прикладной программист (работающий на C или другом системном языке) включает «ловушки», с помощью которых язык сценариев может управлять приложением. Эти языки могут быть технически эквивалентны языку расширения для конкретного приложения, но когда приложение встраивает «общий» язык, пользователь получает возможность передавать навыки из приложения в приложение. Более общая альтернатива - просто предоставить библиотеку (часто библиотеку C), которую универсальный язык может использовать для управления приложением, без изменения языка для конкретной области.

JavaScript начинался как и в первую очередь остается языком для написания сценариев внутри веб-браузеры; однако стандартизация языка как ECMAScript сделал его популярным как универсальный встраиваемый язык. В частности, Mozilla реализация ПаукОбезьяна встроен в несколько сред, таких как Yahoo! Виджет Engine. Другие приложения, встраивающие реализации ECMAScript, включают Adobe продукты Adobe Flash (ActionScript ) и Adobe Acrobat (для сценариев PDF файлы).

Tcl был создан как язык расширения, но стал чаще использоваться как язык общего назначения в ролях, подобных Python, Perl, и Рубин. С другой стороны, Rexx изначально был создан как язык управления заданиями, но широко используется как язык расширения, а также как язык общего назначения. Perl - язык общего назначения, но имел диалект Oraperl (1990), состоящий из Perl 4 бинарных с Интерфейс вызова Oracle скомпилирован. Однако с тех пор он был заменен библиотекой (Perl Module), DBD :: Oracle.[12][13]

Другие сложные и ориентированные на задачи приложения могут включать и предоставлять встроенный язык программирования, чтобы дать своим пользователям больше контроля и предоставить им больше функциональных возможностей, чем может быть доступно через пользовательский интерфейс, независимо от того, насколько сложен. Например, Autodesk Maya Инструменты 3D-авторинга включают Встроенный язык Maya, или Блендер который использует Python чтобы заполнить эту роль.

Некоторые другие типы приложений, которым требуется более быстрое добавление функций или циклы настройки и выполнения (например, игровые движки ) также используют встроенный язык. Во время разработки это позволяет им быстрее создавать прототипы функций и более свободно настраивать их, без необходимости для пользователя иметь глубокие знания о внутренней работе приложения или перестраивать его после каждой настройки (что может занять значительное время). . Языки сценариев, используемые для этой цели, варьируются от более распространенных и более известных Lua и Python к менее известным, таким как AngelScript и Белка.

Ch это еще один вариант сценариев, совместимый с C, для встраивания в прикладные программы C / C ++ в отрасли.

Смотрите также

использованная литература

  1. ^ «Спецификация языка ECMAScript 2019». www.ecma-international.org. Получено 2018-04-02.
  2. ^ Шеппард, Дуг (2000-10-16). "Введение в Perl для новичков". dev.perl.org. Получено 2011-01-08.
  3. ^ Программирование - это сложно, давайте, напишем сценарии, Ларри Уолл, 6 декабря 2007 г.
  4. ^ Привет, Тони! Папай, Гьюри (2014). Вычислительная вселенная: путешествие через революцию. Издательство Кембриджского университета. п.76. ISBN  978-1-31612322-5, "Основной характеристикой современных языков сценариев является их интерактивность, которую иногда называют REPL среда программирования. […] Характеристики простоты использования и немедленного выполнения в среде REPL иногда принимаются за определение языка сценариев ».
  5. ^ Браун, Вики. «Языки сценариев». Получено 2009-07-22.
  6. ^ Луи, Рональд (2008). «Хвала сценариям». Компьютер IEEE. Архивировано из оригинал на 2015-09-23. Получено 2013-08-27.
  7. ^ Корпорация IBM (1967). Язык управления заданиями операционной системы IBM System / 360 (C28-6529-4) (PDF).
  8. ^ Муерс, Кальвин. "TRAC, язык описания процедур для реактивной пишущей машинки". Архивировано из оригинал на 2001-04-25. Получено 9 марта, 2012.
  9. ^ Ван Влек, Томас (ред.). «Глоссарий Multics - A - (активная функция)». Получено 9 марта, 2012.
  10. ^ Вариан, Мелинда. «VM И СООБЩЕСТВО VM: прошлое, настоящее и будущее» (PDF). Получено 9 марта, 2012.
  11. ^ Ван Влек, Томас (ред.). «Глоссарий Multics - R - (RUNCOM)». Получено 9 марта, 2012.
  12. ^ Oraperl, CPAN]
  13. ^ Perl, Подземный Oracle FAQ
  14. ^ ван Россум, Гвидо (6–8 января 1998 г.). "Склеить все вместе". Склейте все вместе с Python. python.org.

дальнейшее чтение

  • Бэррон, Дэвид Уильям (2001). Мир скриптовых языков. ISBN  0-471-99886-9.

внешние ссылки