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


38

До цих пір я не знаю КЛЮЧОВИХ відмінностей між цими трьома. Коли хтось запитує мене про це, я лише кажу їм, що C # - це мова програмування, HTML і XML - це мови розмітки, а JavaScript і VBScript - мови скриптування. Але які ключові відмінності відрізняють їх одне від одного?


Не забудьте мови запитів!
Кайл Делані

Відповіді:


38

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

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

  • Мова сценаріїв використовується для посередництва між програмами з метою генерування даних. Особливо це стосується мов скриптових сценаріїв, таких як bash, але якщо ви задумаєтесь про це, також Python або Perl виникли з необхідності виконувати завдання в UNIX без написання програми на C. Програма, якою ви керуєте більшу частину часу цими мовами - це перекладач самої мови , який виконує загальні для вас завдання. Інші типові програми, з якими ви взаємодієте, - це сервери баз даних або веб-сервери.

    Повертаючись до метафори списку користувачів, мовою сценаріїв ви просите базу даних "дати мені всі імена користувачів", а потім попросити веб-сервер "надіслати цей список користувача цьому запитувачу".

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

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

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


7
Мови скриптування формально є підкласом мов програмування. (Я також бачив, як такі мови, як C та Java, повністю інтерпретуються із REPL; бар'єр є протікаючим обома способами ...)
Дональд

1
@DonalFellows: ви праві. Я відповів на це на увазі, але я прямо не використав вираз "один - це підмножина іншого". Також я не мав на увазі, що одна категорія інтерпретується, а інша - ні, тому що я знав, що це слабке розрізнення.
logc

1
@DonalFellows: я відредагував свою відповідь, щоб чітко згадати, що одне є підмножиною іншого.
logc

1
Я підтримую цю відповідь за те, що вона є єдиною (поки що), яка стверджує, що мови розмітки - це мови, що описують структуру даних.
Ідан Ар'є

3
@ JörgWMittag: Я знав, що будуть винятки, тому я почав із "будуть численні винятки" :) Інакше, де у своїй відповіді я маю на увазі, що мова сценаріїв не складається? Я намагався зосередитись на цілях мов саме для того, щоб уникнути цієї
неприємності

11

Мова розмітки - це мова, яка використовується для представлення структурованих даних. Наприклад, HTML дозволяє вказати, що деяка частина документа є заголовком, а інша частина - списком, порівняно з документом з плоским текстом.

Мови розмітки не розглядаються як мови програмування¹.

Різниця з мовами програмування не завжди очевидна. Наприклад, XSLT - повна мова Тюрінга², але заснована на XML, що є мовою розмітки.

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

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

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

Дивіться також: Розщеплення мета-волосся Стівена Лотта.


¹ "XML не є мовою програмування". Дивіться XML у 10 пунктах .

² "XSLT - мова, що завершує Тюрінга" Дивіться XSLT у Вікіпедії

³ “HHVM компілює Hack і PHP в проміжний байт-код. Потім цей байт-код перетворюється на машинний код x64 динамічно під час виконання компілятором, що вчасно (JIT) ". Див. HHVM .

Languages Сценарій мов у Переліку мов програмування за типом у Вікіпедії.


16
Мови ніколи не складаються та не тлумачаться. Мови просто є . Компіляція та інтерпретація - риси компілятора чи інтерпретатора (да!), Використовувані для реалізації мови. Терміни "складена мова" або "інтерпретована мова" навіть не мають сенсу, вони належать до різних рівнів абстракції. Якби Englisch була набраною мовою, "компільована мова" була б TypeError! Кожна мова може бути реалізована перекладачем, кожна мова може бути реалізована компілятором.
Йорг W Міттаг

@ JörgWMittag "Кожна мова може бути реалізована перекладачем, кожна мова може бути реалізована компілятором" - 100% правда?
спартак

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

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

1
Частина "Мова сценаріїв" є абсолютно невірною, як уже вказував "Йорг W Міттаг". А зверху немає пояснення "Програмування мови".
Девід Рааб

2

Щоб створити будь-яку систему таксономії, спочатку потрібно задати собі кілька питань:

  • Чи є об'єкти, які я збираюся вкласти у будь-які відносини, визначені правильно?
  • Якщо так, чи існують вони насправді?
  • Чи обмежуюсь я лише певним видом відносин між об'єктами, чи існує встановлена ​​вимога, щоб система використовувала лише законні відносини?

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

