Я имею в виду такие различия, как в этот ответ:
...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.shbecause another language is probably better for stuff like that.
Как программист, который работал со многими языками, это похоже на снобизм C, Java и других компилируемых языков. Я не ищу подкрепления своего мнения или волнистых ответов. Скорее, я искренне хочу знать, о каких технических отличиях идет речь.
(И я использую C в своей повседневной работе, поэтому я не просто защищаюсь.)
@hippietrail «решение» все исправляет, а «программа» все ломает!
Приводит ли конкретный язык к тому, чтобы стать скриптом или приложением?
Я не думаю, что есть какой-то определенный правильный ответ, это скорее зависит от конкретного случая. Обычно я использую сценарий для обозначения небольшой программы, которую не нужно собирать с помощью компилятора. Все остальное - приложение ко мне.
Я бы сказал, что сценарий - это единственный интерпретируемый язык (например, PHP сценарий или Javaсценарий), а программа обычно - это нечто большее. Но я не думаю, что есть какое-то техническое определение.
Язык на самом деле ничего не определяет. Facebook является (или был) приложением PHP, а композитор - программой PHP.
@LambdaNinja Я тоже так думал и до сих пор так считаю.





Я бы сказал, что приложение, как правило, используется в интерактивном режиме, когда сценарий будет работать, что подходит для пакетной работы. Я не думаю, что это конкретное различие.
Думаю, я согласен с этим ответом. Я понимаю, что, возможно, было бы лучше спросить о скриптах и языках программирования.
Мне нравится это определение. Иначе бы не подумал об этом.
Хороший замечание, но не объясняет, почему существуют «языки программирования» и «языки сценариев». Вы можете писать неинтерактивные задания в любом из них.
Сценарий обычно представляет собой серию команд, которые запускаются, выполняются и завершаются. Часто это не требует / требует небольшого взаимодействия с человеком. Приложение - это «программа» ... оно часто требует взаимодействия с человеком, оно обычно больше.
У языка сценариев нет стандартной библиотеки или платформы (или ее немного). Он маленький и легкий, предназначен для встраивания в более крупное приложение. Bash и Javascript - отличные примеры языков сценариев, потому что они полностью полагаются на другие программы в своей функциональности.
Используя это определение, сценарий - это код, предназначенный для управления большим приложением (набором). Javascript может вызывать Firefox для открытия окон или управления DOM. Сценарий Bash выполняет существующие программы или другие сценарии и соединяет их вместе с помощью каналов.
Вы также спрашиваете, почему бы не создавать языки сценариев, так что:
Существуют ли вообще какие-либо инструменты модульного тестирования для языков сценариев? Это кажется очень важным инструментом для «реальных» приложений, которого полностью нет. И редко встречаются настоящие привязки библиотек для языков сценариев.
В большинстве случаев скрипты в любом случае можно заменить реальным, легким языком, таким как Python или Ruby.
Python и Ruby иногда пренебрегают «языками сценариев». ;-)
Python и Ruby - это скриптовые языки ИМХО :)
Python и Ruby не являются языками сценариев, если только "сценарии" не были переопределены до бессмысленности.
и что тогда такое "приложение Javascript". Змеиное масло? :П
Да, поскольку невозможно написать целую программу с использованием Javascript. Вам нужно написать (или повторно использовать) отдельную платформу, такую как Firefox или Rhino. Они не являются частью языка Javascript и, следовательно, не учитываются при сравнении языков.
Снобизм против JavaScript! Каждый язык использует отдельную платформу на каком-то уровне для анализа и выполнения кода. JavaScript - это просто еще один язык, на котором можно писать «программы» или «сценарии».
Когда вы говорите о веб-приложении как о «javascript-приложении», вы неявно сравниваете его с «javascript not-an-application» или простой веб-страницей. Я думаю, что «веб-приложение» - более правильный и менее запутанный термин - приложениям JS также нужны HTML и CSS, которые не являются частью JS.
@Jason: Извините, но не все языки используют разные платформы. Машинный код назван так потому, что он работает непосредственно на машине, а компиляторы C создают машинный код.
В самом деле. Но, тем не менее, вы можете сгенерировать HTML полностью с помощью javascript в веб-браузере. и вы можете попросить пользователя ввести отдельную страницу, управляемую javascript, и никогда больше не покидать ее в течение всего времени своего пребывания. (Например, GMail. Я бы вряд ли назвал Gmail "просто веб-страницей со скриптом")
@Jason Укажите, пожалуйста, документацию по стандартной библиотеке Javascript. Особенно такие темы, как чтение файлов или печать.
@Kent: Я не отрицаю, что можно создавать большие или сложные системы на языке сценариев. Но это по-прежнему только язык сценариев. Он полностью полагается на среду, определенную браузером, и не может работать за ее пределами. Например, вы не можете запустить GMail в Rhino или Apple Dashboard.
@John Хорошо, отсутствие ввода-вывода в JavaScript - это небольшая проблема, не так ли? :) Вы, мог, утверждаете, что код, встроенный в машину, является «платформой» и что интерпретатор JS является эквивалентом стандартной библиотеки ввода-вывода для C. Но довольно скоро мы переопределим себя до глупости.
Я собираюсь пожаловаться, что не могу запустить C на своей кофемашине или что объекты, созданные в виртуальной реальности компьютера, не могут выжить в реальном мире. Таким образом, все является сценарием. :п
(у реальности другой API. Блин недокументированные)
Ах, но никто не утверждал, что можно запускать машинный код на произвольных машинах! Только этот машинный код взаимодействует с машиной без чего-либо между ними. ;-) И это никогда не было реальной проблемой, потому что интерпретация не является критической характеристикой языков сценариев. X-P
«Язык сценариев не имеет стандартной библиотеки или платформы (или не так много)». Так что же делает PERL? У него значительно больший набор библиотек, чем у C++, так что это должен быть язык программирования. Напротив, C (без STL) должен быть языком сценариев.
«PERL ... должен быть языком программирования» - согласен. «C ... должен быть языком сценариев» - почему? Разве вы не слышали о libc?
Традиционно программа компилируется и сценарий интерпретируется, но это уже не так важно. Вы можете сгенерировать скомпилированную версию большинства скриптов, если действительно хотите, а другие «скомпилированные» языки, такие как Java, фактически интерпретируются (на уровне байтового кода).
Более современное определение может заключаться в том, что программа предназначена для использования заказчиком (возможно, внутренним) и, следовательно, должна включать документацию и поддержку, в то время как сценарий в первую очередь предназначен для использования автором.
Интернет - интересный встречный пример. Нам всем нравится искать информацию в поисковой системе Google. Большая часть кода, используемого для создания «базы данных», на которую он ссылается, используется только его авторами и сопровождающими. Это делает его сценарием?
Взяв в качестве примера Perl, вы можете писать сценарии на Perl или приложения на Perl.
Сценарий подразумевает отдельный файл или единое пространство имен. (например, updateFile.pl).
Приложение представляет собой нечто, состоящее из набора файлов или пространств / классов имен (например, Perl-приложение, разработанное с помощью объектно-ориентированного подхода, с множеством файлов модулей .pm).
Скрипт для меня подразумевает построчную интерпретацию кода. Вы можете открыть сценарий и просмотреть его удобочитаемое для программиста содержимое. Приложение подразумевает автономный скомпилированный исполняемый файл.
Сценарий обычно запускается как часть более крупного приложения внутри механизма сценариев. например. JavaScript -> Браузер Это контрастирует как с традиционными скомпилированными языками со статической типизацией, так и с динамическими языками, где код предназначен для формирования основной части приложения.
Обычно это «сценарий», а не «программа».
Я согласен с тем, что это различие в основном связано с «снобизмом на компилированном языке», или, если процитировать Ларри Уолла и перейти по другую сторону забора, «сценарий - это то, что есть у актеров, программа предоставляется аудитории».
+1 «сценарий - это то, что есть у актеров, программа предоставляется зрителям».
На самом деле разница между сценарием (или языком сценариев) и приложением заключается в том, что сценарий не требует компиляции на машинный язык. Вы запускаете источник сценария с помощью интерпретатора. Приложение компилирует исходный код в машинный код, чтобы вы могли запускать его как отдельное приложение.
Часто это просто семантический аргумент или даже способ очернить определенные языки программирования. Насколько я понимаю, «сценарий» - это тип программы, точное определение которого несколько расплывчато и зависит от контекста.
Я мог бы использовать термин «сценарий» для обозначения программы, которая в основном выполняется линейно, а не с большим количеством последовательной логики или подпрограмм, подобно тому, как «сценарий» в Голливуде представляет собой линейную последовательность инструкций, которую должен выполнить актер. Я мог бы использовать его для обозначения программы, написанной на языке, встроенном в более крупную программу, с целью управления этой программой. Например, автоматизация задач в старой Mac OS с помощью AppleScript или запуск программы, которая каким-то образом раскрывает себя со встроенным интерфейсом TCL.
Но во всех этих случаях сценарий - это разновидность программы.
Термин «язык сценариев» используется для динамически интерпретируемых (иногда компилируемых) языков, обычно они имеют много общих функций, таких как инструкции очень высокого уровня, встроенные хэши и списки произвольной длины и другие структуры данных высокого уровня и т. д. Но эти языки способны создавать очень большие, сложные, модульные, хорошо спроектированные программы, поэтому, если вы думаете о «скрипте» как о чем-то отличном от программы, этот термин может вас смутить.
См. Также Это программа на Perl или сценарий на Perl? в perlfaq1.
Приложение - это набор сценариев, предназначенных для решения общего набора проблем.
Сценарий - это фрагмент кода для выполнения одной довольно конкретной задачи.
ИМО, разница не имеет никакого отношения к используемому языку. Можно написать сложное приложение с помощью bash, и можно написать простой скрипт с помощью C++.
Лично я считаю, что разделение - это шаг назад от фактической реализации.
По моей оценке, планируется заявление. У него несколько целей, у него несколько результатов. Есть задачи, отложенные во время разработки перед кодированием, которым должно соответствовать приложение.
Сценарий, однако, просто составляется по типу костюмов, и при этом мало что требуется для планирования.
Однако отсутствие надлежащего планирования не означает, что вы переходите к сценарию. Возможно, это превращает ваше приложение в плохо организованный набор плохо спланированных скриптов.
Более того, приложение может содержать сценарии, которые в совокупности составляют целое. Но сценарий может ссылаться только на приложение.
Ваше определение сценария («скомпоновано как костюмы и требует небольшого планирования») не соответствует моему опыту программирования и поддержки. Сценарии можно «сложить вместе», но в моем случае они требуют такого же планирования, как написание функции на C.
Я бы сказал, что сценарий обычно представляет собой набор команд или инструкций, написанных в виде обычного текста, который является выполняется хостинг-приложением (браузер, интерпретатор команд или оболочка, ...).
Это не значит, что он не является мощным или каким-то образом не компилируется, когда он фактически выполняется. Но скрипт сам по себе ничего делать не может, это просто текст. По своей природе это может быть только фрагмент, который необходимо объединить для создания программы или приложения, но расширенные и полностью разработанные сценарии или набор сценариев могут считаться программами или приложениями при выполнении хостом, как и связка исходных файлов. может стать приложением после компиляции.
Это интересная тема, и я не думаю, что существует очень хорошее руководство по различению «сценария» и «приложения».
Давайте взглянем на некоторые статьи в Википедии, чтобы почувствовать разницу.
Сценарий (Википедия -> Язык сценариев):
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 минут за четыре месяца. назад.
Тем не менее, спустя некоторое время после этого мы здесь.
И через два года я обновил ссылку, потому что подумал, что это хорошая ссылка.
И через семь лет после этого я перешел по ссылке и нашел ее интересной.
Приложение большое и будет использоваться людьми снова и снова и, возможно, будет продано покупателю.
Скрипт начинается с малого, остается маленьким, если вам повезет, редко продается покупателю и может либо запускаться автоматически, либо выйти из употребления.
Прежде всего, я хотел бы прояснить, что сценарий - это программа. Другими словами, сценарий - это набор инструкций.
Программа:
Набор инструкций, который будет скомпилирован, известен как программа.
Сценарий:
Набор инструкций, которые будут интерпретироваться, известен как сценарий.
Как насчет:
Сценарий:
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.
Ссылка из здесь.
Я думаю, что совершенно не важно, компилируется или интерпретируется код.
Настоящая разница в основной логике кода:
Если код создает новую функциональность, которая не реализована в других программах в системе - это программа. Им даже можно управлять с помощью сценария.
Если код ГЛАВНЫМ образом манипулируется действиями других программ, а итоговый результат - ГЛАВНОЕ результаты работы управляемых программ - это скрипт. Буквально сценарий действий для некоторых программ.
И в чем разница между ними и «программой» и «решением» (-: