stringtranslate.com

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

GDScript в Godot 3.4

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

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

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

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

Примеры

Функциональность некоторых игровых систем была значительно расширена за счет сценариев расширений с использованием пользовательских языков, в частности, виртуального мира Second Life (с использованием языка сценариев Linden ) и франшизы симуляторов железных дорог Trainz (с использованием TrainzScript). В некоторых играх, таких как Wesnoth , пользователи могут играть в собственные варианты игры, определенные скриптами, созданными пользователем.

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

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

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

общественный класс HelloWorld { общественный недействительный printHelloWorld () { System . вне . println ( "Привет, мир" ); } }         

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

общественный класс HelloWorld { общественный недействительный printHelloWorld () { System . вне . println ( "Привет, мир" ); } Public static void main ( String [] args ) { printHelloWorld (); } }                 

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

распечатать ( «Привет, мир» )

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

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

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

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

История

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

Первые интерактивные оболочки были разработаны в 1960-х годах для обеспечения удаленного управления первыми системами с разделением времени , и в них использовались сценарии оболочки , которые управляли запуском компьютерных программ внутри компьютерной программы, оболочки. Кэлвину Мурсу в его языке TRAC обычно приписывают изобретение подстановки команд — способности встраивать команды в сценарии, которые при интерпретации вставляют в сценарий строку символов. [8] Multics вызывает эти активные функции . [9] Луи Пузен написал первый процессор для командных сценариев под названием RUNCOM для 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 изначально разрабатывался для выполнения той же роли. Веб-разработку можно рассматривать как использование связующих языков, обеспечивающих взаимодействие между базой данных и веб-сервером . Но если значительный объем логики написан в сценарии, его лучше охарактеризовать как просто еще один программный компонент, а не как «клей».

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

Примеры языка клея:

Языки макросов , доступные компонентам операционной системы или приложений, могут служить связующими языками. К ним относятся Visual Basic for Applications , 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. и Перл. В зависимости от версии ОС доступны WSH и механизмы сценариев по умолчанию (VBScript и JScript).

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

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

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

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

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

Скрипты графического интерфейса

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

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

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

Языки, специфичные для приложения

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

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ «Спецификация языка ECMAScript 2019» . Экма Интернешнл . Проверено 2 апреля 2018 г.
  2. ^ Шеппард, Дуг (16 октября 2000 г.). «Введение в Perl для начинающих». Perl.com . Проверено 8 января 2011 г.
  3. ^ Уолл, Ларри (12 декабря 2007 г.). «Программирование — это сложно, давайте начнем писать сценарии…» Perl.com . Архивировано из оригинала 8 декабря 2023 года.
  4. ^ Привет, Тони; Папай, Дюри (2014). Компьютерная вселенная: путешествие через революцию . Издательство Кембриджского университета. п. 76. ИСБН 978-1-31612322-5. Основной характеристикой современных языков сценариев является их интерактивность, которую иногда называют средой программирования REPL . […] Характеристики простоты использования и немедленного выполнения в среде REPL иногда принимаются за определение языка сценариев.
  5. ^ Браун, Вики; Морен, Рич (1999). «Скриптовые языки». МакТех . Проверено 22 июля 2009 г.
  6. ^ Луи, Рональд. «Похвала сценариям: настоящий прагматизм программирования». IEEE-компьютер. Архивировано из оригинала 23 сентября 2015 г. Проверено 27 августа 2013 г.
  7. ^ Корпорация IBM (март 1967 г.). Язык управления заданиями операционной системы IBM System/360 (C28-6529-4) (PDF) . Архивировано (PDF) из оригинала 25 мая 2023 г. - через битсейверы.
  8. ^ Мурс, Кальвин (1965). «TRAC, язык описания процедур для реактивной пишущей машинки». Фонд ПРОФ . Архивировано из оригинала 25 апреля 2001 г. Проверено 9 марта 2012 г.
  9. ^ Ван Флек, Томас (ред.). «Глоссарий Multitics – A — (активная функция)». Мультикс . Проверено 9 марта 2012 г.
  10. ^ Вариан, Мелинда (апрель 1991 г.). «VM и сообщество VM: прошлое, настоящее и будущее» (PDF) . Архивировано из оригинала (PDF) 6 октября 2011 г. Проверено 9 марта 2012 г.
  11. ^ Ван Флек, Томас (ред.). «Глоссарий Multitics – R – (RUNCOM)» . Проверено 9 марта 2012 г.
  12. ^ «Что такое связующий код (язык связующего кода)? - Определение с сайта WhatIs.com» . WhatIs.com . Проверено 31 января 2022 г.
  13. Ларсон, Куинси (10 января 2020 г.). «Интерпретируемые и компилируемые языки программирования». Лагерь бесплатного кода . Проверено 23 февраля 2022 г.
  14. ^ Балкис, Антон. «Сценарий Адала». Раджа Советы . Проверено 23 февраля 2022 г.
  15. ^ Аксельссон, Матс. «Шелл-скрипты — что можно изменить». Подсказка по Linux . Проверено 23 февраля 2022 г.
  16. ^ «Основы управления заданиями (Справочное руководство Bash)» . www.gnu.org . Проверено 20 мая 2022 г.
  17. ^ Ораперл, CPAN]
  18. ^ Perl, Часто задаваемые вопросы по подземному Oracle
  19. ^ ван Россум, Гвидо (6–8 января 1998 г.). «Склеить все вместе». Склейте все это вместе с помощью Python . python.org.

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

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