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

107

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

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

Shog9
источник
Вы можете немного расширить свой вопрос. В остальном я чувствую, что это почти обман. Другие могут не видеть различия
Кент Фредрик
Обман на какой другой вопрос?
Sietse
2
stackoverflow.com/questions/98268/… Здесь много общего. Не обязательно идентичные, но много общего контекста / мнения.
Кент Фредрик,
7
... Когда язык нарушает API и меняет его синтаксис в каждом второстепенном выпуске, когда он представляет собой оболочку из 100 грязных необслуживаемых библиотек C с ошибками, тогда это язык сценариев. ;)
ivan_ivanovich_ivanoff
1
На боковой панели «Связанные» вы найдете stackoverflow.com/questions/1514206/…, с которым я связал кучу уже существующих дубликатов, возвращаясь к stackoverflow.com/questions/101055/… .
dmckee --- котенок экс-модератора

Ответы:

52

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

моффдуб
источник
Так что насчет таких языков, как Python? Трудно сказать, где находится фокус, но можно сказать, что он больше фокусируется на собственных приложениях, хотя его часто называют «языком сценариев». Возможно, потому что скрытая компиляция в байт-код эталонного CPython impl. не вызывает ошибок компиляции в отношении "безопасности типов"? Может быть, в ответе Одеда есть эти ...
n611x007
Системы байт-кода и типов на самом деле не имеют к этому никакого отношения. Согласно приведенному выше определению, если приложение предоставляет API для Python, считается, что оно использует Python в качестве языка сценариев. Если вы создаете приложение полностью на Python, это приложение будет использовать его как язык программирования.
ошибка
«Сценарии» - это не определение типа языка. Это характеристика, которую могут иметь языки . Итак, Python - это «хороший язык сценариев», потому что он упрощает написание кода, который выполняет сценарии. Ассемблер не является хорошим языком сценариев, потому что он затрудняет создание сценариев. C находится где-то посередине, потому что, хотя у него есть ключевое слово (система) для вызова, он также обременяет пользователя множеством беспорядков, прежде чем вы сможете туда добраться.
номен
93

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

Мартина Беккета
источник
19
Да. «Это не« игрушечный язык », это« язык высокого уровня »»: P
Роберто Бонвале
6
это было напыщенно и не по теме, -1
adf88
1
Даже с - (1 + 1) он получает примерно в 2x + 1 с, чем отмеченный галочкой. : D
анатолий техтоник
Лучший. Ответ. EVAR!
iconoclast
41

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

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

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

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

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

Одед
источник
1
@Amr: ну это называется java скрипт
sepp2k
1
@ Рам Бхат - это сбивает с толку, поскольку различие искусственно.
Oded
11
@Andrey: Все современные реализации JavaScript скомпилированы. И есть переводчики для C.
Jörg W Mittag
27
Это просто неправильно. Что ж, на самом деле это даже не неправильно , это просто не имеет смысла. Не существует компилируемого или интерпретируемого языка. Язык не компилируется, язык просто есть . Это набор абстрактных математических правил. Интерпретация и компиляция - это особенности механизма выполнения , а не языка. Каждый язык может быть реализован либо с помощью компилятора, либо с помощью интерпретатора. Фактически, все языки, которые были названы на этой странице «интерпретируемыми», имеют почти исключительно скомпилированные реализации, например JavaScript, PHP, Python, Ruby.
Jörg W Mittag
5
@Andrey: Chakra (IE9), TraceMonkey / JägerMonkey (Firefox), Nitro (Safari), Carakan (Opera) компилируют JavaScript в байт-код, а затем часть байт-кода интерпретируется, а часть компилируется в собственный код. V8 (Chrome) пропускает байт-код и компилирует JavaScript прямо в собственный код. IronJS компилирует JavaScript в байт-код CIL. Rhino компилирует JavaScript в байт-код JVML. BESEN (пока единственный движок ECMAScript 5) компилирует JavaScript в байт-код BESEN, и в настоящее время добавляется собственный компилятор. Некоторые из вышеперечисленных также компилируют регулярные выражения в собственный машинный код.
Йорг В. Миттаг,
31

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

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

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

