it-swarm.com.ru

Когда язык считается языком сценариев?

Что делает язык скриптовым языком? Я слышал, как некоторые люди говорят "когда это интерпретируется, а не компилируется". Это сделало бы PHP (например) языком сценариев. Это единственный критерий? Или есть другие критерии?

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

107
Sietse

Язык сценариев - это язык, который "сценариев" для других вещей, чтобы делать вещи. В первую очередь основное внимание уделяется не созданию собственных приложений, а тому, чтобы заставить существующее приложение действовать так, как вы хотите, например, JavaScript для браузеров, VBA для MS Office.

52
moffdub

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

93
Martin Beckett

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

В некоторых отношениях то, как вы используете язык, делает его языком сценариев (например, разработчики игр, которые разрабатывают в основном на C++, будут сценарий объекты в Lua). Опять же, линии размыты - язык может быть использован для программирования одним человеком, и тот же язык может использоваться для языка сценариев другим.

Это из статьи wikipedia о языках сценариев:

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

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

41
Oded

"Сценарий - это то, что вы даете актерам. Программа - это то, что вы даете зрителям". - Ларри Уолл

Я действительно не думаю, что есть большая разница больше. Так называемые "скриптовые" языки часто компилируются - просто очень быстро и во время выполнения. И некоторые из "языков программирования" также компилируются во время выполнения (например, JIT), и первый этап "компиляции" - это проверка синтаксиса и разрешение ресурсов.

Не зацикливайтесь на этом, это действительно не важно.

31
Clinton Pierce

Мое определение будет языком, который обычно распространяется как источник, а не как двоичный файл.

25
kenny

Есть много возможных ответов на это.

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

Второе: действительно трудно сказать, что такое язык XYZ, будь то XYZ, "скриптинг", "функциональное программирование", "объектно-ориентированное программирование" или что у вас есть. Определение понятия "функциональное программирование" довольно ясно, но никто не знает, что такое "язык функционального программирования".

Функциональное программирование или объектно-ориентированное программирование - это стили программирования ; Вы можете писать в функциональном стиле или объектно-ориентированном стиле практически на любом языке. Например, переключатель виртуальной файловой системы Linux и модель драйвера Linux в значительной степени объектно-ориентированы, несмотря на то, что они написаны на C, тогда как большая часть кода Java или C #, который вы видите в Интернете, является очень процедурной, а не объектно-ориентированной. ориентированный на все . ОТО, я видел какой-то сильно функциональный код Java.

Итак, если функциональное программирование и объектно-ориентированное программирование - это просто стили, которые могут быть выполнены на любом языке, то как вы определяете "объектно-ориентированный язык программирования"? Можно сказать, что объектно-ориентированный язык программирования - это язык, который позволяет объектно-ориентированное программирование. Но это не так уж много определений: все языки допускают объектно-ориентированное программирование, поэтому все языки являются объектно-ориентированными? Итак, вы говорите, что хорошо, язык является объектно-ориентированным, если он заставляет вас программировать в объектно-ориентированном стиле. Но это не так уж много определений: все языки допускают функциональное программирование, поэтому no язык является объектно-ориентированным?

Итак, для меня я нашел следующее определение:

Язык - это язык сценариев (объектно-ориентированный язык/функциональный язык), если он оба

  • облегчает создание сценариев (объектно-ориентированное программирование/функциональное программирование), т. е. оно не только позволяет , но и делает его легкий и естественный и содержит функции, которые помогают в этом, А ТАКЖЕ
  • поощряет и направлять вас к сценариям (объектно-ориентированное программирование/функциональное программирование).

Итак, после пяти абзацев я пришел к следующему: "язык сценариев - это язык сценариев". Какое отличное определение. НЕ.

Очевидно, что теперь нам нужно взглянуть на определение "сценариев".

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

Ну, во-первых, скриптинг - это программирование. Это просто особый вид программирования. IOW: каждый скрипт - это программа, но не каждая программа - это скрипт; набор всех сценариев является надлежащим подмножеством набора всех программ.

По моему личному мнению, то, что делает скриптовые скрипты и отличает их от других видов программирования, заключается в том, что ...

Скрипты в основном манипулируют объектами, которые

  • не были созданы сценарием,
  • иметь жизнь независимо от сценария и
  • жить вне домена сценария.

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

