Язык сценариев против языка программирования

Может ли кто-нибудь объяснить разницу между языком сценариев и языком программирования, пожалуйста?
Также вы можете указать несколько примеров для каждого из них. Я много гуглил, но всегда находил лучшие ответы на Stack Overflow.


person Rahul Reddy    schedule 22.06.2013    source источник


Ответы (14)


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

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

Эта грань становится все более и более размытой, поскольку компиляция может быть очень быстрой с современным оборудованием и современными методами компиляции. Например, V8, движок JavaScript в Google Chrome, который также часто используется вне браузера, на самом деле компилирует код JavaScript на лету в машинный код, а не интерпретирует его. (На самом деле V8 — это оптимизирующий двухфазный компилятор.)

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

Некоторые примеры "скриптовых" языков (например, языков, которые традиционно используются без явного этапа компиляции):

  • Луа
  • JavaScript
  • VBScript и VBA
  • Перл

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

  • C
  • C++
  • D
  • Java (но обратите внимание, что Java компилируется в байт-код, который затем интерпретируется и/или перекомпилируется во время выполнения)
  • Паскаль

... и тогда у вас есть такие вещи, как Python, которые находятся в обоих лагерях: Python широко используется без этапа компиляции, но основная реализация (CPython) делает это, компилируя байт-код на лету, а затем запуская байт-код в VM, и он может записать этот байт-код в файлы (.pyc, .pyo) для использования без перекомпиляции.

Это всего лишь очень мало. Если вы проведете небольшое исследование, вы сможете найти намного больше.

person T.J. Crowder    schedule 22.06.2013
comment
Таким образом, вы в основном говорите, что язык сценариев — это то, для чего вам нужен интерпретатор, а не компилятор? - person mg30rg; 29.07.2014
comment
@mg30rg: Я говорю, что компиляция или интерпретация (скрипты) больше зависят от среды, чем от языка. - person T.J. Crowder; 29.07.2014
comment
@T.J.CrowderT.J.CrowderПросто для ясности: я не пытаюсь здесь спорить. Я отчаянно нуждаюсь в ответе на исходный вопрос, чтобы уладить дебаты. Я могу отличить скрипт от кодинга, потому что я чувствую, что я делаю, но это неверный аргумент, также он работает не во всех случаях. т.е. я четко чувствую, что пишу сценарий, когда пишу пакетный файл, скрипт установки или скрипт powershell< /b>, но я не совсем уверен, когда создаю сервер на основе ASP или PHP. Кроме того, многое из магии JavaScript похоже на настоящее программирование. (Это то, что я обычно вижу, как делают другие.) - person mg30rg; 30.07.2014
comment
@mg30rg: Хех, сценарии вполне могут быть настоящим программированием. (Вы не поверите, некоторые сценарии bash, которые я видел...) Я думаю, что самый простой способ определить это (и опять же, это не вопрос языка, это вопрос среды): посмотреть исходный код? Если это так, я бы назвал это сценарием; если нет, то я бы не стал. Таким образом, в этом смысле браузерный JavaScript является сценарием, потому что даже если такие механизмы, как V8, компилируют его на лету, исходный код все равно доставляется в среду выполнения. Аналогично оболочкам скриптов. Исходный код традиционной программы на C не доставляется в среду выполнения. - person T.J. Crowder; 30.07.2014
comment
@mg30rg: Но опять же, эти линии становятся все более размытыми. :-) Рассмотрим байт-код Java. Вы не можете запустить его без JVM, но это не исходный код. (Обычно декомпилятор может превратить его обратно в разумно выглядящий исходный код, но...) Я (отдаленно) не думаю о Java в традиционной среде как о языке сценариев. Но с другой стороны, я также не трачу много времени на размышления о категориях. :-) - person T.J. Crowder; 30.07.2014
comment
Разве python не скомпилирован в C? - person CME64; 13.03.2016
comment
@ CME64: Нет, основная реализация (CPython) компилируется в байт-код на лету и запускает байт-код на виртуальной машине. Хотя существуют инструменты Python-to-C (Cython и Pyrex), обычно Python работает не так. - person T.J. Crowder; 13.03.2016
comment
VBA имеет явный этап компиляции. Он автоматически компилируется во время выполнения в pcode. Его не должно быть в списке с VBScript. - person Vityata; 12.10.2017
comment
@Vityata: Пожалуйста, внимательно прочитайте ответ. В VBA нет шага явной компиляции (и раньше он вообще не компилировался). - person T.J. Crowder; 12.10.2017
comment
@T.J.Crowder - времена меняются, но компиляция во время выполнения есть компиляция. По крайней мере, удалите VBA из списка, это многих сбивает с толку. - person Vityata; 12.10.2017
comment
@Vityata: Цитата? (Для большого количества людей). Честно говоря, я очень в этом сомневаюсь. Компиляция во время выполнения - это компиляция - опять же, прочитайте ответ. например, языки, которые традиционно используются без явного этапа компиляции Подробнее: dictionary.com/browse/explicit - person T.J. Crowder; 12.10.2017
comment
@ T.J.Crowder - если бы я не знал, что VBA компилируется в Pcode, я бы подумал, что это язык сценариев, такой как VBScript. - person Vityata; 12.10.2017
comment
@Vityata: А ты один человек. Кто, по-видимому, - при всем уважении - даже не прочитал ответ. (Почему вы думаете, что VBScript не компилируется в какой-то pcode на лету? На самом деле, я считаю, что это было, даже в IIS6.) - person T.J. Crowder; 12.10.2017
comment
@ TJCrowder - если язык использует естественные директивы компилятора, это означает, что он компилируется. И он компилируется явно во время выполнения. Таким образом, VBA компилируется и не является языком сценариев. - person Vityata; 12.10.2017
comment
@Vityata: Нет, это не то, что означает явное. Я закончил. - person T.J. Crowder; 12.10.2017
comment
В защиту @Vityata, VBScript написан в Блокноте и интерпретируется как текстовый ввод, тогда как код VBA компилируется в P-Code, когда вы вводите его в редакторе, т.е. исходный код, который вы видите в редакторе после вы изменили строку кода, это не код, который вы набрали, а представление базового P-кода в VBE: механика VBA и VBScript полностью и совершенно различна, и объединение их вместе в этом список просто не кажется правильным вообще. VBA гораздо ближе к VB6, чем к VBScript; это только явное ограничение, которое не позволяет ему создавать автономный исполняемый файл. - person Mathieu Guindon; 12.10.2017
comment
Итак, что вы на самом деле также говорите в своем первом предложении, так это то, что языки сценариев также являются языками программирования, но программирование не обязательно является языком сценариев? - person Erik van de Ven; 18.09.2018
comment
@ErikvandeVen - В некотором смысле все языки программирования могут быть языками сценариев, потому что в общем случае можно представить себе среду, в которой не требуется явный этап компиляции. Однако в своей обычной, традиционной среде все языки сценариев (полные по Тьюрингу) являются языками программирования, но не все языки программирования являются языками сценариев (опять же: традиционно). Например, обычные среды для C требуют явной компиляции, поэтому в этом смысле он не будет языком сценариев (хотя, опять же, есть нишевые среды, в которых он есть). - person T.J. Crowder; 18.09.2018

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

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

