Мова сценаріїв проти мови програмування


347

Чи може хтось пояснити різницю між мовою сценарію та мовою програмування?
Також можна навести кілька прикладів для кожного. У мене багато в Google, але я завжди знаходжу найкращі відповіді від Stack Overflow.

Відповіді:


466

Мови скриптування - це мови програмування, які не потребують явного кроку компіляції.

Наприклад, у звичайному випадку вам слід скласти програму C, перш ніж запускати її. Але в звичайному випадку вам не потрібно складати програму JavaScript перед її запуском. Тому JavaScript іноді називають мовою "скриптування".

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

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

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

  • Луа
  • JavaScript
  • VBScript та VBA
  • Perl

І невеликий розмір тих, які традиційно використовуються з явним кроком компіляції:

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

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

Це лише дуже мало, якщо зробити кілька досліджень, ви можете знайти набагато більше.


1
Відмінне пояснення!
Гладіатор

48
@ mg30rg: Хе - сценарій може бути абсолютно "справжнім" програмуванням. (Ви б не повірили деяким баш-сценаріям, які я бачив ...) Я думаю, що найпростіший спосіб визначити це (і знову ж таки, це не мова про мову, це навколишнє середовище): Чи є середовище виконання бачити вихідний код? Якщо так, я б назвав це "сценарієм"; як ні, я б не став. Тож у цьому сенсі браузер на основі JavaScript є "сценарієм", тому що навіть якщо такі двигуни, як V8, компілюють його на ходу, джерело все ще доставляється в середовище виконання. Аналогічно оболонки сценаріїв. Джерело традиційної програми C не надходить до часу виконання.
TJ Crowder

2
@ mg30rg: Але знову ж таки, ці рядки постійно розмиваються. :-) Розгляньте байт-код Java. Ви не можете запустити його без JVM, але це не вихідний код. (Зазвичай декомпілятор може бути повернутий до розумного вигляду вихідного коду, але ...) Я не (віддалено) вважаю Яву в традиційному середовищі як мовою сценаріїв. Але потім я також не витрачаю багато часу на роздуми над категоріями. :-)
TJ Crowder

2
@ CME64: Ні, основна реалізація (CPython) компілюється для байтового коду на льоту і запускає байт-код у віртуальній машині. Хоча існують інструменти Python-to-C (Cython та Pyrex), як правило, Python не працює.
TJ Crowder

2
На захист @ Vityata VBScript пишеться в Блокноті та інтерпретується як введення тексту, тоді як код VBA компілюється в P-код під час введення його в редакторі , тобто вихідний код, який ви бачите в редакторі після зміни рядка коду, - це не код, який ви ввели, але передача VBE основного P-коду: механіка VBA проти VBScript повністю і зовсім інша, і згуртувати їх у цьому списку просто зовсім не вірно. VBA набагато ближче до VB6, ніж до VBScript; це лише явне обмеження, яке не дозволяє йому створити автономний виконуваний файл.
Матьє Гіндон

103

Щоб зрозуміти різницю між мовою сценаріїв та мовою програмування, треба зрозуміти, чому народилися мови сценаріїв.

Спочатку існували мови програмування, які писалися для побудови таких програм, як excel, word, браузери, ігри тощо. Ці програми були побудовані з такими мовами, як c та java. У позаурочний час ці програми потребували способів створення користувачами нових функціональних можливостей, тому їм довелося надавати інтерфейс для їхнього байт-коду, а отже, і народилися мови скриптування.