Подумайте о сценарии оболочки: сценарии оболочки обычно управляют файлами, каталогами и процессами. Большинство файлов, каталогов и процессов в вашей системе, вероятно, не были созданы текущим скриптом. И они не исчезают при выходе из сценария: их время жизни полностью не зависит от сценария. И они на самом деле не являются частью сценария, они являются частью системы. Вы не запустили свой скрипт, написав классы File и Directory, эти типы данных вас не интересуют: вы просто предполагаете, что они есть, и вы даже не знаете (и вам не нужно знать) как они работают. И вы не реализуете свои собственные алгоритмы, например, для обхода каталога вы просто используете find вместо того, чтобы реализовывать свой собственный поиск в ширину.

Вкратце: сценарий присоединяется к более крупной системе, которая существует независимо от сценария, манипулирует какой-то небольшой частью системы и затем завершает работу.

Эта более крупная система может быть операционной системой в случае сценария Shell, браузером DOM в случае сценария браузера, игрой (например, World of Warcraft с Lua или Second Life с языком сценариев Linden), приложением (например, AutoLisp язык для макросов AutoCAD или Excel/Word/Office), веб-сервер, пакет роботов или что-то еще полностью.

Обратите внимание, что сценарий является полностью ортогональным ко всем остальным аспектам языков программирования: язык сценариев может быть строго или слабо типизирован, строго или слабо типизирован, статически или динамически типизирован, номинально, структурно или утки, черт возьми, он может быть даже нетипизирован , Он может быть императивным или функциональным, объектно-ориентированным, процедурным или функциональным, строгим или ленивым. Его реализации могут быть интерпретированы, скомпилированы или смешаны.

Например, Mondrian - строго ленивый функционально-ленивый скриптовый язык со скомпилированной реализацией.

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

  • реальный язык программирования: мой язык программирования
  • язык сценариев: ваш язык программирования

Похоже, именно так чаще всего используется этот термин.

16
Jörg W Mittag

Это как порно, вы знаете, когда вы его видите. Единственное возможное определение языка сценариев:

A language which is described as a scripting language.

Немного круглым, не так ли? (Кстати, я не шучу).

По сути, нет ничего, что делает язык скриптовым, кроме того, что его называют таковым, особенно его создателями. Основным набором современных языков сценариев является PHP, Perl, JavaScript, Python, Ruby и ​​Lua. Tcl является первым основным современным языком сценариев (хотя он и не был первым языком сценариев, я забыл, что это такое, но я с удивлением узнал, что он предшествовал Tcl).

Я описываю особенности основных языков сценариев в моя статья :

 A Practical Solution for Scripting Language Compilers
 Paul Biggar, Edsko de Vries and David Gregg
 SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)

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

Единственный оставшийся вопрос заключается в том, как определить, является ли новый язык языком сценариев. Ну, если это называется язык сценариев, это один. Итак, Factor - это язык сценариев (или, по крайней мере, когда он был написан), но, скажем, Java нет.

16
Paul Biggar

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

Например, в Perl вы делаете: Perl my_source.pl

С учетом вышеуказанных критериев PHP является языком сценариев (даже если вы можете использовать процесс "компиляции", например, при использовании Zend Encoder для "защиты" исходного кода).

PS. Часто (но не всегда) скриптовые языки интерпретируются. Также часто (но опять же не всегда) языки сценариев типизируются динамически.

5
Grey Panther

Все языки сценариев являются языками программирования. Строго говоря, разницы нет.

Термин не относится к каким-либо фундаментальным свойствам языка, он относится к типичному использование языка. Если типичным использованием является написание коротких программ, которые в основном выполняют вызовы ранее существовавшего кода, и некоторой простой обработкой результатов (то есть, если типичным использованием является запись scripts), то это язык сценариев.

5
Joren

Одно подразделение

  • сценарий = динамически интерпретируется
  • нормальный = скомпилированный

Динамически интерпретируемый язык интерпретируется во время выполнения, тогда как скомпилированный язык компилируется перед выполнением.

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

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

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

4
Timo Westkämper

Я думаю, что у мистера Роберто Иерусалимского есть очень хороший ответ или вопрос в разделе "Программирование в Lua":

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

4
Rodrigo Lopez

Во-первых, язык программирования не является "языком сценариев" или чем-то еще. Это может быть "язык сценариев" и что-то еще.

