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

347

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

Рахул Редди
источник

Ответы:

466

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

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

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

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

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

  • Lua
  • JavaScript
  • VBScript и VBA
  • Perl

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

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

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

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

TJ Crowder
источник
1
Отличное объяснение!
Гладиатор
48
@ mg30rg: Хех - сценарии могут быть полностью «настоящим» программированием. (Вы не поверите, что некоторые из скриптов bash, которые я видел ...) Я думаю, что самый простой способ определить его (и опять-таки, это не язык, а среда): работает ли среда выполнения увидеть исходный код? Если так, я бы назвал это «сценарием»; если нет, я бы не стал. Таким образом, в этом смысле JavaScript на основе браузера является «сценарием», потому что даже если такие движки, как V8, компилируют его «на лету», исходный код все равно доставляется в среду выполнения. Точно так же оболочка скриптов. Исходный код традиционной программы на С не доставляется во время выполнения.
TJ Crowder
2
@ mg30rg: Но опять же, эти линии становятся все более размытыми. :-) Рассмотрим байт-код Java. Вы не можете запустить его без JVM, но это не исходный код. (Обычно он может быть преобразован обратно в разумный исходный код декомпилятором, но ...) Я не (удаленно) думаю о Java в традиционной среде как о языке сценариев. Но я также не трачу много времени на размышления о категориях. :-)
TJ Crowder
2
@ CME64: Нет, основная реализация (CPython) компилируется в байт-код на лету и запускает байт-код в виртуальной машине. Хотя существуют инструменты Python-to-C (Cython и Pyrex), обычно Python запускается не так.
TJ Crowder
2
Для защиты @ Vityata, VBScript написан в Блокноте и интерпретируется как ввод текста, тогда как код VBA компилируется в P-Code по мере его ввода в редакторе , т.е. исходный код, который вы видите в редакторе после изменения строки кода, не код , который вы набрали, но VBE в исполнение базового P-Code: механика VBA против VBScript полностью и совершенно разные, и валить их в этом списке просто не чувствует себя хорошо на всех. VBA намного ближе к VB6, чем к VBScript; это только явное ограничение, которое мешает ему создать отдельный исполняемый файл.
Матье
103

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

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

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

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

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

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

Ян Ли
источник
4
Не кажется ли вам, что вы имели в виду: «интерпретируемые языки против скомпилированных языков» вместо «языки сценариев против скомпилированных языков» ??
Битсапиен
6
«Примером здесь является то, что Javascript не сможет получить доступ к вашей файловой системе», - говорит Нодейс, привет
Мухаммед
@Mohammad NodeJS - это среда выполнения, которая позволяет кодировщикам использовать Javascript в качестве «языка» для кодирования. NodeJS - это не 100% Javascript.
ДжеффНхан
65

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

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

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

Одед
источник
18

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

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

Эрик Баркер
источник
12

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

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

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

saikumarm
источник
10

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

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

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

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

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

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

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

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

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

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

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

Дамиан Хосе
источник
5

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

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

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

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

Благодарность за этот ответ достается Джерролду (Джерри) Хейману. Оригинальная тема: https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language

Картик Чаухан
источник
4

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

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

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

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

паритош мишра
источник
4

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

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

Примеры скриптовых языков

  1. JavaScript
  2. Perl
  3. питон

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

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

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

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

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

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

  1. С
  2. C ++ и
  3. Ява

Подробнее

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

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

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

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

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

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

Равиндер Паял
источник
3

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

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

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

SRC ECMA

Сукрит Гупта
источник
2

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

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

NITISH KUMAR Jha
источник
2

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

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

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

Я бы добавил:

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

То есть это могло быть интерпретированный язык.

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

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

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

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

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

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

ЛРН
источник