Мова сценаріїв зазвичай не складається, тому може запускатися, як тільки ви пишете щось значуще. Отже, excel може бути побудований за допомогою C ++, але він відкриває мову сценаріїв під назвою VBA, щоб користувачі визначали функціональність. Аналогічно можуть бути побудовані браузери з C ++ / Java, але вони відкривають мову сценаріїв, звану javascript (ніяк не пов'язана з java). Ігри, як правило, побудовані на C ++, але розкривають мову під назвою Lua, щоб користувачі могли визначити власну функціональність.

Мова сценаріїв зазвичай сидить за деякою мовою програмування. Мови сценаріїв зазвичай мають менший доступ до рідних можливостей комп'ютерів, оскільки вони працюють на підмножині оригінальної мови програмування. Прикладом тут є те, що Javascript не зможе отримати доступ до вашої файлової системи. Мови сценаріїв зазвичай повільніші, ніж мови програмування.

Хоча мови скриптування можуть мати менший доступ і є повільнішими, вони можуть бути дуже потужними інструментами. Одним із факторів, що сприяють успіху мов сценаріїв, є легкість оновлення. Ви пам’ятаєте дні яблучних аплетів в Інтернеті, це приклад роботи мови програмування (java) проти запуску мови сценаріїв (javascript). У той час комп’ютери не були настільки потужними, і JavaScript не був настільки зрілим, тому на сценах домінували Java-апплети. Але Java-аплети дратували, вони вимагали від користувача сортування завантаження та складання мови. Швидкий перехід до сьогодні, аплети Java майже вимерли, а на сцені домінує Javascript. Javascript надзвичайно швидко завантажується, оскільки більшість компонентів браузера вже встановлені.

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


4
Ви не думаєте, що ви мали на увазі: "інтерпретовані мови проти компільовані мови" замість "мови сценаріїв проти компільованих мов" ??
bitsapien

6
"Прикладом тут є те, що Javascript не зможе отримати доступ до вашої файлової системи", - сказати Nodejs привіт
Мохаммед

@Mohammad NodeJS - це час виконання, який дозволяє кодерам використовувати Javascript як "мову" для кодування. NodeJS - це не 100% JavaScript.
JeffNhan

65

Усі мови сценаріїв - це мови програмування.

Мови не класифікуються як сценарії чи ні - це повністю залежить від середовища виконання.

Якщо оточення інтерпретується, це зазвичай називається сценарієм середовища.


18

Відмінності стають все менш і менш важливими. Традиційно мови написання сценаріїв поширюють існуючі програми ... Я думаю, що саме головне визначення "сценаріїв" полягає в тому, що це стосується написання набору інструкцій для виконання існуючого об'єкта. Однак там, де мови сценаріїв починалися із власного та розмовного синтаксису, більшість поширених в наші дні зобов'язані деяким відношенням до С.

Я думаю, що відмінність "інтерпретовано проти компільованого" насправді є симптомом розширення існуючої програми (із вбудованим інтерпретатором), а не внутрішньою різницею. Те, що програмістів і мирян більше турбує, - "чим займається програміст?" Той факт, що одна програма трактується, а інша складається, означає дуже мало для визначення різниці в діяльності творця. Ви не судите драматурга щодо того, чи його п'єси частіше читати вголос чи виконувати на сцені, чи не так?


12

Мова програмування: Складається до машинного коду та працює на апаратному забезпеченні базової операційної системи.

Мова сценаріїв: це неструктурований підмножина мови програмування. Це взагалі трактується. це в основному "сценарії" інші речі, щоб зробити речі. Основна увага полягає не в основному на створенні власних додатків, а в тому, щоб існуючий додаток діяв так, як вам потрібно, наприклад, JavaScript для браузерів, TCL тощо,

*** Але бувають ситуації, коли мова програмування перетворена на інтерпретатора, а віце-вірш на зразок використання має інтерпретатор C, де ви можете "C" скрипт. Сценарії, як правило, пишуться для управління поведінкою додатків, коли як мова програмування використовується для створення програм. Але майте на увазі, що розмежування розмивається день у день як приклад Python, це залежить від того, як людина використовує мову.


10

Мови сценаріїв - це підмножина мов програмування.

  1. Мови сценаріїв не компілюються користувачем машинного коду (python, perl, shell тощо). Скоріше, інша програма (звана інтерпретатором, запускає програму та імітує її поведінку)
  2. Деякі мови програмування, які не створюють сценарії (C, C ++, Haskell та інші "компільовані" мови), компілюються в машинний код і згодом запускаються.

5

Я думаю, що те, що ви заявляєте як "різниця", насправді є наслідком реальної різниці.

Фактична різниця - ціль написаного коду. Хто збирається запустити цей код.

Мова написання використовується для запису коду, який буде орієнтований на програмну систему. Він буде автоматизувати операції в цій програмній системі. Сценарій буде послідовністю інструкцій до цільової програмної системи.

Мова програмування орієнтована на обчислювальну систему, яка може бути реальною або віртуальною машиною. Інструкції виконуються машиною.

Звичайно, реальна машина розуміє лише двійковий код, тому вам потрібно скласти код мови програмування. Але це наслідок орієнтації на машину замість програми.

З іншого боку, цільова програмна система скрипту може скласти код або інтерпретувати його. Відповідає програмній системі.

Якщо ми скажемо, що справжня різниця полягає в тому, чи вона складена чи ні, то у нас є проблема, оскільки коли Javascript працює у V8, то компілюється, а коли він працює у Rhino, це не так.

Це стає більш заплутаним, оскільки мови сценаріїв стали дуже потужними. Тому вони не обмежуються створенням невеликих скриптів для автоматизації операцій в іншій програмній системі, ви можете створювати з ними будь-які багаті програми.

Код Python націлений на інтерпретатора, тому ми можемо сказати, що він "скриптує" операції над цим інтерпретатором. Але коли ви пишете код Python, ви не бачите його як сценарій інтерпретатора, ви бачите його як створення програми. Перекладач як раз там, щоб кодувати на більш високому рівні, серед іншого. Тож для мене Python - це скоріше мова програмування, ніж мова сценаріїв.


5

Ще тоді, коли світ був молодим і в світі ПК, який ви вибрали з .exe або .bat, розмежування було простим. У системах Unix завжди були сценарії оболонки (/ bin / sh, / bin / csh, / bin / ksh тощо) та мови компіляції (C / C ++ / Fortran).

Для розмежування ролей та обов'язків, складені мови (часто їх називають мовами третього покоління) розглядалися як мови програмування, а мови "сценаріїв" розглядалися як мови, які викликали перекладача (часто його називають мовами 4-го покоління). Мови сценаріїв часто використовувались як "клей" для з'єднання між декількома командами / компільованими програмами, щоб користувачеві не довелося переживати про набір кроків, щоб виконати своє завдання - вони розробили єдиний файл, який визначив, які кроки вони хотіли досягти цього, і це стало «сценарієм» для кожного, хто його може наслідувати.

Різні люди / групи писали нових перекладачів, щоб вирішити конкретну проблему. awk є одним з найбільш відомих, і він використовувався здебільшого для узгодження зразків та застосування серії перетворень даних на вхід. Він працював добре, але мав обмежену проблему. Розширення цього домену було майже неможливим, оскільки вихідний код був недоступний. Інструмент сценаріїв Perl (Ларрі Уолл, автор / архітектор) на наступний рівень - і розробив інтерпретатор, який не тільки дозволяв користувачеві виконувати системні команди, маніпулювати вхідними та вихідними даними, підтримувати безцінні змінні, а й отримувати доступ до 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

Детальніше


Підготовлені мови є мовами програмування. Крім того , 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

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

Мова сценаріїв - мова програмування, яка використовується для маніпулювання, налаштування та автоматизації можливостей існуючої системи. У таких системах корисна функціональність вже доступна через користувальницький інтерфейс, а мова сценаріїв - це механізм викриття цієї функціональності програмним управлінням.

Тоді як мова програмування зазвичай використовується для кодування системи з Scratch.

src ECMA


2

Якщо ми бачимо логічно мову програмування та мову скриптів, то це 99,09% однаково. тому що ми використовуємо таку ж концепцію, як цикл, умова управління, змінна і все, тому ми можемо сказати, що так, і те саме, але між ними є лише одне, що є в C / C ++ та іншою мовою програмування, ми складаємо код перед виконанням. але в PHP, JavaScript та іншій мові сценаріїв нам не потрібно збирати, ми виконуємо безпосередньо у браузері.

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


2

Мови сценаріїв - це мови програмування, які люди розглядають як мови сценаріїв. Це штучна категорія без чітких меж, і де кожне запропоноване правило має виняток.

Класичні правила, які використовувались для того, щоб сказати, що мова є мовою сценарію, характеризують, а не визначають. Якщо мова відповідає ряду правил, є велика ймовірність, що вона вважається мовою сценаріїв. Якщо ні, то є хороший шанс, що це не так. Зазвичай правила включають:

  • Він призначений для невеликих "сценаріїв", а не великих програм.
  • Він вбудований в інший додаток, який використовується для невеликих модифікацій цього додатка.
  • Це інтерпретується, а не компілюється.
  • Він призначений для початківців програмістів, а не для професіоналів.
  • Його назва закінчується на "скрипт".

Я додам:

  • Мова сценаріїв - мова програмування, де майже всі помилки виявляються під час виконання.

Тобто це могла бути інтерпретована мова.

Якщо мова програмування має значну поведінку "час компіляції", коли вона аналізує код і повідомляє про помилки, не запускаючи програму, як-от помилки типу C, Java або C #, вона, швидше за все, не вважається мовою сценарію.

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

Якщо мова може бути реалізована інтерпретатором, який дивиться лише на вихідний код, коли він працює, то, швидше за все, це вважається мовою сценарію. Чи реально це реалізовано таким чином, не важливо, але якщо це може бути, то він також не може вимагати великої перевірки помилок у компільованому часі.

Якщо мова надає корисну статичну семантику, яка допомагає виявляти помилки (крім синтаксичних помилок), не запускаючи програму, це, ймовірно, не є мовою сценаріїв.

Завжди є винятки, як правило, засновані на традиціях навколо мови більше, ніж будь-яке фактичне правило. BASIC зазвичай не вважається "мовою сценаріїв", хоча він задовольняє майже всі критерії, якими хтось колись користувався. Ось чому Visual Basic Script повинен був додати ім'я "скрипт", щоб відрізнити себе від Visual Basic, "справжньої" мови програмування, призначеної для великих програм.

BASIC - це також стара програма програмування, як COBOL і Fortran, раніше, ніж люди очікували статичного аналізу з мови, а в основному перед тим, як "мови скриптингу" були навіть річчю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.