Во-вторых, разработчик языка скажет вам, является ли он языком сценариев.

Ваш вопрос должен гласить "В каких реализациях язык программирования можно считать языком сценариев?", А не "В чем разница между языком сценариев и языком программирования?". Между ними нет.

Тем не менее, я буду рассматривать язык как язык сценариев, если он используется для обеспечения некоторого типа промежуточного программного обеспечения. Например, я бы посчитал большинство реализаций JavaScript языком сценариев. Если бы JavaScript запускался в ОС, а не в браузере, то это был бы не язык сценариев. Если PHP работает внутри Apache, это язык сценариев. Если он запускается из командной строки, это не так.

3
Marcus Adams

У меня и моего друга только что был такой аргумент: в чем разница между языком программирования и языком сценариев.

Популярным аргументом является то, что языки программирования компилируются, а языки сценариев интерпретируются - однако я считаю, что этот аргумент является полностью ложным ... почему?

  1. Chakra & V8 (движки JavaScript от Microsoft и Google) компилируют код перед выполнением
  2. QBasic интерпретируется - делает ли это Qbasic "скриптовым" языком?

Исходя из этого, это мой аргумент в пользу различия между языком программирования и языком сценариев:

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

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

3
series0ne

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

В частности, сценарий Shell автоматизировал процессы в ядре ОС (традиционно AppleScript на Mac); роль, которая в последнее время все больше переходила в руки Perl, а затем из нее в Python. Я видел Scheme (особенно в его реализации Guile), используемый для объявления сцен трассировки лучей; а в последнее время Lua очень популярен в качестве языка программирования для скриптовых игр - настолько, что во многих новых играх единственная жестко запрограммированная вещь - это графический/физический движок, в то время как вся логика игры закодирована в Lua. Точно так же считалось, что JavaScript сценарием поведения веб-браузера.

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

Тем не менее, "языки сценариев", безусловно, не являются синонимами "интерпретируемых языков" - например, BASIC интерпретировался на протяжении большей части его жизни (то есть до того, как он утратил свою аббревиатуру и стал Visual Basic), но никто на самом деле не думает об этом как сценарии.

ОБНОВЛЕНИЕ: Материалы для чтения, как обычно, доступны в Википедии .

3
Amadan

Я рассматриваю язык сценариев как что-то, что не требует явного тяжеловесного шага "компиляции". Основная особенность программистов: вы редактируете код и запускаете его сразу же.

Таким образом, я бы рассматривал JavaScript и PHP как языки сценариев, тогда как ActionScript / Flex на самом деле не так.

3
Scott Evernden

Язык сценариев обычно :

  1. Динамически набранный
  2. Интерпретируемый, с очень небольшим акцентом на производительность, но хорошей мобильностью
  3. Требует намного меньше шаблонный код , что приводит к очень быстрому прототипированию
  4. Используется для небольших задач, подходит для написания одного файла для запуска некоторого полезного "скрипта".

Хотя язык без сценариев обычно : 1. Статически типизированный 2. Скомпилированный, с акцентом на производительность 3. Требуется больше стандартного кода, что приводит к более медленному прототипированию, но большей читабельности и продолжительности термин ремонтопригодность 4. Используется для крупных проектов, адаптируется к множеству шаблонов проектирования

Но это больше историческая разница, на мой взгляд. Javascript и Perl были написаны с учетом небольших простых сценариев, в то время как C++ был написан с учетом сложных приложений; но оба могут быть использованы в любом случае. И многие языки программирования, как современные, так и старые, в любом случае размывают черту (и это было в первую очередь нечетко!).

Печально то, что я знал нескольких разработчиков, которые ненавидят то, что они воспринимают как "языки сценариев", считая их более простыми и не такими мощными. Мое мнение таково, что старые клише - используйте правильный инструмент для работы.

3
Oak

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

Я имею в виду, что вы не можете сказать что-то вроде Python, или Ruby являются "скриптовыми" языками в наше время (у вас даже есть такие вещи, как IronPython и JIT - ваш любимый язык , разница еще более размыта).

Честно говоря, лично я не чувствую, что PHP больше не является языком сценариев. Я бы не ожидал, что людям нравится классифицировать PHP иначе, чем скажем Java в своем резюме.

2
Robert Gould

Я просто продолжу и перенесу свой ответ из дублирующего вопроса


