Может ли кто-нибудь объяснить разницу между языком сценариев и языком программирования, пожалуйста?
Также вы можете указать несколько примеров для каждого из них. Я много гуглил, но всегда находил лучшие ответы на Stack Overflow.
Язык сценариев против языка программирования
Ответы (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
) для использования без перекомпиляции.
Это всего лишь очень мало. Если вы проведете небольшое исследование, вы сможете найти намного больше.
Чтобы понять разницу между языком сценариев и языком программирования, нужно понять, почему появились языки сценариев.
Первоначально существовали языки программирования, которые были написаны для создания таких программ, как Excel, Word, браузеры, игры и т. д. Эти программы были созданы с использованием таких языков, как C и Java. Со временем этим программам потребовался способ, с помощью которого пользователи могли бы создавать новые функции, поэтому им пришлось предоставить интерфейс для своего байт-кода, и, следовательно, родились языки сценариев.
Язык сценариев обычно не компилируется, поэтому может запускаться, как только вы пишете что-то осмысленное. Следовательно, Excel может быть создан с использованием C++, но он предоставляет пользователям язык сценариев под названием VBA для определения функциональности. Точно так же браузеры могут быть созданы с помощью C++/Java, но они предоставляют язык сценариев, называемый javascript (никоим образом не связанный с java). Игры обычно создаются на C++, но предоставляют пользователям язык Lua для определения пользовательских функций.
Язык сценариев обычно стоит за каким-то языком программирования. Языки сценариев обычно имеют меньший доступ к собственным возможностям компьютеров, поскольку они работают на подмножестве исходного языка программирования. Примером здесь является то, что Javascript не сможет получить доступ к вашей файловой системе. Языки сценариев обычно медленнее, чем языки программирования.
Хотя языки сценариев могут иметь меньший доступ и работать медленнее, они могут быть очень мощными инструментами. Одним из факторов успеха скриптовых языков является простота обновления. Вы помните дни Java-апплетов в Интернете? Это пример запуска языка программирования (java) и запуска языка сценариев (javascript). В то время компьютеры не были такими мощными, а javascript не был таким зрелым, поэтому Java-апплеты доминировали на сцене. Но Java-апплеты раздражали, они требовали от пользователя загрузки и компиляции языка. Перенесемся в сегодняшний день: апплеты Java почти вымерли, и на сцене доминирует Javascript. Javascript очень быстро загружается, так как большинство компонентов браузера уже установлены.
Наконец, языки сценариев также считаются языками программирования (хотя некоторые люди отказываются это принимать) — термин, который мы должны использовать здесь, — это языки сценариев и компилируемые языки.
Все языки сценариев являются языками программирования.
Языки не классифицируются как скриптовые или нет - это полностью зависит от среды выполнения.
Если среда интерпретируется, ее обычно называют средой сценариев.
Различий становится все меньше и меньше. Традиционно языки сценариев расширяют существующие программы... Я думаю, что основное определение «сценариев» заключается в том, что они относятся к написанию набора инструкций для выполнения существующим объектом. Однако там, где языки сценариев начинались с проприетарного и разговорного синтаксиса, большинство распространенных в наши дни имеют какое-то отношение к C.
Я думаю, что различие «интерпретируемое и скомпилированное» на самом деле является симптомом расширения существующей программы (со встроенным интерпретатором), а не внутренней разницей. Программистов и неспециалистов больше волнует вопрос «что делает программист?» Тот факт, что одна программа интерпретируется, а другая компилируется, очень мало значит для определения разницы в деятельности создателя. Вы же не судите о драматурге по тому, его пьесы чаще читают вслух или ставят на сцене, не так ли?
Язык программирования: скомпилирован в машинный код и работает на оборудовании базовой операционной системы.
Язык сценариев: это неструктурированное подмножество языка программирования. Обычно интерпретируется. это в основном «скрипты» других вещей, чтобы делать вещи. Основное внимание уделяется не созданию собственных приложений, а тому, чтобы существующее приложение действовало так, как вы хотите, например. JavaScript для браузеров, TCL и т. д.,
*** Но бывают ситуации, когда язык программирования преобразуется в интерпретатор и наоборот, например, при использовании интерпретатора C, в котором вы можете использовать скрипт «C». Сценарии обычно пишутся для управления поведением приложения, тогда как язык программирования используется для создания приложений. Но имейте в виду, что демаркация стирается день ото дня, как пример Python, это зависит от того, как вы используете язык.
Языки сценариев являются подмножеством языков программирования.
- Языки сценариев не компилируются пользователем в машинный код (python, perl, shell и т. д.). Скорее другая программа (называемая интерпретатором, запускает программу и моделирует ее поведение)
- Некоторые языки программирования, которые не являются сценариями (C, C++, Haskell и другие «компилируемые» языки), компилируются в машинный код и впоследствии запускаются.
Я думаю, что то, что вы называете «различием», на самом деле является следствием реального различия.
Фактическая разница является целью написанного кода. Кто будет запускать этот код.
Язык сценариев используется для написания кода, предназначенного для программной системы. Он собирается автоматизировать операции в этой программной системе. Сценарий будет последовательностью инструкций для целевой программной системы.
Язык программирования нацелен на вычислительную систему, которая может быть реальной или виртуальной машиной. Инструкции выполняются машиной.
Конечно, настоящая машина понимает только двоичный код, поэтому вам нужно скомпилировать код языка программирования. Но это следствие нацеливания на машину, а не на программу.
С другой стороны, целевая программная система сценария может компилировать код или интерпретировать его. Это зависит от системы программного обеспечения.
Если мы говорим, что реальная разница заключается в том, скомпилирован он или нет, то у нас есть проблема, потому что когда Javascript запускается в V8, он компилируется, а когда он запускается в Rhino — нет.
Это становится еще более запутанным, поскольку языки сценариев развились и стали очень мощными. Таким образом, они не ограничиваются созданием небольших скриптов для автоматизации операций в другой программной системе, с их помощью можно создавать любые многофункциональные приложения.
Код Python нацелен на интерпретатор, поэтому мы можем сказать, что он «скриптует» операции для этого интерпретатора. Но когда вы пишете код Python, вы не рассматриваете его как сценарий интерпретатора, вы видите его как создание приложения. Интерпретатор просто существует, чтобы кодировать на более высоком уровне среди прочего. Так что для меня Python больше язык программирования, чем язык сценариев.
Когда мир был молод и в мире ПК вы выбирали между .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
Помимо разницы в том, что язык сценариев интерпретируется, а язык программирования компилируется, есть еще одно различие, как показано ниже, которое, я думаю, было упущено.
Язык сценариев — это язык программирования, который используется для управления, настройки и автоматизации средств существующей системы. В таких системах полезные функции уже доступны через пользовательский интерфейс, а язык сценариев представляет собой механизм предоставления доступа к этим функциям программному управлению.
В то время как язык программирования обычно используется для кодирования системы с нуля.
источник ECMA
Я не согласен с тем фактом, что языки, использующие интерпретаторы, являются языками сценариев, а тот, который компилируется, - это языки программирования. Мы можем разработать интерпретатор или компилятор для любого языка. Интерпретируемая среда лучше подходит для веб-скриптинга и упрощает его, поэтому она у нас есть.
Ну, я чувствую, что нет никакой разницы между языком сценариев и языком программирования. Все дело в выполнении работы. Когда дело доходит до веб-задач, мы называем их веб-скриптами, учитывая небольшую задачу, и таким образом мы также можем называть системные задачи сценариями уровня системы или ОС, а язык программирования, который мы используем для выполнения этих задач, — языками системных сценариев.
Также дело не в том, что нельзя писать код системного уровня на Python и веб-скрипты на языке C (определенно можно, если мы сможем установить необходимую платформу и среду). Но все, что требуется, — это слишком много усилий, которые могут повлиять на временные ограничения для быстрой разработки, а небольшое сокращение задержки не принесет нам большой пользы в веб-скриптах. Но мудрое обратное неверно, если мы выполняем задачи системного уровня в Python.
Итог: выбор языка зависит от характера выполняемой задачи, и выделение языка в качестве языка сценариев является мифом.
Скриптовые языки
Языки сценариев интерпретируются внутри другой программы. JavaScript встроен в браузер и интерпретируется этим браузером.
Примеры языков сценариев
- JavaScript
- Перл
- питон
Преимущества языков сценариев:
Простота — на языках сценариев писать проще, чем на языке программирования.
Меньше строк кода (LOC)
Запрограммированные языки
Языки программирования, такие как Java, компилируются и не интерпретируются другим приложением таким же образом.
Примеры языков программирования
- C
- С++ и
- Джава
Подробнее
- http://www.yorku.ca/nmw/facs1939f13/javascript_all/js_scriptingVSprogramming.html
- http://www.killersites.com/blog/2005/scripting-vs-programming-is-there-a-difference/
В языках сценариев, таких как (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, но я использую эти два, потому что у меня есть значительный опыт в этих двух.
Языки сценариев — это языки программирования, которые люди считают языками сценариев. Это искусственная категория без четких границ, где каждое предлагаемое правило имеет исключение.
Классические правила, используемые для утверждения, что язык является языком сценариев, характеризуют, а не определяют. Если язык удовлетворяет ряду правил, есть большая вероятность, что он считается языком сценариев. Если нет, то есть большая вероятность, что это не так. Обычно правила включают:
- Он предназначен для небольших «скриптов», а не для больших программ.
- Он встроен в другое приложение и используется для небольших модификаций этого приложения.
- Он интерпретируется, а не компилируется.
- Он предназначен для начинающих программистов, а не для профессионалов.
- Его имя заканчивается на «сценарий».
я бы добавил:
- Язык сценариев — это язык программирования, в котором почти все ошибки обнаруживаются во время выполнения.
То есть это может быть интерпретируемым языком.
Если язык программирования имеет значительное поведение «во время компиляции», когда он анализирует код и сообщает об ошибках без запуска программы, например, об ошибках типов из C, Java или C#, то он, скорее всего, не считается языком сценариев.
Традиционно многие языки сценариев интерпретировались непосредственно из исходного кода, но более популярные из них получили более производительные реализации, которые предварительно компилируют код, например файлы .pyc
Python, или оптимизирующие механизмы JavaScript, которые компилируются в собственный код перед запуском.
Если язык может быть реализован интерпретатором, который просматривает исходный код только во время его выполнения, то он, скорее всего, считается языком сценариев. Неважно, реализовано ли это на самом деле таким образом, но если это возможно, то это также не может требовать обширной проверки кода на ошибки во время компиляции.
Если язык предоставляет полезную статическую семантику, которая помогает обнаруживать ошибки (кроме синтаксических ошибок) без необходимости запуска программы, вероятно, это не язык сценариев.
Всегда есть исключения, обычно основанные на языковых традициях, а не на каких-либо реальных правилах. BASIC обычно не считается «языком сценариев», даже несмотря на то, что он удовлетворяет почти всем критериям, которые кто-либо когда-либо использовал для того, чтобы быть таковым. Вот почему к названию Visual Basic Script пришлось добавить слово «сценарий», чтобы отличить его от Visual Basic, «настоящего» языка программирования, предназначенного для больших программ.
BASIC также является старым языком программирования, как COBOL и Fortran, еще до того, как люди ожидали статического анализа от языка, и, по сути, до того, как «языки сценариев» вообще стали чем-то особенным.
Если логически рассматривать язык программирования и язык сценариев, то это на 99,09% одно и то же. потому что мы используем одну и ту же концепцию, такую как цикл, условие управления, переменная и все такое, поэтому мы можем сказать, что да, они одинаковы, но между ними есть только одна разница: в C/C++ и другом языке программирования мы компилируем код перед выполнением. но в PHP, JavaScript и других языках сценариев нам не нужно компилировать, мы выполняем их непосредственно в браузере.
Спасибо, Нитиш К. Джа.