Клинтон Пирс
источник
хммм .. Я не повесил трубку, но большинство интервьюеров и учителей повесили трубку. И я никогда не слышал, чтобы кто-нибудь из этих людей дал мне удовлетворительный ответ!
Laz
1
И если бы вы дали здесь один из других ответов, я бы подумал, что как интервьюер вы действительно не разбираетесь в вопросе. Различие действительно размыто, и нет однозначного ответа. Если бы вы сказали: «Ну, традиционно ...», я бы согласился, но тогда я бы ожидал, что вы обсудите такие вещи, как компиляция времени выполнения и JIT.
Клинтон Пирс,
25

Мое определение - это язык, который обычно распространяется как исходный код, а не как двоичный.

Кенни
источник
5
Так вы думаете, что php, python и т. Д. Являются языками сценариев?
Sietse
«Сценарии» - это общее описание для Python и PHP.
S.Lott
22
php и python - конечно, это языки сценариев!
Энтони Карти,
это мое определение с самого начала
@ Энтони Карти, это неправильно. Python обычно не является языком сценариев, но он может, как и любой другой язык, использоваться в программе (например, Word (VB), Browser (JS))
Джошуа,
16

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

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

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

Функциональное программирование или объектно-ориентированное программирование - это стили программирования ; вы можете писать в функциональном или объектно-ориентированном стиле практически на любом языке. Например, Linux Virtual File System коммутатор и Linux Driver Model сильно объектно-ориентированный , несмотря написана на C, в то время как много Java или C # код , который вы видите в Интернете является очень процедурной , а не объектно-ориентированный на всех . OTOH, я видел очень функциональный код Java.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

Пол Биггар
источник
1
Это очень хорошее объяснение, но я уверен , что некоторые люди upvote это потому , что они видят «порно»
HoKy22
Ссылка на статью не работает.
Quazi Irfan
5

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

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

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

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

Cd-MaN
источник
Перед запуском Perl компилируется в байтовый код.
Брэд Гилберт,
2
А как насчет Java? Вам понадобится jvm для запуска java-программы, но я бы не стал называть это языком сценариев
Eineki
5

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

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

Джорен
источник
4

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

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

Родриго Лопес
источник
Это вообще не отвечает на вопрос!
Пол Биггар,
Позвольте мне еще раз заявить, что язык сценариев - это язык, в который включен компилятор, и можно выполнять код, сгенерированный на лету. Как это не отвечает на вопрос?
Родриго Лопес,
Это интерпретируемый язык. Если вы пытаетесь сказать, что любой интерпретируемый язык является языком сценариев, скажите это.
Пол Биггар,
Что ж, для написания сценариев можно использовать все языки, ключевой момент для меня - насколько они подходят. Для меня отличительная черта в том, что да, они интерпретируются.
Родриго Лопес,
4
Common Lisp - это не то, что я обычно считаю языком сценариев, но у него есть полноценная evalфункция.
Дэвид Торнли
4

Одно деление

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

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

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

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

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

Тимо Весткэмпер
источник
А как насчет Objective-C?
mouviciel
1
Он поддерживает динамическую типизацию, но я бы не стал называть его языком сценариев.
Тимо Весткемпер,
2
Это просто неправильно. Что ж, на самом деле это даже не неправильно , это просто не имеет смысла. Не существует компилируемого или интерпретируемого языка. Язык не компилируется, язык просто есть . Это набор абстрактных математических правил. Интерпретация и компиляция - это особенности механизма выполнения , а не языка. Каждый язык может быть реализован либо с помощью компилятора, либо с помощью интерпретатора. Фактически, все языки, которые были названы на этой странице «интерпретируемыми», имеют почти исключительно скомпилированные реализации, например JavaScript, PHP, Python, Ruby.
Jörg W Mittag
@ jorg-w-mittag, Не стесняйтесь редактировать мой ответ, чтобы он был более правильным. Ваши баллы действительны. Однако обычно, говоря о языке, вы также говорите о механизме выполнения по умолчанию.
Тимо Весткемпер,
3

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

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

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

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

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