Название "Язык сценариев" относится к очень специфической роли: язык, на котором вы пишете команды для отправки в существующее программное приложение. (как в традиционном ТВ или фильме "сценарий")

Например, когда-то веб-страницы HTML были скучными. Они всегда были статичны. Затем однажды Netscape подумал: "Эй, а что если мы позволим браузеру читать и выполнять маленькие команды на странице?" И вот так, Javascript был сформирован.

Простая команда javascript - это команда alert(), которая дает команду/команду браузеру (программному приложению), читающему веб-страницу, отобразить предупреждение.

Теперь, имеет ли alert() какое-либо отношение к C++ или к какому-либо языку кода, который браузер использует для отображения предупреждения? Конечно, нет. Кто-то, кто пишет "alert ()" на странице .html, не понимает, как браузер на самом деле отображает предупреждение. Он просто пишет команду, которую браузер будет интерпретировать.

Давайте посмотрим на простой код JavaScript

<script>
var x = 4
alert(x)
</script>

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

Мы называем эту последнюю серию команд "сценарием" (именно поэтому она заключена в теги <script>). Просто по определению "сценарий", в традиционном смысле: серия инструкций и команд, отправленных актерам. Всем известно, что сценарий (сценарий фильма), например, сценарий.

Сценарий (сценарий) - это , а не актеры, или камера, или спецэффекты. Сценарий просто говорит им, что делать.

Теперь, что такое сценарий язык, точно?

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

Javasript является очевидным примером; Есть очень мало приложений Javascript, которые не попадают в область сценариев.

ActionScript (язык для анимации Flash) и его производные являются языками сценариев, поскольку они просто подают команды проигрывателю/интерпретатору Flash. Конечно, есть такие абстракции, как объектно-ориентированное программирование, но все это просто средство для достижения цели: отправлять команды на флэш-плеер.

Python и Ruby обычно также используются в качестве языков сценариев. Например, однажды я работал в компании, которая использовала Ruby для создания сценариев команд для отправки в браузер, которые выглядели примерно так: "перейти на этот сайт, нажать на эту ссылку ...", чтобы выполнить некоторые основные действия. автоматизированное тестирование. Я не был "Разработчиком программного обеспечения" на этой работе. Я просто написал сценарии, которые отправляли команды на компьютер для отправки команд в браузер.

Из-за своей природы языки сценариев редко "компилируются", то есть переводятся в машинный код и читаются непосредственно компьютером.

Даже приложения с графическим интерфейсом, созданные из Python и ​​Ruby, являются сценариями, отправляемыми в API, написанный на C++ или C. Он сообщает приложению C, что делать.

Конечно, есть линия неопределенности. Почему вы не можете сказать, что Machine Language/C являются языками сценариев, потому что они являются сценариями, которые компьютер использует для взаимодействия с основными материнскими платами/видеокартами/чипами?

Есть некоторые линии, которые мы можем нарисовать, чтобы уточнить:

  1. Когда вы можете написать язык сценариев и запустить его без "компиляции", это больше похоже на прямой сценарий. Например, вам не нужно ничего делать со сценарием, чтобы сказать актерам, что с ним делать. Это уже там, используется, как есть. По этой причине мы будем исключать скомпилированные языки называться языками сценариев, даже если в некоторых случаях они могут использоваться для сценариев.

  2. Язык сценариев подразумевает команды, отправленные сложному программному приложению; в этом вся причина того, что мы пишем сценарии в первую очередь - поэтому вам не нужно знать сложности работы программного обеспечения для отправки ему команд. Таким образом, языки сценариев, как правило, являются языками, которые посылают (относительно) простые команды сложным программным приложениям ... в этом случае машинный язык и ассемблерный код не сокращают его.

2
Justin L.

В "Моем мнении" я бы сказал, что динамически интерпретируемые языки, такие как PHP, Ruby и т.д., Все еще являются "нормальными" языками. Я бы сказал, что примерами языков "сценариев" являются такие вещи, как bash (или ksh, tcsh или любой другой) или sqlplus. Эти языки часто используются для объединения существующих программ в системе в ряд последовательных и связанных команд, таких как:

  1. скопируйте A.txt в/tmp/work /
  2. запустить ночной процесс очистки на сервере базы данных
  3. зарегистрируйте результаты и отправьте их системному администратору

