В чем разница между «скриптом» и «приложением»?

Я имею в виду такие различия, как в этот ответ:

...bash isn't for writing applications it's for, well, scripting. So sure, your application might have some housekeeping scripts but don't go writing critical-business-logic.sh because another language is probably better for stuff like that.

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

(И я использую C в своей повседневной работе, поэтому я не просто защищаюсь.)

И в чем разница между ними и «программой» и «решением» (-:

hippietrail 20.05.2011 14:29

@hippietrail «решение» все исправляет, а «программа» все ломает!

Anonymous Penguin 21.12.2015 18:49

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

Steven 21.12.2015 22:54

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

DaveTheMinion 22.12.2015 22:06

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

Jonathan Lam 23.12.2015 17:45

Язык на самом деле ничего не определяет. Facebook является (или был) приложением PHP, а композитор - программой PHP.

Arnold Daniels 24.12.2015 12:25

@LambdaNinja Я тоже так думал и до сих пор так считаю.

MasterBob 20.12.2016 06:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
35
7
39 733
20
Перейти к ответу Данный вопрос помечен как решенный

Ответы 20

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

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

Jon Ericson 19.09.2008 11:11

Мне нравится это определение. Иначе бы не подумал об этом.

Nick 16.01.2009 03:41

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

Jeff 24.10.2012 08:07

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

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

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


Вы также спрашиваете, почему бы не создавать языки сценариев, так что:

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

В большинстве случаев скрипты в любом случае можно заменить реальным, легким языком, таким как Python или Ruby.

Python и Ruby иногда пренебрегают «языками сценариев». ;-)

Jon Ericson 19.09.2008 04:22

Python и Ruby - это скриптовые языки ИМХО :)

FlySwat 19.09.2008 04:23

Python и Ruby не являются языками сценариев, если только "сценарии" не были переопределены до бессмысленности.

John Millikin 19.09.2008 04:24

и что тогда такое "приложение Javascript". Змеиное масло? :П

Kent Fredric 19.09.2008 04:28

Да, поскольку невозможно написать целую программу с использованием Javascript. Вам нужно написать (или повторно использовать) отдельную платформу, такую ​​как Firefox или Rhino. Они не являются частью языка Javascript и, следовательно, не учитываются при сравнении языков.

John Millikin 19.09.2008 04:35

Снобизм против JavaScript! Каждый язык использует отдельную платформу на каком-то уровне для анализа и выполнения кода. JavaScript - это просто еще один язык, на котором можно писать «программы» или «сценарии».

Jason Wadsworth 19.09.2008 04:41

Когда вы говорите о веб-приложении как о «javascript-приложении», вы неявно сравниваете его с «javascript not-an-application» или простой веб-страницей. Я думаю, что «веб-приложение» - более правильный и менее запутанный термин - приложениям JS также нужны HTML и CSS, которые не являются частью JS.

The Digital Gabeg 19.09.2008 04:41

@Jason: Извините, но не все языки используют разные платформы. Машинный код назван так потому, что он работает непосредственно на машине, а компиляторы C создают машинный код.

The Digital Gabeg 19.09.2008 04:43

В самом деле. Но, тем не менее, вы можете сгенерировать HTML полностью с помощью javascript в веб-браузере. и вы можете попросить пользователя ввести отдельную страницу, управляемую javascript, и никогда больше не покидать ее в течение всего времени своего пребывания. (Например, GMail. Я бы вряд ли назвал Gmail "просто веб-страницей со скриптом")

Kent Fredric 19.09.2008 04:44

@Jason Укажите, пожалуйста, документацию по стандартной библиотеке Javascript. Особенно такие темы, как чтение файлов или печать.

John Millikin 19.09.2008 04:44

@Kent: Я не отрицаю, что можно создавать большие или сложные системы на языке сценариев. Но это по-прежнему только язык сценариев. Он полностью полагается на среду, определенную браузером, и не может работать за ее пределами. Например, вы не можете запустить GMail в Rhino или Apple Dashboard.

John Millikin 19.09.2008 04:48

@John Хорошо, отсутствие ввода-вывода в JavaScript - это небольшая проблема, не так ли? :) Вы, мог, утверждаете, что код, встроенный в машину, является «платформой» и что интерпретатор JS является эквивалентом стандартной библиотеки ввода-вывода для C. Но довольно скоро мы переопределим себя до глупости.

Jason Wadsworth 19.09.2008 04:56

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

Kent Fredric 19.09.2008 05:01

(у реальности другой API. Блин недокументированные)

Kent Fredric 19.09.2008 05:02

Ах, но никто не утверждал, что можно запускать машинный код на произвольных машинах! Только этот машинный код взаимодействует с машиной без чего-либо между ними. ;-) И это никогда не было реальной проблемой, потому что интерпретация не является критической характеристикой языков сценариев. X-P

The Digital Gabeg 19.09.2008 05:18

«Язык сценариев не имеет стандартной библиотеки или платформы (или не так много)». Так что же делает PERL? У него значительно больший набор библиотек, чем у C++, так что это должен быть язык программирования. Напротив, C (без STL) должен быть языком сценариев.

Ant 19.09.2008 14:30

«PERL ... должен быть языком программирования» - согласен. «C ... должен быть языком сценариев» - почему? Разве вы не слышали о libc?

John Millikin 19.09.2008 21:50
Ответ принят как подходящий

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

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

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

Взяв в качестве примера Perl, вы можете писать сценарии на Perl или приложения на Perl.

Сценарий подразумевает отдельный файл или единое пространство имен. (например, updateFile.pl).

Приложение представляет собой нечто, состоящее из набора файлов или пространств / классов имен (например, Perl-приложение, разработанное с помощью объектно-ориентированного подхода, с множеством файлов модулей .pm).

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

