Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Спектр языков сценариев варьируется от очень маленьких и сильно ориентированных на предметную область языков до языков программирования общего назначения, используемых для написания сценариев. Стандартные примеры языков сценариев для конкретных сред включают: Bash для Unix или Unix-подобных операционных систем ; ECMAScript ( JavaScript ), для веб-браузеров; и Visual Basic для приложений , для Microsoft Office приложений. Lua - это язык, разработанный и широко используемый в качестве языка расширения. Perl- это язык общего назначения, который также обычно используется в качестве языка расширения, в то время как ECMAScript по-прежнему в первую очередь является языком сценариев для веб-браузеров, но также используется как язык общего назначения. Emacs Lisp диалект Lisp (для Emacs редактора) и Visual Basic для приложений диалекта Visual Basic являются примерами языка сценариев диалектов языков общего назначения. Некоторые игровые системы, особенно виртуальный мир Second Life и франшиза симуляторов Railroad Trainz , были значительно расширены по функциональности с помощью расширений сценариев ( Linden Scripting Language и TrainzScript). В других играх вродеВеснот , множество реальных игр, в которые играют игроки, представляют собой сценарии, написанные другими пользователями.

Характеристики [ править ]

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

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

публичный  класс  HelloWorld  {  public  void  printHelloWorld ()  {  System . из . println ( «Привет, мир» );  } }

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

публичный  класс  HelloWorld  {  public  void  printHelloWorld ()  {  System . из . println ( «Привет, мир» );  }  public  static  void  main ( String []  args )  {  printHelloWorld ();  } }

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

print ( "Hello World" ) print  "Hello World"  # Python 2.7 или более ранней версии

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

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

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

Сценарии часто создаются или модифицируются человеком, выполняющим их [6], но они также часто распространяются, например, когда большие части игр написаны на языке сценариев, особенно в игре Google Chrome T-rex.

История [ править ]

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

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

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

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

Типы [ править ]

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

Склейте языки [ править ]

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

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

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

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

  • AppleScript
  • Холодный синтез
  • DCL
  • Встраиваемый Common Lisp
  • экл
  • Erlang
  • EXEC
  • EXEC2
  • JCL
  • CoffeeScript
  • Юлия
  • JScript и JavaScript
  • Lua
  • м4
  • Современный Паскаль
  • Perl (5 и Raku )
  • PHP
  • PowerShell
  • Чистый
  • Python
  • Ребол
  • красный
  • Rexx
  • Рубин
  • Схема
  • Tcl
  • Скрипты Unix Shell ( ksh , csh , bash , sh и другие)
  • VBScript
  • Язык рабочего процесса
  • XSLT

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

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

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

Языки редактора [ править ]

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

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

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

Сценарии графического интерфейса [ править ]

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

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

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

Языки для конкретных приложений [ править ]

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

Расширяемые / встраиваемые языки [ править ]

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

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

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

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

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

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

См. Также [ править ]

  • Список языков сценариев
  • Язык описания архитектуры
  • Авторский язык
  • Автоматизация сборки [14]
  • Файл конфигурации
  • Директива интерпретатора / Shebang (Unix)
  • Язык шаблонов

Ссылки [ править ]

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

Дальнейшее чтение [ править ]

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

Внешние ссылки [ править ]

  • Шаблоны для приложений со сценариями на Wayback Machine (архивировано 10 октября 2004 г.)
  • Сценарий
  • Общие сценарии развития