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

Поделись знанием:
(перенаправлено с «Скрипт»)
Перейти к: навигация, поиск

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

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

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





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

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

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

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

  • командно-сценарные;
  • прикладные сценарные;
  • универсальные сценарные.

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

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

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

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

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

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

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

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

Критика

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

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

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

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

  1. Если нужно обеспечить программируемость без риска дестабилизировать систему. Так как, в отличие от плагинов, скрипты интерпретируются, а не компилируются, неправильно написанный скрипт выведет диагностическое сообщение, а не приведёт к системному краху;
  2. Если важен выразительный код. Во-первых, чем сложнее система, тем больше кода приходится писать «потому, что это нужно». Во-вторых, в скриптовом языке может быть совсем другая концепция программирования, чем в основной программе — например, игра может быть монолитным однопоточным приложением, в то время как управляющие персонажами скрипты выполняются параллельно или как сопрограммы. В-третьих, скриптовый язык имеет собственный проблемно-ориентированный набор команд, и одна строка скрипта может делать то же, что несколько десятков строк на традиционном языке. Как следствие, на скриптовом языке может писать программист очень низкой квалификации — например, геймдизайнер своими руками, не полагаясь на программистов, может корректировать правила игры;
  3. Если требуется кроссплатформенность. Хорошим примером является JavaScript — его исполняют браузеры под самыми разными ОС.

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

  1. Готовые программы, оттранслированные в машинный код, выполняются значительно быстрее скриптов, которые интерпретируются из исходного кода динамически при каждом исполнении. Поэтому скриптовые языки не применяются для написания программ, требующих оптимальности и быстроты исполнения. Но из-за простоты они часто применяются для написания небольших, одноразовых («проблемных») программ.
  2. Полный доступ к любому аппаратному обеспечению или ресурсу ОС (в скриптовом языке для этого должен существовать специальный API, написанный на компилируемом языке). Плагины, работающие с аппаратным обеспечением, традиционно называют драйверами.
  3. Если предполагается интенсивный обмен данными между основной программой и пользовательским расширением, для плагина его обеспечить проще.

Напишите отзыв о статье "Сценарный язык"

