Немає реальної згоди, що характеризує денотаційну семантику (див. Також цю статтю), крім того, що вона повинна бути композиційною . Це означає, що якщо - це смислова функція, яка відображає програми за їх значенням, щось подібне повинно мати місце для всіх n -різних конструкторів програм f та всіх програм M 1 , ..., M n (неявно припускаючи, що добре введено):[[⋅]]nfM1Mn
[[f(M1,...,Mn)]]=trans(f)([[M1]],...,[[Mn]])
Тут - конструктор, відповідний f в семантичній області. Композиційність схожа на поняття гомоморфізму в алгебрі.trans(f)f
Оперативна семантика в цьому сенсі не композиційна. Історично денотаційна семантика була розроблена частково тому, що оперативна семантика не була композиційною. Після прориву Д. Скотта проривно-теоретична денотаційна семантика -калькуляції, більшість денотаційних семантики використовувались як теоретико-порядкові. Я гадаю, що, окрім чистого інтелектуального інтересу, денотаційна семантика була в основному винайдена, оскільки в той час (1960-ті роки):λ
- Раніше було важко міркувати про оперативну семантику.
- Раніше було важко надати аксіоматичну семантику нетривіальним мовам.
Частина проблеми полягала в тому, що поняття рівності програм було не так добре зрозумілим, як зараз. Я заперечую, що обидві проблеми були значно покращені (1), наприклад, методами, заснованими на бізіміляції, що випливають з теорії процесів (що можна розглядати як специфічну форму оперативної семантики) або, наприклад, Пітс працює над оперативною семантикою та програмою еквівалентність та (2) розвитком, наприклад, логіки поділу або логіки Хоара, отриманих у вигляді типізованих версій логіки Хеннесі-Мілнера через вбудовування мови програмування у введені π-обчислення. Зауважимо, що логіка програми (= аксіоматична семантика) теж є композиційною.
Інший спосіб погляду на денотаційну семантику полягає в тому, що існує багато мов програмування, і всі вони виглядають подібними, тому, можливо, ми можемо знайти просту, але універсальну мета-мову та композиційно зіставити всі мови програмування з цією мета- мову. У 1960-х роках вважалося, що певний тип -калькуляції - це мета-мова. Малюнок може сказати більше 1000 слів:λ
У чому перевага такого підходу? Можливо, має сенс подивитися на це з економічної ПОВ. Якщо ми хочемо довести щось цікаве про клас об’єктної програми, у нас є два варіанти.
Доведіть це безпосередньо на об’єктному рівні.
Доведіть, що переклад на метарівень (і назад) 'зберігає' властивість, а потім доведіть його на метарівні, а потім висуньте результат назад на рівень об'єкта.
Сукупна вартість останнього, ймовірно, вища, ніж вартість першої, але вартість доказування перекладу може бути амортизована протягом усіх майбутніх цілей, в той час як вартість, що підтверджує властивість для метарівню, значно менша, ніж вартість доказування. на об’єктному рівні.
Оригінальний теоретико-порядковий підхід до денотаційної семантики до цих пір не виправдав цієї обіцянки, оскільки складні мовні особливості, такі як орієнтація на об'єкти, одночасність та розподілене обчислення, ще не отримали точної порядково-теоретичної семантики. Під "точною" я маю на увазі семантику, яка відповідає природному операційній семантиці таких мов.
Чи варто вивчити денотаційну семантику? Якщо ви маєте на увазі теоретико-порядкові підходи до денотаційної семантики, то, ймовірно, ні, якщо ви не хочете працювати в теорії мов програмування і не потребуєте розуміння старих робіт. Ще одна причина вивчення теоретико-порядкових підходів до денотаційної семантики - краса цього підходу.