дуб
источник
2
Не существует компилируемого или интерпретируемого языка. Язык не компилируется, язык просто есть . Это набор абстрактных математических правил. Интерпретация и компиляция - это особенности механизма выполнения , а не языка. Каждый язык может быть реализован либо с помощью компилятора, либо с помощью интерпретатора. Фактически, все языки, которые были названы на этой странице «интерпретируемыми», имеют почти исключительно скомпилированные реализации, например JavaScript, PHP, Python, Ruby.
Jörg W Mittag
@Jorg: Хороший вопрос, я согласен. Но я не сказал, что это невозможно скомпилировать, просто сказал, что эти типы языков обычно интерпретируются, а не компилируются при обычном использовании.
Oak
Они? Все текущие реализации Python, PHP, Perl и Lua скомпилированы. За исключением MRI, все текущие реализации Ruby скомпилированы. (И это на самом деле не один, а два компиляторов JIT для МРТ.) За исключением JScript, все современные реализации JavaScript компилируется. Обратите внимание, что преемник JScript, Chakra, скомпилирован. Скомпилировано множество реализаций Scheme. ELisp скомпилирован.
Jörg W Mittag
3

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

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

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

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

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

Амадан
источник
Фактически, первоначальная реализация BASIC была компилятором. Лишь позднее клоны BASIC были написаны как интерпретаторы, потому что интерпретаторы якобы легче писать, чем компиляторы.
Jörg W Mittag
1
@ Йорг: Не совсем так. Хотя самые первые тестовые реализации Dartmouth BASIC были скомпилированы (так называемый Card BASIC), фактическими реализациями были интерпретаторы. Фактически, вероятно, наиболее важной новой особенностью BASIC было то, что он был интерактивным. Не нужно вставлять исходный код в карточки и передавать их компилятору. Пользователь мог просто сесть за телетайп, написать программу, а затем запустить ее.
PauliL
Интересно, что этот ответ вводит идею «жесткого» языка. Нужно ли в этом контексте определение «жесткий»?
DA Vincent
@DavidVincent: Я, наверное, имел в виду «тяжелее». Никакого формального определения не требуется, интуитивного понимания должно быть достаточно: гораздо сложнее написать программу на ассемблере или C, чем на Ruby или Python, учитывая, что первые гораздо более низкоуровневые и подробные, чем вторые.
Амадан
3

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

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

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

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

Маркус Адамс
источник
3

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

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

Питер Мортенсен
источник
Я не хочу очернять ответ Питера, но можем ли мы добавить что-то большее, чем мнение?
DA Vincent
3

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

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

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

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

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

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

Мэтью Лейтон
источник
2

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

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

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

FrustratedWithFormsDesigner
источник
Спасибо .. Это проясняет ситуацию. Итак, напомним, языки сценариев предназначены для последовательного использования уже существующих программ. НО такие языки, как C, можно использовать для того же через API. Так что технически все зависит от использования
Laz
Нет, вы просто искусственно проводите различие (вот что это такое). Если вы можете быстро что-то придумать с его помощью, язык часто называют языком сценариев, но это не строгое определение или что-то в этом роде. Обычно интерпретируемые языки также часто называют языками сценариев.
wlangstroth
@Will: любое различие будет искусственным. Это было мое категоричное различие. ;)
FrustratedWithFormsDesigner
да, но «скриптинг» в данном случае - очень разговорный и расплывчатый термин. Решение, что это «использовать уже существующие программы вместе в последовательности», очень специфично и не совсем правильно. Возможно, это похоже на сценарий оболочки , но не на Perl. Затем, чтобы сравнить это с API (?) ... Я просто не хотел, чтобы этот парень слишком сильно сбился с пути.
wlangstroth
2