Примечания

  1. [www.osp.ru/pcworld/2001/09/162237/ Сузи Р. Сценарные языки: Python. «Мир ПК», 9, 2001]
  2. Ousterhout, 1998.
  3. [luajit.org/luajit.html LuaJIT]
  4. [pypy.org/ PyPy]
  5. [www.techworld.com.au/article/409887/facebook_releases_php_just-in-time_compiler/ Joab Jackson (IDG News Service), Facebook releases a PHP just-in-time compiler]
  6. [www.intuit.ru/department/se/proghum/12/1.html Денисов Ю. А., Программирование для гуманитариев, 12. Лекция: Представление грамматик], интуит.ру
  7. 1 2 3 4 5 6 7 Богатырев, 2001.
  8. Трофимов, Трофимова, 1997.
  9. [java.sys-con.com/node/193146 James Gosling: «Java Is Under No Serious Threat From PHP, Ruby or C#»]
  10. [lesscode.org/2006/03/12/someone-tell-gosling/ Ryan Tomayko, Gosling Didn’t Get The Memo]

Литература

  • Богатырев Р. [www.osp.ru/pcworld/2001/11/162500/ Природа и эволюция сценарных языков] (рус.) // Мир ПК. — 2001. — № 11.
  • Ousterhout J. [www.stanford.edu/~ouster/cgi-bin/papers/scripting.pdf Scripting: Higher-Level Programming for the 21st Century] (англ.) // IEEE Computer. — 1998. — Vol. 31, no. 3. — P. 23-30.
  • Георгиев В.О., Еникеев А.И. [www.swsys.ru/index.php?page=article&id=1332 Сценарный подход в создании диалоговых систем] // Программные продукты и системы. — 1991. — № 3.
  • Трофимов М. И., Трофимова М. П. [www.osp.ru/os/1997/03/179161/ В поисках компьютерного эсперанто] // Открытые системы. — 1997. — № 3.

Ссылки

  • [www.computerworld.com/s/article/9114040/Q_A_The_state_of_the_scripting_universe Lynn Greiner, Q&A: The state of the scripting universe: Scripting languages are becoming more popular, www.computerworld.com, 2008]

Отрывок, характеризующий Сценарный язык

Капитан велел позвать к себе старшего унтер офицера в строгим голосом спросил у него, к какому полку он принадлежит, кто их начальник и на каком основании он позволяет себе занимать квартиру, которая уже занята. На первые два вопроса немец, плохо понимавший по французски, назвал свой полк и своего начальника; но на последний вопрос он, не поняв его, вставляя ломаные французские слова в немецкую речь, отвечал, что он квартиргер полка и что ему ведено от начальника занимать все дома подряд, Пьер, знавший по немецки, перевел капитану то, что говорил немец, и ответ капитана передал по немецки виртембергскому гусару. Поняв то, что ему говорили, немец сдался и увел своих людей. Капитан вышел на крыльцо, громким голосом отдавая какие то приказания.
Когда он вернулся назад в комнату, Пьер сидел на том же месте, где он сидел прежде, опустив руки на голову. Лицо его выражало страдание. Он действительно страдал в эту минуту. Когда капитан вышел и Пьер остался один, он вдруг опомнился и сознал то положение, в котором находился. Не то, что Москва была взята, и не то, что эти счастливые победители хозяйничали в ней и покровительствовали ему, – как ни тяжело чувствовал это Пьер, не это мучило его в настоящую минуту. Его мучило сознание своей слабости. Несколько стаканов выпитого вина, разговор с этим добродушным человеком уничтожили сосредоточенно мрачное расположение духа, в котором жил Пьер эти последние дни и которое было необходимо для исполнения его намерения. Пистолет, и кинжал, и армяк были готовы, Наполеон въезжал завтра. Пьер точно так же считал полезным и достойным убить злодея; но он чувствовал, что теперь он не сделает этого. Почему? – он не знал, но предчувствовал как будто, что он не исполнит своего намерения. Он боролся против сознания своей слабости, но смутно чувствовал, что ему не одолеть ее, что прежний мрачный строй мыслей о мщенье, убийстве и самопожертвовании разлетелся, как прах, при прикосновении первого человека.
Капитан, слегка прихрамывая и насвистывая что то, вошел в комнату.
Забавлявшая прежде Пьера болтовня француза теперь показалась ему противна. И насвистываемая песенка, и походка, и жест покручиванья усов – все казалось теперь оскорбительным Пьеру.
«Я сейчас уйду, я ни слова больше не скажу с ним», – думал Пьер. Он думал это, а между тем сидел все на том же месте. Какое то странное чувство слабости приковало его к своему месту: он хотел и не мог встать и уйти.
Капитан, напротив, казался очень весел. Он прошелся два раза по комнате. Глаза его блестели, и усы слегка подергивались, как будто он улыбался сам с собой какой то забавной выдумке.
– Charmant, – сказал он вдруг, – le colonel de ces Wurtembourgeois! C'est un Allemand; mais brave garcon, s'il en fut. Mais Allemand. [Прелестно, полковник этих вюртембергцев! Он немец; но славный малый, несмотря на это. Но немец.]
Он сел против Пьера.
– A propos, vous savez donc l'allemand, vous? [Кстати, вы, стало быть, знаете по немецки?]
Пьер смотрел на него молча.
– Comment dites vous asile en allemand? [Как по немецки убежище?]
– Asile? – повторил Пьер. – Asile en allemand – Unterkunft. [Убежище? Убежище – по немецки – Unterkunft.]
– Comment dites vous? [Как вы говорите?] – недоверчиво и быстро переспросил капитан.
– Unterkunft, – повторил Пьер.
– Onterkoff, – сказал капитан и несколько секунд смеющимися глазами смотрел на Пьера. – Les Allemands sont de fieres betes. N'est ce pas, monsieur Pierre? [Экие дурни эти немцы. Не правда ли, мосье Пьер?] – заключил он.
– Eh bien, encore une bouteille de ce Bordeau Moscovite, n'est ce pas? Morel, va nous chauffer encore une pelilo bouteille. Morel! [Ну, еще бутылочку этого московского Бордо, не правда ли? Морель согреет нам еще бутылочку. Морель!] – весело крикнул капитан.
Морель подал свечи и бутылку вина. Капитан посмотрел на Пьера при освещении, и его, видимо, поразило расстроенное лицо его собеседника. Рамбаль с искренним огорчением и участием в лице подошел к Пьеру и нагнулся над ним.
– Eh bien, nous sommes tristes, [Что же это, мы грустны?] – сказал он, трогая Пьера за руку. – Vous aurai je fait de la peine? Non, vrai, avez vous quelque chose contre moi, – переспрашивал он. – Peut etre rapport a la situation? [Может, я огорчил вас? Нет, в самом деле, не имеете ли вы что нибудь против меня? Может быть, касательно положения?]
Пьер ничего не отвечал, но ласково смотрел в глаза французу. Это выражение участия было приятно ему.
– Parole d'honneur, sans parler de ce que je vous dois, j'ai de l'amitie pour vous. Puis je faire quelque chose pour vous? Disposez de moi. C'est a la vie et a la mort. C'est la main sur le c?ur que je vous le dis, [Честное слово, не говоря уже про то, чем я вам обязан, я чувствую к вам дружбу. Не могу ли я сделать для вас что нибудь? Располагайте мною. Это на жизнь и на смерть. Я говорю вам это, кладя руку на сердце,] – сказал он, ударяя себя в грудь.
– Merci, – сказал Пьер. Капитан посмотрел пристально на Пьера так же, как он смотрел, когда узнал, как убежище называлось по немецки, и лицо его вдруг просияло.
– Ah! dans ce cas je bois a notre amitie! [А, в таком случае пью за вашу дружбу!] – весело крикнул он, наливая два стакана вина. Пьер взял налитой стакан и выпил его. Рамбаль выпил свой, пожал еще раз руку Пьера и в задумчиво меланхолической позе облокотился на стол.
– Oui, mon cher ami, voila les caprices de la fortune, – начал он. – Qui m'aurait dit que je serai soldat et capitaine de dragons au service de Bonaparte, comme nous l'appellions jadis. Et cependant me voila a Moscou avec lui. Il faut vous dire, mon cher, – продолжал он грустным я мерным голосом человека, который сбирается рассказывать длинную историю, – que notre nom est l'un des plus anciens de la France. [Да, мой друг, вот колесо фортуны. Кто сказал бы мне, что я буду солдатом и капитаном драгунов на службе у Бонапарта, как мы его, бывало, называли. Однако же вот я в Москве с ним. Надо вам сказать, мой милый… что имя наше одно из самых древних во Франции.]
И с легкой и наивной откровенностью француза капитан рассказал Пьеру историю своих предков, свое детство, отрочество и возмужалость, все свои родственныеимущественные, семейные отношения. «Ma pauvre mere [„Моя бедная мать“.] играла, разумеется, важную роль в этом рассказе.
– Mais tout ca ce n'est que la mise en scene de la vie, le fond c'est l'amour? L'amour! N'est ce pas, monsieur; Pierre? – сказал он, оживляясь. – Encore un verre. [Но все это есть только вступление в жизнь, сущность же ее – это любовь. Любовь! Не правда ли, мосье Пьер? Еще стаканчик.]
Пьер опять выпил и налил себе третий.
– Oh! les femmes, les femmes! [О! женщины, женщины!] – и капитан, замаслившимися глазами глядя на Пьера, начал говорить о любви и о своих любовных похождениях. Их было очень много, чему легко было поверить, глядя на самодовольное, красивое лицо офицера и на восторженное оживление, с которым он говорил о женщинах. Несмотря на то, что все любовные истории Рамбаля имели тот характер пакостности, в котором французы видят исключительную прелесть и поэзию любви, капитан рассказывал свои истории с таким искренним убеждением, что он один испытал и познал все прелести любви, и так заманчиво описывал женщин, что Пьер с любопытством слушал его.
Очевидно было, что l'amour, которую так любил француз, была ни та низшего и простого рода любовь, которую Пьер испытывал когда то к своей жене, ни та раздуваемая им самим романтическая любовь, которую он испытывал к Наташе (оба рода этой любви Рамбаль одинаково презирал – одна была l'amour des charretiers, другая l'amour des nigauds) [любовь извозчиков, другая – любовь дурней.]; l'amour, которой поклонялся француз, заключалась преимущественно в неестественности отношений к женщине и в комбинация уродливостей, которые придавали главную прелесть чувству.
Так капитан рассказал трогательную историю своей любви к одной обворожительной тридцатипятилетней маркизе и в одно и то же время к прелестному невинному, семнадцатилетнему ребенку, дочери обворожительной маркизы. Борьба великодушия между матерью и дочерью, окончившаяся тем, что мать, жертвуя собой, предложила свою дочь в жены своему любовнику, еще и теперь, хотя уж давно прошедшее воспоминание, волновала капитана. Потом он рассказал один эпизод, в котором муж играл роль любовника, а он (любовник) роль мужа, и несколько комических эпизодов из souvenirs d'Allemagne, где asile значит Unterkunft, где les maris mangent de la choux croute и где les jeunes filles sont trop blondes. [воспоминаний о Германии, где мужья едят капустный суп и где молодые девушки слишком белокуры.]