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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Критика

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

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

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

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

  • Если нужно обеспечить программируемость без риска дестабилизировать систему. Так как, в отличие от плагинов, скрипты интерпретируются, а не компилируются, неправильно написанный скрипт выведет диагностическое сообщение, а не приведёт к системному краху. Контрпримером могут служить, например, JVM и CLR, причём если первая была разработана из соображений переносимости кода (безопасность — побочный эффект), то вторая — именно из соображений безопасности.
  • Если важен выразительный код.
    • Во-первых, чем сложнее система, тем больше кода приходится писать «потому, что это нужно». Скрипт может перенести часть подобного шаблонного кода (инициализация, уничтожение, межпоточная синхронизация и так далее) в среду исполнения скриптов.
    • Во-вторых, в скриптовом языке может быть совсем другая концепция программирования, чем в основной программе — например, игра может быть монолитным однопоточным приложением, в то время как управляющие персонажами скрипты выполняются параллельно или как сопрограммы. Такой подход хорош с точки зрения масштабируемости системы (сценарии не зависят от реализации процедур, пишутся гораздо быстрее и легче отлаживаются), но не очень хорош с точки зрения качества кода, поскольку неизбежно приводит к его дублированию.
      • Гораздо более рациональным подходом является создание файлов ресурсов (как вариант, xml-файлов, структур, баз данных), описывающих поведение «по существу» (в декларативном стиле), как это делается с другими свойствами внутриигровых объектов (текстуры, модели, эффекты, звуки).
    • В-третьих, скриптовый язык имеет собственный проблемно-ориентированный набор команд, и одна строка скрипта может делать то же, что несколько десятков строк на традиционном языке. Однако стоит заметить, что бо́льшая выразительность кода на сценарных языках является следствием их ограниченности и/или новизны и сравнивать C (1970-е) и PHP (1990-е) и/или Fortran (1950-е) и Python (1990-е) неуместно.
  • Скрипты известны низким порогом вхождения, на скриптовом языке может писать даже низкоквалифицированный программист. Это одновременно и плюс, и минус. С одной стороны, это позволяет нанимать дешёвую рабочую силу (освобождать специалистов от рутинной работы и повышать скорость разработки экстенсивно), а с другой критически снижает производительность и надёжность (из-за ориентированности обучения таким языкам на решение конкретных задач, а не на понимание сущности производимых действий).
    • Проблема высокого порога вхождения возникает, в основном, в языках с избыточным синтаксисом (C++, C#) и может быть полностью решена лишь отказом от них в пользу более удачных (что, разумеется, далеко не всегда возможно). В этом случае скрипты выполняют роль паллиатива. Собственно, они и возникли когда масштабируемость Си-подобных языков стала недостаточной для повседневной работы и порог вхождения новичков в отрасль резко возрос.
    • Проблема большого количества рутины, вообще говоря, неразрешима, но в большинстве случаев может быть сглажена более надёжными дополнительными средствами, например, автоматической кодогенерацией.
  • Если требуется кроссплатформенность. Например, JavaScript — его исполняют браузеры под самыми разными ОС.
    • Проблема с кроссплатформенностью напрямую вытекает из стандарта языка: стандарт Си, например, указывает «sizeOf (short) <= sizeOf (int) <= sizeOf (long)», но не указывает какую именно разрядность они должны иметь (эту проблему решают прикладные библиотеки, например, Glib). Современные не-сценарные языки (Java, C#, Haskell) этой проблемы полностью лишены именно по причине хорошей стандартизации.
  • Скриптовые языки применяются для написания программ, не требующих оптимальности и быстроты исполнения. Из-за простоты на них часто пишутся небольшие одноразовые («проблемные») программы.
    • Многие скриптовые языки общего назначения работают достаточно медленно, поэтому их часто используют только в сочетании со сторонними библиотеками (например, NumPy в сочетании с Python).
      • Например, NumPy основывается на фортрановской библиотеке LAPACK и GSL, код которой, проверен временем и регулярно дополняется современными функциями, а множество специальных версий Лапака (AOML, MKL, ATLAS, cuBLAS) очень хорошо оптимизированных под современные архитектуры позволяют гарантировать практически пиковую производительность работы функций этой библиотеки.
    • Более правильный пример: язык Lua является классическим встраиваемым языком сценариев общего назначения, для его работы достаточно минимальной реализации Си (везде, где есть Си, может работать и Lua).
    • Также скриптовые языки хороши для визуализации данных: создания сложных графиков и презентаций, а также простых программ (например, Python используется в графических оболочках Gnome и Cinnamon для создания апплетов и небольших настроечных утилит).

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

  • Готовые программы, оттранслированные в машинный код, выполняются значительно быстрее скриптов, которые интерпретируются из исходного кода динамически при каждом исполнении. Большинство программ переносимы на уровне исходного кода и могут быть выполнены интерпретатором соответствующего языка подобно скриптам. Использование же байт-кода (Java, C#, LLVM) позволяет хранить, переносить и исполнять программы более эффективным образом, нежели скрипты.
    • JIT-компиляция также позволяет оптимизировать общий код под конкретную платформу (в перспективе, под конкретное семейство процессоров и имеющееся оборудование).
  • Полный доступ к любому аппаратному обеспечению или ресурсу ОС (в скриптовом языке для этого должен существовать специальный API, написанный на компилируемом языке). Плагины, работающие с аппаратным обеспечением, традиционно называют драйверами.
  • Если предполагается интенсивный обмен данными между основной программой и пользовательским расширением, для плагина его обеспечить проще.
  • Для компилируемых языков программирования характерно использование сильной статической системы типов, которая позволяет эффективно отлавливать ошибки и лучше оптимизировать код. Использование же в современных скриптах динамической типизации обусловлено скорее техническими особенностями реализации и историческими причинами. Также у статически типизированных языков есть потенциал для роста, а именно, переход с традиционной мономорфной типизации на полиморфную. Расширения мономорфизма в современных Си-подобных языках (перегрузка, ad-hoc-полиморфизм) и полиморфизм подтипов, а также параметрический полиморфизм и классы типов в экспериментальных языках (например, Haskell) сценарным языкам недоступен (статическая типизация во время исполнения скрипта приведёт к существенной потере производительности).

Примечания

  1. A. B. Makar, K. E. McMartin, M. Palese, T. R. Tephly. Formate assay in body fluids: application in methanol poisoning // Biochemical Medicine. — 1975-06. — Т. 13, вып. 2. — С. 117–126. — ISSN 0006-2944. — doi:10.1016/0006-2944(75)90147-7. Архивировано 2 октября 2020 года.
  2. Сузи Р. Сценарные языки: Python. «Мир 2001», 9, 2001. Дата обращения: 9 октября 2012. Архивировано 17 января 2013 года.
  3. Сценарные языки: Python (англ.). Издательство «Открытые системы». Дата обращения: 14 сентября 2023. Архивировано 24 мая 2022 года.
  4. Ousterhout, 1998.
  5. LuaJIT. Дата обращения: 9 октября 2012. Архивировано 2 октября 2012 года.
  6. PyPy. Дата обращения: 9 октября 2012. Архивировано 12 мая 2008 года.
  7. Joab Jackson (IDG News Service), Facebook releases a PHP just-in-time compiler. Дата обращения: 9 октября 2012. Архивировано 11 июня 2012 года.
  8. Денисов Ю. А., Программирование для гуманитариев, 12. Лекция: Представление грамматик, интуит.ру
  9. 1 2 3 4 5 6 7 Богатырев, 2001.
  10. Трофимов, Трофимова, 1997.
  11. James Gosling: «Java Is Under No Serious Threat From PHP, Ruby or C#». Дата обращения: 9 октября 2012. Архивировано 24 октября 2012 года.
  12. Ryan Tomayko, Gosling Didn’t Get The Memo. Дата обращения: 9 октября 2012. Архивировано 18 января 2012 года.

Литература

Ссылки

Read other articles:

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目需要补充更多来源。 (2018年3月17日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:羅生門 (電影) — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 �...

 

 

Royaumes du Commonwealth.Territoires des royaumes du Commonwealth.Anciens royaumes du Commonwealth. Un royaume du Commonwealth (en anglais : Commonwealth realm) est un État souverain, membre du Commonwealth, qui partage la même personne (actuellement, le roi Charles III) comme monarque et chef d'État[1],[2]. Il y a actuellement quinze royaumes du Commonwealth[1],[2] et, bien que Charles III soit roi de chacun d'entre eux, il s'agit de Couronnes différentes, et chaque État conserve s...

 

 

العلاقات التشيلية المصرية تشيلي مصر   تشيلي   مصر تعديل مصدري - تعديل   العلاقات التشيلية المصرية هي العلاقات الثنائية التي تجمع بين تشيلي ومصر.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة تشيلي مصر المساحة (�...

San Francesco al Campocomune San Francesco al Campo – VedutaChiesa parrocchiale di San Francesco LocalizzazioneStato Italia Regione Piemonte Città metropolitana Torino AmministrazioneSindacoDiego Coriasco (lista civica) dal 26-5-2019 TerritorioCoordinate45°13′35.28″N 7°39′25.79″E / 45.226467°N 7.657165°E45.226467; 7.657165 (San Francesco al Campo)Coordinate: 45°13′35.28″N 7°39′25.79″E / 45.226467°N 7.657165�...

 

 

Penyuntingan Halaman oleh pengguna baru atau anonim untuk saat ini tidak diizinkan.Lihat kebijakan pelindungan dan log pelindungan untuk informasi selengkapnya. Jika Anda tidak dapat menyunting Halaman ini dan Anda ingin melakukannya, Anda dapat memohon untuk melepaskan pelindungan, masuk, atau buatlah sebuah akun. Pengguna ini sedang sibuk di dunia nyata dan mungkin tidak menanggapi pesan dengan cepat. Stat  A: 691.181 |  H: 3.833.108 |  S: 25.573.375 |  D: 137,86 |   1.474.361 |    4...

 

 

Bülent Korkmaz Nazionalità  Turchia Altezza 181 cm Peso 80 kg Calcio Ruolo Allenatore (ex difensore) Termine carriera 1º luglio 2005 - giocatore Carriera Giovanili 1979-1986 Galatasaray Squadre di club1 1986-2005 Galatasaray430 (15) Nazionale 1988 Turchia U-213 (0)1990-2005 Turchia102 (3) Carriera da allenatore 2005 Gençlerbirliği(vice)2007 K. Erciyesspor2007 Bursaspor2007-2008 Gençlerbirliği2009 Galatasaray2009-2010 FK Baku2011-2012 K...

Slovenian cyclist Tadej PogačarTadej Pogačar in 2022(current UCI world No.1 with record 145 weeks on top)Personal informationFull nameTadej PogačarNicknamePog[1]Pogi[2]PoGo[3]Born (1998-09-21) 21 September 1998 (age 25)Komenda, SloveniaHeight1.76 m (5 ft 9+1⁄2 in)[4]Weight66 kg (146 lb; 10 st 6 lb)[4]Team informationCurrent teamUAE Team EmiratesDisciplineRoadRoleRiderRider typeAll-rounderPr...

 

 

National monument located in Savar, Bangladesh National Martyrs' Memorialজাতীয় স্মৃতিসৌধGeneral informationStatusCompletedTypePublic monumentLocationSavar, BangladeshCoordinates23°54′40.4″N 90°15′17.4″E / 23.911222°N 90.254833°E / 23.911222; 90.254833Construction started1978Completed1982HeightRoof150 feet (46 m)Design and constructionArchitect(s)Syed Mainul HossainMain contractorConcord Group The National Martyrs' Memoria...

 

 

English indie rock band For other uses, see Noisette. This article needs to be updated. Please help update this article to reflect recent events or newly available information. (July 2022) NoisettesNoisettes at Stubbs BBQ SXSW, 16 March 2006Background informationOriginLondon, EnglandGenres Indie rock pop pop punk Years active2003–presentLabelsVertigoMembers Shingai Shoniwa Dan Smith Past members Jamie Morrison Websitenoisettes.co.uk Noisettes are an English indie rock band from London, curr...

Gua Lubang K20Leang Lubang K20LokasiDusun Kappang, Desa Labuaja, Kecamatan Cenrana, Kabupaten Maros, Sulawesi Selatan, IndonesiaKedalaman130-160 meterGeologikarst / batu kapur / batu gampingFiturjenis gua vertikal berteras dengan lebar mulut gua antara 2–5 meterSitus webvisit.maroskab.go.idcagarbudaya.kemdikbud.go.id Gua Lubang K20' atau Leang Lubang K20' (Inggris: Lubang K20 Cave ) adalah sebuah gua di Kawasan Karst Maros-Pangkep, Taman Nasional Bantimurung-Bulusaraung, wilayah administrat...

 

 

土库曼斯坦总统土库曼斯坦国徽土库曼斯坦总统旗現任谢尔达尔·别尔德穆哈梅多夫自2022年3月19日官邸阿什哈巴德总统府(Oguzkhan Presidential Palace)機關所在地阿什哈巴德任命者直接选举任期7年,可连选连任首任萨帕尔穆拉特·尼亚佐夫设立1991年10月27日 土库曼斯坦土库曼斯坦政府与政治 国家政府 土库曼斯坦宪法 国旗 国徽 国歌 立法機關(英语:National Council of Turkmenistan) ...

 

 

此條目可能包含不适用或被曲解的引用资料,部分内容的准确性无法被证實。 (2023年1月5日)请协助校核其中的错误以改善这篇条目。详情请参见条目的讨论页。 各国相关 主題列表 索引 国内生产总值 石油储量 国防预算 武装部队(军事) 官方语言 人口統計 人口密度 生育率 出生率 死亡率 自杀率 谋杀率 失业率 储蓄率 识字率 出口额 进口额 煤产量 发电量 监禁率 死刑 国债 ...

Sports season1992–93 FIBA European LeagueLeagueFIBA European LeagueSportBasketballRegular SeasonTop scorer Zdravko Radulović (Cibona)Final FourChampions Limoges CSP  Runners-up Benetton TrevisoFinal Four MVP Toni Kukoč (Benetton Treviso)FIBA European League seasons← 1991–921993–94 → The 1992–93 FIBA European League, also shortened to 1992–93 FIBA EuroLeague, was the 36th season of the European top-tier level professional club competition for basketball club...

 

 

American rapper and actor from New York (born 1995) Joey BadassBadass performing in 2017Background informationBirth nameJo-Vaughn Virginie ScottAlso known asJayOhVeeJozif BadmonJoey BBorn (1995-01-20) January 20, 1995 (age 29)Brooklyn, New York City, U.S.GenresEast Coast hip hopprogressive rap[1]Occupation(s) Rapper singer songwriter actor DiscographyJoey Badass discographyYears active2010–present[2]Labels Pro Era Cinematic RED Columbia[3] Relentless[4] ...

 

 

Национальное аэрокосмическое агентство Азербайджана Штаб-квартира Баку, ул. С. Ахундова, AZ 1115 Локация  Азербайджан Тип организации Космическое агентство Руководители Директор: Натиг Джавадов Первый заместитель генерального директора Тофик Сулейманов Основание Осн�...

Questa voce o sezione sull'argomento centri abitati dell'Indiana non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Lafayettecity Lafayette – Veduta LocalizzazioneStato Stati Uniti Stato federato Indiana ConteaTippecanoe AmministrazioneSindacoTony Roswarski TerritorioCoordinate40°25′02″N 86°...

 

 

Legislative election in Arizona Not to be confused with 1990 United States House of Representatives elections in Arizona. 1990 Arizona House of Representatives elections ← 1988 November 6, 1990 1992 → All 60 seats in the Arizona House31 seats needed for a majority   Majority party Minority party   Leader Jane Dee Hull Art Hamilton Party Republican Democratic Leader's seat 18th 22nd Last election 34 26 Seats after 33 27 Seat change 1 1 Speake...

 

 

« Ursuline » redirige ici. Pour les autres significations, voir Ursuline (homonymie). Ordre de Sainte-Ursule Ursulines. Congrégation de religieuses fondée en 1606 par le cardinal Sourdis, archevêque de Bordeaux et par la Mère Françoise de Cazères ; spécialement dévouée à l'instruction de la jeunesse du Seace. Supprimées par loi du 5 frimaire an 6 de la République française, ou 5 novembre 1797. Ordre de droit pontifical Approbation pontificale 1539par Paul III In...

Rocky planet whose surface is dominated by desert Mars, an example of a cold desert planet, seen by the Mars Orbiter Mission space probe A desert planet, also known as a dry planet, an arid planet, or a dune planet, is a type of terrestrial planet with an arid surface consistency similar to Earth's deserts. Mars is a prominent example of a desert planet in the Solar System.[1] History A 2011 study suggested that not only are life-sustaining desert planets possible, but that they might...

 

 

Black Canadians descended from American slaves, black Indigenous people, or freemen Ethnic group Black Nova ScotiansFlag, designed by Wendie Wilson, first unveiled in February 2021[1]The earliest known image of a Black Nova Scotian, in British Canada, in 1788. He was a wood cutter in Shelburne, Nova Scotia.[2]Total population28,2203% of Nova Scotia population (2021)[3]LanguagesAfrican Nova Scotian English, Canadian English, Canadian FrenchReligionChristianity (Baptist)...