Язык сценариев обычно не компилируется, поэтому может запускаться, как только вы пишете что-то осмысленное. Следовательно, Excel может быть создан с использованием C++, но он предоставляет пользователям язык сценариев под названием VBA для определения функциональности. Точно так же браузеры могут быть созданы с помощью C++/Java, но они предоставляют язык сценариев, называемый javascript (никоим образом не связанный с java). Игры обычно создаются на C++, но предоставляют пользователям язык Lua для определения пользовательских функций.

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

Хотя языки сценариев могут иметь меньший доступ и работать медленнее, они могут быть очень мощными инструментами. Одним из факторов успеха скриптовых языков является простота обновления. Вы помните дни Java-апплетов в Интернете? Это пример запуска языка программирования (java) и запуска языка сценариев (javascript). В то время компьютеры не были такими мощными, а javascript не был таким зрелым, поэтому Java-апплеты доминировали на сцене. Но Java-апплеты раздражали, они требовали от пользователя загрузки и компиляции языка. Перенесемся в сегодняшний день: апплеты Java почти вымерли, и на сцене доминирует Javascript. Javascript очень быстро загружается, так как большинство компонентов браузера уже установлены.

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

person yangli-io    schedule 10.09.2015
comment
Вам не кажется, что вы имели в виду: интерпретируемые языки против скомпилированных языков вместо языков сценариев против скомпилированных языков ?? - person bitsapien; 27.07.2017
comment
Примером здесь является то, что Javascript не сможет получить доступ к вашей файловой системе, Nodejs передает привет - person Mohammad; 09.01.2018
comment
@Mohammad NodeJS — это среда выполнения, которая позволяет программистам использовать Javascript в качестве языка для кодирования. NodeJS не является 100% Javascript. - person JeffNhan; 07.06.2019

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

Языки не классифицируются как скриптовые или нет - это полностью зависит от среды выполнения.

Если среда интерпретируется, ее обычно называют средой сценариев.

person Oded    schedule 22.06.2013

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

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

person Eric Barker    schedule 18.12.2014

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

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

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

person saikumarm    schedule 10.10.2014

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

  1. Языки сценариев не компилируются пользователем в машинный код (python, perl, shell и т. д.). Скорее другая программа (называемая интерпретатором, запускает программу и моделирует ее поведение)
  2. Некоторые языки программирования, которые не являются сценариями (C, C++, Haskell и другие «компилируемые» языки), компилируются в машинный код и впоследствии запускаются.
person jh314    schedule 22.06.2013

Я думаю, что то, что вы называете «различием», на самом деле является следствием реального различия.