Сценарий обычно запускается как часть более крупного приложения внутри механизма сценариев. например. JavaScript -> Браузер Это контрастирует как с традиционными скомпилированными языками со статической типизацией, так и с динамическими языками, где код предназначен для формирования основной части приложения.

Обычно это «сценарий», а не «программа».

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

+1 «сценарий - это то, что есть у актеров, программа предоставляется зрителям».

Moeb 02.11.2009 08:22

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

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

Я мог бы использовать термин «сценарий» для обозначения программы, которая в основном выполняется линейно, а не с большим количеством последовательной логики или подпрограмм, подобно тому, как «сценарий» в Голливуде представляет собой линейную последовательность инструкций, которую должен выполнить актер. Я мог бы использовать его для обозначения программы, написанной на языке, встроенном в более крупную программу, с целью управления этой программой. Например, автоматизация задач в старой Mac OS с помощью AppleScript или запуск программы, которая каким-то образом раскрывает себя со встроенным интерфейсом TCL.

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

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

См. Также Это программа на Perl или сценарий на Perl? в perlfaq1.

Приложение - это набор сценариев, предназначенных для решения общего набора проблем.

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

ИМО, разница не имеет никакого отношения к используемому языку. Можно написать сложное приложение с помощью bash, и можно написать простой скрипт с помощью C++.

Лично я считаю, что разделение - это шаг назад от фактической реализации.

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

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

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

Более того, приложение может содержать сценарии, которые в совокупности составляют целое. Но сценарий может ссылаться только на приложение.

Ваше определение сценария («скомпоновано как костюмы и требует небольшого планирования») не соответствует моему опыту программирования и поддержки. Сценарии можно «сложить вместе», но в моем случае они требуют такого же планирования, как написание функции на C.

Jon Ericson 19.09.2008 11:18

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

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

Это интересная тема, и я не думаю, что существует очень хорошее руководство по различению «сценария» и «приложения».

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

Сценарий (Википедия -> Язык сценариев):

A scripting language, script language or extension language, is a programming language that controls a software application. "Scripts" are often treated as distinct from "programs", which execute independently from any other application. At the same time they are distinct from the core code of the application, which is usually written in a different language, and by being accessible to the end user they enable the behavior of the application to be adapted to the user's needs.

Заявление (Википедия -> Прикладное программное обеспечение -> Терминология)

In computer science, an application is a computer program designed to help people perform a certain type of work. An application thus differs from an operating system (which runs a computer), a utility (which performs maintenance or general-purpose chores), and a programming language (with which computer programs are created). Depending on the work for which it was designed, an application can manipulate text, numbers, graphics, or a combination of these elements.

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

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

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

У Джона Остерхаута (изобретателя TCL) есть хорошая статья в http://www.tcl.tk/doc/scripting.html, в которой он предлагает различие между языками системного программирования (для реализации строительных блоков, акцент на правильность, безопасность типов) и языками сценариев (для объединения строительных блоков, акцент на отзывчивость к изменениям). среды и требований, простое преобразование в текстовые представления и из них). Если вы выберете эту систему категоризации, то 99% программистов будут выполнять работу, которая больше подходит для языков сценариев, чем для языков системного программирования.

PS о механике Stack Overflow: я думаю, что статья актуальна и достаточно примечательна, чтобы ее стоит упомянуть, но есть неприятное ощущение «вечеринка окончена, все разошлись по домам» по поводу добавления в тему, ответы на которую были сгруппированы в 48 минут за четыре месяца. назад.

user8599 16.01.2009 03:45

Тем не менее, спустя некоторое время после этого мы здесь.

Jeff 28.06.2012 10:01

И через два года я обновил ссылку, потому что подумал, что это хорошая ссылка.

Henk Langeveld 13.07.2012 12:42

И через семь лет после этого я перешел по ссылке и нашел ее интересной.

Hampus 24.04.2019 17:12

Приложение большое и будет использоваться людьми снова и снова и, возможно, будет продано покупателю.

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

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

Программа:

Набор инструкций, который будет скомпилирован, известен как программа.

Сценарий:

Набор инструкций, которые будут интерпретироваться, известен как сценарий.

Как насчет:

Сценарий:

A script is text file (or collection of text files) of programming statements written in a language which allows individual statements written in it to be interpreted to machine executable code directly before each is executed and with the intention of this occurring.

Заявление:

An application is any computer program whose primary functionality involves providing service to a human Actor.

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

Есть берущие? :)

@ Джефф ответил хорошо. Мое любимое объяснение

Many (most?) scripting languages are interpreted, and few compiled languages are considered to be scripting languages, but the question of compiled vs. interpreted is only loosely connected to the question of "scripting" vs. "serious" languages.

A lot of the problem here is that "scripting" is a pretty vague designation -- it means a language that's convenient for writing scripts in, as opposed to writing "full-blown programs" (or applications). But how does one distinguish a complex script from a simple application? That's an essentially unanswerable question. Generally, a script is a series of commands applied to some set of data, possibly in a user-defined order... but then, one could stretch that description to apply to Photoshop, which is clearly a major application. Scripts are generally smaller than applications, do some well-defined thing and are "simpler" to use, and typically can be decomposed into a clear series of sub-operations, but all of these things are subjective.

Ссылка из здесь.

Я думаю, что совершенно не важно, компилируется или интерпретируется код.

Настоящая разница в основной логике кода:

  • Если код создает новую функциональность, которая не реализована в других программах в системе - это программа. Им даже можно управлять с помощью сценария.

  • Если код ГЛАВНЫМ образом манипулируется действиями других программ, а итоговый результат - ГЛАВНОЕ результаты работы управляемых программ - это скрипт. Буквально сценарий действий для некоторых программ.

Другие вопросы по теме