Виразна сила визначається Вікіпедією як:
Давайте переглянемо цю сторінку. Одне з перших речей, що слід зазначити, це те, що він говорить "мова", а не "мова програмування", і більшість його прикладів не є мовами програмування, наприклад, перший приклад - порівняння OWL2 EL та OWL2 RL, які є обома онтологіями мови.
Можна застосувати цю концепцію до мов програмування, але також до мов програмування, мов розмітки, мов запитів, мовних таблиць візуальних стилів, регулярних виразів (і всіх регулярних мов, до яких вони посилаються) тощо. Можна навіть посилатися на виразну силу природних мов, таких як англійська, що часто робиться дуже неофіційно, але з більшою серйозністю при розгляді проблем, пов'язаних з обробкою природних мов.
Чи "ідеї" стосуються речей (операцій, структур, алгоритмів тощо), які ми можемо передавати машині? Або йдеться про «людські» поняття, які можна захопити та донести мовою до інших людей?
Він посилається на те, що може бути виражено цією мовою, розглядається суто як річ сама по собі.
Наприклад, (я буду використовувати javas у всьому світі для моїх прикладів, оскільки ваше запитання вказує на те, що його є однією з мов, які ви знаєте) врахуйте заяву javascript:
var x = 3 + 4;
Це означає, що обчислюється сума значень 3 і 4 і значення, пов'язане з міткою, x
у межах заданої області простору імен.
Якби ми знищили всі комп'ютери у світі і написали цей код на аркуші паперу, залишилося б, що в JavaScript він все ще мав таке саме значення; ми б не змогли запустити такий код ні на чому, але абстрактне визначення мови - це все-таки те, про що ми могли б говорити.
Це може здатися педантичним, але насправді досить важливо, що мови - це речі, про які можна міркувати абстрактно без врахування реальних комп'ютерів. З одного боку, люди, які міркують про теоретичні моменти комп’ютерних мов, які ще не були здійсненні на практиці, - це одна з речей, яка дістала нас до того, де ми сьогодні є; комп’ютери потребують інформатики, але інформатиці не потрібні комп'ютери, просто ідея обчислення.
Звичайно, ми використовуємо комп’ютери в реальному світі, і в наші дні існує чимало людей, які ними користуються на практиці, а не кілька фахівців, які обговорюють їх теоретично. Сторінка, на яку ви пов’язали, говорить:
Термін експресивна сила може використовуватися з діапазоном значень. Це може означати міру ідей, виражених цією мовою:
Перше чуття домінує в областях математики та логіки, які стосуються формального опису мов та їх значення, таких як формальна теорія мови, математична логіка та алгебра процесу.
У неофіційних дискусіях термін часто стосується другого сенсу, або обох. Це часто трапляється при обговоренні мов програмування. Докладено зусиль для формалізації цих неформальних вживань цього терміна
З цих двох застосувань терміна, практичний вплив першого стосується виключно того, що можна передати комп'ютеру.
Друга стосується більшої міри людського розуміння і в читанні, і в письмі, хоча ступінь, в якому він це робить, сильно відрізняється між використанням, оскільки вони неформальні і як такі не є чітко визначеними.
Наприклад, якщо ми взяли таку мову, як JavaScript, і наклали дивне обмеження на імена змінних, наприклад, змінна повинна бути 8-значним числом, перед яким підкреслюється відповідність /^_[0-9]{8}$/
, чи втратимо ми виразну силу?
За формальним визначенням ми не втратили експресивної сили: нас обмежено 100 000 000 змінних, але якщо нам це дійсно потрібно, ми могли б обійти це, створивши об'єкти, щоб містити більше змінних у новоствореному просторі імен. Оскільки будь-яка програма, написана на Javascript сьогодні, може бути переписана в цій новій формі, тому вони однаково виразні.
За неофіційним визначенням, ми втратили деякі, але скільки залежить від того, наскільки неформальні ми знаходимось, і це буде різнитися, тому що ви знову не можете сказати, що є "правилом" щодо неформального використання. Можна сказати, що ми втратили невелику кількість, тому що програми з більш ніж 100 000 000 змінних в одному просторі імен повинні бути переписані поза простою заміною. Ще більше неофіційне використання знову стосувалося б розумового впливу таких незмінно змінних імен на людину всебічно.
Варто також зазначити, що люди неофіційно розглядатимуть речі, які зовсім не є частиною мови. Розглянемо зміни Javascript від його створення до сьогодні.
За самим формальним визначенням, виразність була майже незмінною; Зрештою, із Тюрінга це було повніше.
Більш неофіційним визначенням він став значно виразнішим у певних речах, таких як маніпулювання масивом, обробка винятків та (можливо, найбільше) включення регулярних виразів. Вони не роблять нічого, чого раніше не можна було зробити в JavaScript, хоча вони часто можуть робити щось за кілька рядків і підсекундний час виконання, який би зайняв кілобайт коду, щоб записати в javascript1.0 і тривалий час запустити.
Набагато більш неофіційне визначення знову - зміна від першого використання JavaScript у браузерах (можливість змінити значення входів форми, document.write
тоді як сторінка спочатку розбирається і переміщується на нове місце або повертається назад або вперед в історію, але досить набагато нічого іншого), що сьогодні (здатне змінити практично все на сторінці, в тому числі на основі даних з викликів сервера) абсолютно величезне, хоча більшість це стосується не JavaScript, а об'єктних моделей та API доступна, а не мова (наприклад, vbscript в IE виграв однаково з цих змін).
На мій погляд, останнє використання настільки неформальне, що насправді не є коректним, але це проблема неформальних визначень.
За формальним визначенням він насправді взагалі не став більш виразним.