Я просто перенесу свой ответ из повторяющегося вопроса


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

Например, когда-то веб-страницы 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. Конечно, существуют абстракции, такие как объектно-ориентированное программирование, но все это просто средство для достижения цели: отправка команд во flash-плеер.

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

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

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

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

Вот несколько линий, которые мы можем прояснить:

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

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

Джастин Л.
источник
2

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

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

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

Роберт Гулд
источник
Даже несмотря на то, что я много работаю с php, я бы сказал, что до тех пор, пока он не перейдет от сценария к модели сервлета / real / fcgi, делегирующей задачи, делегированные с сервера, я бы лично назвал его «довольно хорошим языком сценариев, который может создать иллюзию приложения »,
Кент Фредрик
Статический / динамический, есть компилируемые динамические языки.
Брэд Гилберт,
Я повторяю: я имею в виду, что вы не можете на самом деле сказать что-то вроде Python или Ruby - это «скриптовые» языки в наши дни (у вас даже есть такие вещи, как IronPython и JitYourFavoriteLanguage, разница еще более размыта).
Роберт Гулд
1

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

Мартин ОКоннор
источник
Забавно, что у принятого ответа есть два отрицательных голоса.
Роберт С.
1
Для этого должен быть какой-то значок. Как насчет «Не могу понять правду»? Нет, слишком многословен. ;-)
Joseph Ferris
3
Perl, Python, Ruby, Tcl / Tk - это всего лишь четыре языка сценариев - в основном не встроены в более крупное приложение.
Джонатан Леффлер,
3
Ergo - они не скриптовые языки.
Милен А. Радев,
3
Ага, было бы неплохо, если бы это можно было как-то снять с пометки как правильную.
Noon Silk,
1

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

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

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

Паника
источник
1

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

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

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

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

Энди Лестер
источник
Ни один компьютер не может запускать perl или ruby ​​(или любую другую форму, в которую они могут быть скомпилированы) изначально. Следовательно, perl и ruby ​​- это языки сценариев, интерпретируемые парсером или виртуальной машиной.
anon6439
@psoul: да. так это java.
Стефано Борини
Существует несколько методов компиляции рубина в машинный код, хотя я не уверен, что какой-либо из них не просто связывает интерпретатор со строкой, представляющей рубиновый код, но даже если бы это было правдой, можно сделать переводчик рубинового кода в машинный. это для машинного кода не приблизило бы его к скорости c из-за всей динамической отправки и gc среди прочего. Я не думаю, что существуют какие-либо процессоры Ruby, но это были машины, разработанные для более точного соответствия модели lisp и процессорам, на которых выполнялся байт-код java.
Роман А. Тайчер,
1

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

Дмитрий К.
источник
1

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

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

Donal Fellows
источник
1

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

фрид
источник
1

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

Ромен Иппо
источник
1

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

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

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

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

  4. Языки сценариев имеют тенденцию быть кроссплатформенными, а не машинно-зависимыми.

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

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

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

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

Дэвид Торнли
источник
0

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

Михаил Плискин
источник
Ммм, PHP использует базовую библиотеку C, но это так для большинства языков, включая Java (на самом низком уровне). И он не управляет этими функциями ...
PhiLho
0

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

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

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

Опять же, я ничего подобного не знаю, поэтому пока мне удобно называть интерпретируемые языки скриптовыми языками.

анон6439
источник
1
Вы вызываете почти все языки, кроме тех, которые компилируются в собственный двоичный код для языков сценариев? Уверен, что Java-разработчики будут счастливы, если их назовут сценаристами;)
truppo
1
Они есть. То есть скрипты.
anon6439
0

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

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

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

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

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

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

Грега Мэтта
источник