Фактическая разница является целью написанного кода. Кто будет запускать этот код.

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

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

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

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

Если мы говорим, что реальная разница заключается в том, скомпилирован он или нет, то у нас есть проблема, потому что когда Javascript запускается в V8, он компилируется, а когда он запускается в Rhino — нет.

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

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

person Damian Jose    schedule 07.08.2015

Когда мир был молод и в мире ПК вы выбирали между .exe или .bat, разграничение было простым. В системах Unix всегда были сценарии оболочки (/bin/sh, /bin/csh, /bin/ksh и т. д.) и скомпилированные языки (C/C++/Fortran).

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

Различные люди/группы написали новые интерпретаторы для решения конкретной проблемной области. awk — один из самых известных, и он использовался в основном для сопоставления с образцом и применения ряда преобразований данных к входным данным. Это работало хорошо, но имело ограниченную проблемную область. Расширение этого домена было практически невозможно, поскольку исходный код был недоступен. Perl (Ларри Уолл, главный автор/архитектор) вывел скрипты на новый уровень — и разработал интерпретатор, который не только позволял пользователю запускать системные команды, манипулировать входными и выходными данными, поддерживать бестиповые переменные, но и получать доступ к API системного уровня Unix. как функции из самих скриптов. Вероятно, это был один из первых широко используемых скриптовых языков высокого уровня. Именно с Perl (ИМХО) скриптовые языки перешагнули произвольную черту и добавили возможности языков программирования.

Ваш вопрос был конкретно о Python. Поскольку интерпретатор Python работает с текстовым файлом, содержащим код Python, и этот код Python может выполняться везде, где есть интерпретатор Python, я бы сказал, что это язык сценариев (в том же духе, что и Perl). Вам не нужно перекомпилировать пользовательский командный файл python для каждой другой архитектуры ОС/ЦП (как в случае с C/C++/Fortran), что делает его значительно более переносимым и простым в использовании.

Кредит на этот ответ принадлежит Джерролду (Джерри) Хейману. Исходная ветка: https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language

person Kartik Chauhan    schedule 12.03.2018

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

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

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

источник ECMA

person Sukrit Gupta    schedule 14.07.2015

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

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

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

Итог: выбор языка зависит от характера выполняемой задачи, и выделение языка в качестве языка сценариев является мифом.

person paritosh mishra    schedule 19.06.2016

Скриптовые языки

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

Примеры языков сценариев

  1. JavaScript
  2. Перл
  3. питон

Преимущества языков сценариев:

  1. Простота — на языках сценариев писать проще, чем на языке программирования.

  2. Меньше строк кода (LOC)

Запрограммированные языки

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

Примеры языков программирования

  1. C
  2. С++ и
  3. Джава

Подробнее

person manisha mulchandani    schedule 18.06.2015
comment
Языки сценариев являются языками программирования. Кроме того, Java интерпретируется другим приложением, называемым JVM. - person bfontaine; 06.01.2017

В языках сценариев, таких как (JavaScript и старые версии PHP), мы используем существующие фундаментальные функции и методы для выполнения нашей работы. Давайте возьмем пример в JavaScript, мы можем использовать ajax или web-sockets, только если они поддерживаются браузером или существуют методы или они в браузере. Но в таких языках, как C или C++, Java мы можем написать эту функцию с нуля, даже если какая-либо библиотека для этой функции недоступна, но мы не можем сделать это в JavaScript.

можете ли вы поддерживать веб-сокеты в Internet Explorer 8 или более ранних версиях с помощью JavaScript Но вы можете написать плагин на C, C++ или Java, который может добавить функцию веб-сокетов в Internet Explorer 8.

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

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

P.S. Мне очень жаль, что мой ответ вращается только вокруг PHP JavaScript, но я использую эти два, потому что у меня есть значительный опыт в этих двух.

person Ravinder Payal    schedule 04.04.2016

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

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

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

я бы добавил:

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

То есть это может быть интерпретируемым языком.

Если язык программирования имеет значительное поведение «во время компиляции», когда он анализирует код и сообщает об ошибках без запуска программы, например, об ошибках типов из C, Java или C#, то он, скорее всего, не считается языком сценариев.

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

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

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

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

BASIC также является старым языком программирования, как COBOL и Fortran, еще до того, как люди ожидали статического анализа от языка, и, по сути, до того, как «языки сценариев» вообще стали чем-то особенным.

person lrn    schedule 20.03.2019

Если логически рассматривать язык программирования и язык сценариев, то это на 99,09% одно и то же. потому что мы используем одну и ту же концепцию, такую ​​​​как цикл, условие управления, переменная и все такое, поэтому мы можем сказать, что да, они одинаковы, но между ними есть только одна разница: в C/C++ и другом языке программирования мы компилируем код перед выполнением. но в PHP, JavaScript и других языках сценариев нам не нужно компилировать, мы выполняем их непосредственно в браузере.

Спасибо, Нитиш К. Джа.

person NITISH KUMAR Jha    schedule 10.03.2016