Так что я бы сказал, что разница (для меня, во всяком случае) заключается в том, как вы используете язык. Такие языки, как PHP, Perl, Ruby могут использоваться как "языки сценариев", но я обычно вижу их как "нормальные языки" (за исключением Perl, который, кажется, работает в обоих направлениях.

2
FrustratedWithFormsDesigner

Определение "языка сценариев" довольно размыто. Я бы основал это на следующих соображениях:

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

  2. Программы на языках сценариев обычно передаются в исходном виде.

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

  4. Языки сценариев, как правило, кроссплатформенные и не зависят от конкретной машины.

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

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

  7. Языки сценариев обычно разрабатываются для простоты программирования и с гораздо меньшим вниманием к скорости выполнения. (Если вам нужно быстрое выполнение, обычный совет - кодировать трудоемкие части во что-то вроде C и либо встраивать язык в C, либо вызывать C-биты из языка.)

Некоторые из характеристик, которые я перечислил выше, верны для реализаций, и в этом случае я имею в виду более общие реализации. Были интерпретаторы C, с (AFAIK) нет очевидного шага компиляции, но это не верно для большинства реализаций C. Вы, конечно, можете скомпилировать программу на Perl в нативный код, но это не так, как обычно. Некоторые другие характеристики носят социальный характер. Некоторые из вышеуказанных критериев частично совпадают. Как я уже сказал, определение нечеткое.

1
David Thornley

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

  • Perl - это язык программирования!
  • Perl скомпилирован как Java и ​​C++. Это просто скомпилировано намного быстрее!
  • В Perl есть объекты, пространства имен и замыкания.
  • В Perl есть IDE, отладчики и профилировщики.
  • Perl имеет обучение и поддержку и сообщество.
  • Perl - это не просто веб. Perl не просто системный администратор. Perl - это не просто клейкая лента интернета.

Почему нам даже нужно различать язык, подобный Java, который компилируется, и Ruby, который не является? Какова ценность в маркировке?

Подробнее об этом см. http://xoa.petdance.com/Stop_saying_script .

1
Andy Lester

Язык сценариев - это язык, который настраивает или расширяет существующую программу.
Язык сценариев - это язык программирования.

1
Romain Hippeau

Важным отличием является строгая типизация (против слабая типизация ). Языки сценариев часто слабо типизированы , что позволяет быстрее писать небольшие программы. Для больших программ это является недостатком, так как он запрещает компилятору/интерпретатору находить определенные ошибки автономно, что затрудняет рефакторинг кода.

1
Dimitri C.

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

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

1
Donal Fellows

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

1
Martin OConnor

Для немного другого взгляда на вопрос. Язык сценариев - это язык программирования, но язык программирования не обязательно является языком сценариев. Язык сценариев используется для управления или создания сценариев системы. Эта система может быть операционной системой, в которой язык сценариев будет bash. Система может быть веб-сервером с PHP языком сценариев. Языки сценариев предназначены для заполнения определенной ниши; они являются предметно-ориентированными языками. Интерактивные системы интерпретируют скриптовые языки, что порождает представление о том, что скриптовые языки интерпретируются; однако это является следствием системы, а не самого языка сценариев.

1
phreed

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

Каждый компилируемый язык может быть превращен в язык сценариев, и наоборот, все зависит от реализации интерпретатора или компилятора, так как в примере C++ имеет интерпретатор, поэтому его можно назвать языком сценариев, если он используется так (не очень практично в целом, как C++). это очень сложный язык), одним из самых полезных языков сценариев в настоящее время является Python ...

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

1
Panic

Перефразируя Роберта Себесту в Концепции языков программирования :

Язык сценариев используется путем помещения списка команд, называемых сценариями, в исполняемый файл. Первый из этих языков, названный sh (для Shell), начинался как небольшая коллекция команд, которые интерпретировались как вызовы системных подпрограмм, которые выполняли служебные функции, такие как управление файлами и простая фильтрация файлов. К этой основе были добавлены переменные, состояния потока управления, функции и различные другие возможности, и в результате появился полный язык программирования.