Мови програмування

На жаль, ніщо з перерахованого вище не здається правдою. Можливо, лише мови мов програмування мають визначення, яке найбільше погоджується. Мови програмування - це мови, які кодують програми. Кодування означає, що слово в мові можна інтерпретувати як програму (послідовність дій). Мови програмування комп'ютерів є підмножиною цих. Приклади некомп'ютерних мов програмування: продуктовий список, інтерпретований як вказівки для покупця в супермаркеті, ДНК інтерпретується транскрибуванням пептидів, аналогова музична платівка, яка слугує програмою для магнітофона.

Отже, мови програмування на комп’ютері - це ті, які програмують комп'ютери.

Мови скриптування

Не є чітко визначеними. Це є відкритим для тлумачення, що означає цей термін. Історично здавалося б, що мови програмування, які не мали компілятора для створення машинного коду, були названі таким чином. За сьогоднішніми мірками це ставить би кожну популярну мову програмування, як «Ассамблери», до цієї категорії. Навіть так звані мови низького рівня, такі як C, вимагають виконання з попередньо існуючими процедурами, тому двійкові файли, отримані шляхом компіляції програми C, не є повністю машинним кодом, але також закликають виконувати час виконання.

Мови розмітки

Не є чітко визначеними. Кожного разу, коли цей термін використовується, мабуть, описується мова програмування з дуже обмеженою лексикою, в основному використовується для створення візуального чи звукового зображення. Може бути важко бачити XML як щось програмування, але якщо ви подивитесь на розмітку Man або TexInfo, ви побачите, що "спеціальні" символи - це фактично вказівки перекладача.

Можна також дати "програмування" інтерпретації мови XML, що могло б виглядати так:

< := put interpreter in the reading node mode
! := if reading node, start CData/Comment mode
     else if not in read text mode, signal error
-- := if in start CData/Comment mode, start comment
      else if in comment, put in end comment mode
      else if in end comment mode, signal error
...

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


1

Усі три концепції дещо перетинаються, тож ви можете отримати нескінченні аргументи, чи XSLT є мовою програмування, чи Python - це мовою сценаріїв чи ні.

Мова розмітки - це мова, яка представляє структуровані дані в текстовому форматі , HTML є найбільш відомим, але є численні формати різного призначення, такі як SVG для графіки, WSDL для опису інтерфейсів веб-служб, resx для відновлення файлів у. сітка тощо. Основне правило полягає в тому, що мова розмітки не описує процес чи алгоритм (як це робить мова програмування), а є чистою інформацією. Але це також фундаментальне CS розуміння , що єнемає принципової різниці між кодом і даними. Деякі мови розмітки, такі як XSLT, мають петлі та умови, як "реальна" мова програмування, а деякі мови програмування, як Prolog, майже чисті дані без процесу, зазначеного в коді. А Лісп настільки розмиває рядок, що трактує власний код як структурований формат даних.

Щодо різниці між мовою програмування та мовою сценаріїв , то це історичне розмежування, яке сьогодні майже застаріло. За старих часів ми складали автономні програми, написані в скажімо С, а потім у нас були мови сценаріїв, такі як скажімо сценарії оболонки або Word Basic, які були інтерпретовані та розроблені для маніпулювання іншими програмами та інструментами. Сьогодні лінія досить розмита з великою кількістю середини, оскільки ми маємо різні рівні компіляції та інтерпретації (компіляція байт-кодів, JIT-компіляція тощо) та різні API, незалежні від мови. Тож відмінність не така корисна.


0

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

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

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

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


4
Мови ніколи не складаються та не тлумачаться. Мови просто є . Компіляція та інтерпретація - риси компілятора чи інтерпретатора (да!), Використовувані для реалізації мови. Терміни "складена мова" або "інтерпретована мова" навіть не мають сенсу, вони належать до різних рівнів абстракції. Якби Englisch була набраною мовою, "компільована мова" була б TypeError! Кожна мова може бути реалізована перекладачем, кожна мова може бути реалізована компілятором. Можна навіть автоматично створити компілятор з перекладача і навпаки.
Йорг W Міттаг

@ JörgWMittag Це правда, що жодна мова не є власно складеною або інтерпретованою. Але часто існують умовні положення про те, як це зазвичай виконується, про що я тут головним чином маю на увазі.
П'єр Андерссон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.