И тогда у вас есть примеры, такие как AWK, Tcl/Tk, Perl (что говорит о том, что изначально была комбинация между sh и AWK, но он стал настолько мощным, что считает его "странным, но полноценным" язык программирования"). Другие примеры включают CGI и JavaScript.

0
Eliseo Ocampos

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

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

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

Моя программа должна была бы проанализировать скриптовый код (вы могли бы называть их командами) и выполнить любое действие в реальном времени.

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

0
Daniel Eagle

Скрипт - относительно небольшая программа. система - это относительно большая программа или коллекция относительно больших программы.

Некоторые языки программирования имеют функции, которые разработчик языка и сообщество программистов считают полезными при написании относительно небольших программ. Эти языки программирования известны как скриптовые языки , например PHP.

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

Теперь маленькие и большие программы можно писать на любом языке. Небольшая программа Java представляет собой скрипт. Например, программа Java "Hello World" - это сценарий, а не система. Большая программа или набор программ, написанных на PHP, является системой. Например, Facebook, написанный на PHP, это система, а не скрипт.

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

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

0
Greg Mattes

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

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

Есть много свойств, которые люди упомянули выше как приблизительно совпадающие языки сценариев, к счастью, большинство из них правильно объясняют, что этот термин не имеет строгого определения. Поэтому я не буду дублировать мои идеи о том, что они здесь. По моему опыту, люди считают, что язык является языком сценариев, если они могут легко написать в них несколько быстрых одноразовых программ без особого труда. Я в основном отвечаю, чтобы дать вам цитату Оустерхаута, которого я здесь не вижу.

0
mmachenry

Если это не так /не будет запустить на процессоре, это сценарий для меня. Если интерпретатор должен работать на ЦП ниже программы, то это скрипт и язык сценариев.

Нет причин усложнять это?

Конечно, в большинстве (99%) случаев ясно, является ли язык скриптовым. Но учтите, что VM может эмулировать, например, набор команд x86. Разве это не делает байт-код x86 языком сценариев при запуске на виртуальной машине? Что, если бы кто-то написал компилятор, который превратил бы код Perl в собственный исполняемый файл? В этом случае я бы не знал, как назвать сам язык. Это будет иметь значение, а не язык.

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

0
anon6439

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

ссылка

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

0
Shoib Mohammed A

Короче говоря, языки сценариев имеют следующие свойства:

  1. На основе переводчика.
  2. Простой синтаксис. Подобный доступ к файлам каталога очень прост в python по сравнению с Java.
  3. Обычно используется для написания меньшего количества строк кода.
  4. Удобен для написания кодов автоматизации.
  5. Языки очень высокого уровня.

Eg.:Javascript,python,VBA.

0
Shobhit_Geek

Я бы сказал, что язык сценариев - это тот, кто сильно манипулирует сущностями, которые он сам не определяет. Например, JavaScript манипулирует объектами DOM, предоставляемыми браузером, PHP управляет огромной библиотекой функций на основе Си и так далее. Конечно, не точное определение, а скорее способ подумать, если это.

0
Michael Pliskin

просто кратко

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

Очень популярные языки программирования (Java, C #) запускаются внутри "родительской" программы - как языки сценариев. Языки сценариев сегодня используются для создания сложного программного обеспечения. В наши дни компьютеры настолько быстры, а языки сценариев настолько эффективны, что для большинства бизнес-операций нет практического преимущества в скорости (которое когда-то было) с скомпилированным языком программирования.

0
Srikanth Naidu

Кроме того, вы можете проверить этот подкаст на языках сценариев .

0
none

Твой критерий звучит примерно так, но всегда немного нечетко. Например, Java и ​​компилируется (в байт-код), а затем интерпретируется (JVM). Тем не менее, он обычно не классифицируется как язык сценариев.

Это может быть связано с тем, что Java имеет статическую типизацию. В то время как JavaScript, Ruby, Python, Perl и т.д. Не являются (все они часто называют языками сценариев).

0
Einar

Как заметил кто-то еще, не существует такого понятия, как скомпилированный или интерпретируемый язык, поскольку любой язык может быть скомпилирован или интерпретирован. Но языки, которые традиционно интерпретируются, а не компилируются (Python, Perl, Ruby, PHP, JavaScript, Lua) также являются теми, которые люди обычно называют языками сценариев. Поэтому довольно разумно сказать, что язык сценариев - это язык, который обычно интерпретируется, а не компилируется. Другие характеристики, которые имеют общие языки сценариев, связаны с тем, что они интерпретируются.

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

0
kerkeslager