Специфікація мови програмування (або стандарт чи визначення) є документацією, яка визначає мову програмування, так, щоб користувачі та [en] могли дійти згоди, що означають програми на цій мові. Специфікації, як правило, деталізовані та формальні, і в першу чергу використовуються розробниками, при цьому користувачі посилаються на них у разі неоднозначності; специфікації мови часто критикуються користувачами, наприклад, через складність. Відповідна документація включає в себе [en], яке призначено виключно для користувачів, і обґрунтування мови програмування та пояснює, чому специфікація написана так як є; вони, як правило, більш неформальні, ніж специфікація.
Стандартування
Не всі основні мови програмування мають специфікації, і мови можуть існувати і бути популярними протягом десятиліть без специфікації. Мова може мати одну або більше реалізацій, чия поведінка діє де-факто як стандарт, без того, щоб ця поведінка документувалася в специфікації. Perl (після Perl 5) є відомим прикладом мови без специфікації, тоді як PHP отримав специфікацію лише в 2014 році, після 20 років використання. Мова може бути спочатку реалізована, а потім отримати специфікацію, або спочатку отримати специфікацію, і вже потім реалізована, або ці два процеси можуть відбуватись одночасно, що є поширеною практикою. Це пояснюється тим, що реалізації та специфікації забезпечують перевірку один одного: написання специфікації вимагає точного зазначення поведінки реалізації, а реалізація перевіряє, що специфікація можлива, практична та послідовна. Написання специфікації перед реалізацією здебільшого не відбувалось з часів ALGOL 68 (1968) через несподівані труднощі в реалізації, коли реалізація потім відкладалась. Проте, мови все ще іноді реалізуються і набувають популярності без формальної специфікації: реалізація є необхідною для використання, тоді як специфікація є бажаною, але не істотною.
Алгол 68 був першою (і, можливо, однією з останніх) мовою, яка була повністю формально визначена, перш ніж вона була реалізована | ||
— [en], |
Форми
Специфікація мови програмування може мати декілька форм, включаючи наступні:
- Явне визначення синтаксису і семантики мови. Хоча синтаксис зазвичай визначається з використанням формальної граматики, семантичні визначення можуть бути написані природною мовою (наприклад, підхід, прийнятий для мови С), або формальної семантики (наприклад, Standard ML та Scheme специфікації). Відомим прикладом є мова С, яка набула популярності без формальної специфікації, натомість, вона була описана у книзі Мова програмування C (1978), і лише набагато пізніше формально стандартизована в (ANSI C) (1989).
- Опис поведінки компілятора (іноді званий «транслятор») для мови (наприклад, мова і Fortran). Синтаксис і семантика мови повинні виводитись з цього опису, який може бути написаний природною або формальною мовою.
- [en], іноді написана мовою, що задається (наприклад, Prolog). Синтаксис і семантика мови виражені у поведінці еталонної реалізації.
Синтаксис
Синтаксис мови програмування зазвичай описується за допомогою комбінації наступних двох компонентів:
- регулярний вираз, що описує його лексема
- контекстно-вільна граматика, яка описує, як лексеми можуть бути об'єднані, щоб сформувати синтаксично правильну програму.
Семантика
Формулювання суворої семантики великої, складної, практичної мови програмування є складним завданням навіть для досвідчених фахівців, і кінцева специфікація може бути важкою для розуміння для будь-кого, окрім експертів. Нижче наведено деякі способи опису семантики мови програмування; всі мови використовують принаймні один з цих методів опису, а деякі мови поєднують декілька
- Природна мова: Опис природною мовою людини.
- Формальна семантика: Математичний опис.
- [en]: Опис за допомогою комп'ютерної програми.
- [en]: Опис за допомогою прикладів програм та їх очікуваної поведінки. Хоча деякі специфікації мов створюються за допомогою наборів тестів, на еволюцію деяких специфікацій мови вплинула семантика набору тестів (наприклад, у минулому специфікація Ada була змінена, у відповідності до поведінки [en] (ACATS)).
Природна мова
Найбільш широко використовувані мови задаються з використанням природних мовних описів їх семантики. Цей опис зазвичай має форму довідника мови. Ці посібники можуть мати сотні сторінок, наприклад, паперова версія довідника «Специфікація мови Java, 3-е видання» містить 596 сторінок.
Неточність природної мови як засобу для опису семантики мови програмування може призвести до проблем з інтерпретацією специфікації. Наприклад, семантики потоків у Java були описані англійською мовою, згодом було виявлено, що специфікація не надає адекватного керівництва по їх реалізації для користувачів.
Формальна семантика
Формальна семантика обґрунтована математичним апаратом. Як наслідок, вони можуть бути більш точними і менш неоднозначними, ніж семантики, описані природною мовою. Однак додаткові описи семантики зроблені природною мовою часто додаються для полегшення розуміння формальних визначень. Наприклад, стандарт ISO для [en] містить як формальне, так і визначення природною мовою на сусідніх сторінках.
Мови програмування, чия семантика описується формально, можуть скористатися багатьма перевагами. Наприклад:
- Формальна семантика дає можливість математичних доказів коректності програми;
- Формальна семантика полегшує розробку системи типізації, і докази доцільності цих систем типізації;
- Формальна семантика може встановлювати однозначні і єдині стандарти для реалізації мови.
Автоматична підтримка інструментів може допомогти реалізувати деякі з цих переваг. Наприклад, автоматизоване доведення теорем або перевірка теорем може збільшити впевненість програміста (або розробника мови) у правильності доведень щодо програми (або самої мови). Потужність і масштабованість цих інструментів значно варіюються: повна формальна верифікація є затратною по обчисленням, зазвичай, не масштабується для програм, розмір яких перевищує декілька сотень рядків, і може вимагати участі програміста; більш легкі інструменти, такі як перевірка моделі вимагають менших ресурсів і використовуються для програм, що містять десятки тисяч рядків; багато компіляторів застосовують статичні системи типізації до будь-якої програми, яку вони компілюють.
Еталонна реалізація
Еталонна реалізація є єдиною реалізацією мови програмування, яка позначається як авторитетна. Поведінка цієї реалізації проводиться для визначення належної поведінки програми написаній на цій мові. Цей підхід має кілька привабливих особливостей. По-перше, вона точна, і тому не вимагає людської інтерпретації: суперечки щодо сенсу програми можуть бути вирішені просто шляхом виконання програми на еталонної реалізації (за умови, що реалізація веде себе детерміновано для цієї програми).
З іншого боку, визначення семантики мови за допомогою еталонної реалізації також має ряд потенційних недоліків. Головне з них полягає в тому, що воно обмежує обмеження еталонної реалізації з властивостями мови. Наприклад, якщо в еталонній реалізації є помилка, то цю помилку слід вважати авторитетною поведінкою. Іншим недоліком є те, що програми, написані на цій мові, можуть покладатися на примхи в еталонної реалізації, перешкоджаючи портативності в різних реалізаціях.
Тим не менш, кілька мов успішно застосували підхід до базової реалізації. Наприклад, інтерпретатор Perl вважається таким, що визначає авторитетну поведінку програм Perl. У випадку з Perl, модель з відкритим вихідним кодом поширення програмного забезпечення сприяла тому, що ніхто ніколи не створював іншу реалізацію мови, тому питання, пов'язані з використанням еталонної реалізації для визначення семантики мови, є спірними.
Набір тестів
Визначення семантики мови програмування з точки зору тестового набору передбачає написання декількох прикладних програм мовою, а потім опис того, як ці програми повинні поводитися — можливо, записуючи їх правильні виходові значення. Програми, а також їхні виходові значення, називаються «набором тестів» мови. Будь-яка правильна реалізація мови повинна виробляти точні виходові дані на тестових програмах.
Головною перевагою такого підходу до семантичного опису є те, що легко визначити, чи передає мова реалізація набору тестів. Користувач може просто виконати всі програми в тестовому наборі і порівняти виходи з бажаними виходами. Проте під час використання самого підходу тестовий набір має і великі недоліки. Наприклад, користувачі хочуть запускати власні програми, які не є частиною тестового набору. Дійсно, реалізація мови, яка могла б «тільки» запускати програми у своєму тестовому наборі, була б в основному марною. Але набір тестів сам по собі не описує, як реалізація мови повинна поводитися з будь-якою програмою, яка не знаходиться в тестовому наборі; визначення того, що поведінка вимагає екстраполяції з боку виконавця, різні виконавці можуть не погодитися. Крім того, важко використовувати набір тестів для тестування поведінки, яке призначено або дозволено бути [en].
Тому, у звичайній практиці, набори тестів використовуються тільки в поєднанні з однією з інших технічних умов специфікації мови, таких як опис природною мовою або посилання на еталонну реалізацію.
Посилання
Специфікації мов програмування
Приклади специфікацій мов програмування:
- Специфікації написані здебільшого формально (математично):
- The Definition of Standard ML, revised edition [ 16 лютого 2019 у Wayback Machine.] — формальне визначення в стилі операційної семантики.
- Scheme R5RS [ 18 лютого 2005 у Wayback Machine.] — формальне визначення в стилі денотаційної семантики
- Специфікації написані природною мовою:
- Algol 60 report [ 25 червня 2007 у Wayback Machine.]
- Ada 95 reference manual [ 23 березня 2019 у Wayback Machine.]
- Java language specification [ 26 лютого 2009 у Wayback Machine.]
- Draft C++ standard [ 18 грудня 2018 у Wayback Machine.]
- Специфікації з використанням набору тестів:
Примітки
- Announcing a specification for PHP [ 13 липня 2017 у Wayback Machine.], 30 липня 2014, Joel Marcey
- . Архів оригіналу за 10 серпня 2006. Процитовано 15 вересня 2006.
- Milner, R.; M. Tofte; R. Harper; D. MacQueen (1997). The Definition of Standard ML (Revised). MIT Press. ISBN .
- Kelsey, Richard; William Clinger; Jonathan Rees (February 1998). . Revised5 Report on the Algorithmic Language Scheme. Архів оригіналу за 6 липня 2006. Процитовано 9 червня 2006.
- Jones, D. (2008). (PDF). Архів оригіналу (PDF) за 28 листопада 2018. Процитовано 23 червня 2012.
- William Pugh. The Java Memory Model is Fatally Flawed. Concurrency: Practice and Experience 12(6):445-455, August 2000
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Specifikaciya movi programuvannya abo standart chi viznachennya ye dokumentaciyeyu yaka viznachaye movu programuvannya tak shob koristuvachi ta en mogli dijti zgodi sho oznachayut programi na cij movi Specifikaciyi yak pravilo detalizovani ta formalni i v pershu chergu vikoristovuyutsya rozrobnikami pri comu koristuvachi posilayutsya na nih u razi neodnoznachnosti specifikaciyi movi C chasto kritikuyutsya koristuvachami napriklad cherez skladnist Vidpovidna dokumentaciya vklyuchaye v sebe en yake priznacheno viklyuchno dlya koristuvachiv i obgruntuvannya movi programuvannya ta poyasnyuye chomu specifikaciya napisana tak yak ye voni yak pravilo bilsh neformalni nizh specifikaciya StandartuvannyaNe vsi osnovni movi programuvannya mayut specifikaciyi i movi mozhut isnuvati i buti populyarnimi protyagom desyatilit bez specifikaciyi Mova mozhe mati odnu abo bilshe realizacij chiya povedinka diye de fakto yak standart bez togo shob cya povedinka dokumentuvalasya v specifikaciyi Perl pislya Perl 5 ye vidomim prikladom movi bez specifikaciyi todi yak PHP otrimav specifikaciyu lishe v 2014 roci pislya 20 rokiv vikoristannya Mova mozhe buti spochatku realizovana a potim otrimati specifikaciyu abo spochatku otrimati specifikaciyu i vzhe potim realizovana abo ci dva procesi mozhut vidbuvatis odnochasno sho ye poshirenoyu praktikoyu Ce poyasnyuyetsya tim sho realizaciyi ta specifikaciyi zabezpechuyut perevirku odin odnogo napisannya specifikaciyi vimagaye tochnogo zaznachennya povedinki realizaciyi a realizaciya pereviryaye sho specifikaciya mozhliva praktichna ta poslidovna Napisannya specifikaciyi pered realizaciyeyu zdebilshogo ne vidbuvalos z chasiv ALGOL 68 1968 cherez nespodivani trudnoshi v realizaciyi koli realizaciya potim vidkladalas Prote movi vse she inodi realizuyutsya i nabuvayut populyarnosti bez formalnoyi specifikaciyi realizaciya ye neobhidnoyu dlya vikoristannya todi yak specifikaciya ye bazhanoyu ale ne istotnoyu Algol 68 buv pershoyu i mozhlivo odniyeyu z ostannih movoyu yaka bula povnistyu formalno viznachena persh nizh vona bula realizovana en FormiSpecifikaciya movi programuvannya mozhe mati dekilka form vklyuchayuchi nastupni Yavne viznachennya sintaksisu i semantiki movi Hocha sintaksis zazvichaj viznachayetsya z vikoristannyam formalnoyi gramatiki semantichni viznachennya mozhut buti napisani prirodnoyu movoyu napriklad pidhid prijnyatij dlya movi S abo formalnoyi semantiki napriklad Standard ML ta Scheme specifikaciyi Vidomim prikladom ye mova S yaka nabula populyarnosti bez formalnoyi specifikaciyi natomist vona bula opisana u knizi Mova programuvannya C 1978 i lishe nabagato piznishe formalno standartizovana v ANSI C 1989 Opis povedinki kompilyatora inodi zvanij translyator dlya movi napriklad mova C i Fortran Sintaksis i semantika movi povinni vivoditis z cogo opisu yakij mozhe buti napisanij prirodnoyu abo formalnoyu movoyu en inodi napisana movoyu sho zadayetsya napriklad Prolog Sintaksis i semantika movi virazheni u povedinci etalonnoyi realizaciyi SintaksisSintaksis movi programuvannya zazvichaj opisuyetsya za dopomogoyu kombinaciyi nastupnih dvoh komponentiv regulyarnij viraz sho opisuye jogo leksema kontekstno vilna gramatika yaka opisuye yak leksemi mozhut buti ob yednani shob sformuvati sintaksichno pravilnu programu SemantikaFormulyuvannya suvoroyi semantiki velikoyi skladnoyi praktichnoyi movi programuvannya ye skladnim zavdannyam navit dlya dosvidchenih fahivciv i kinceva specifikaciya mozhe buti vazhkoyu dlya rozuminnya dlya bud kogo okrim ekspertiv Nizhche navedeno deyaki sposobi opisu semantiki movi programuvannya vsi movi vikoristovuyut prinajmni odin z cih metodiv opisu a deyaki movi poyednuyut dekilka Prirodna mova Opis prirodnoyu movoyu lyudini Formalna semantika Matematichnij opis en Opis za dopomogoyu komp yuternoyi programi en Opis za dopomogoyu prikladiv program ta yih ochikuvanoyi povedinki Hocha deyaki specifikaciyi mov stvoryuyutsya za dopomogoyu naboriv testiv na evolyuciyu deyakih specifikacij movi vplinula semantika naboru testiv napriklad u minulomu specifikaciya Ada bula zminena u vidpovidnosti do povedinki en ACATS Prirodna mova Najbilsh shiroko vikoristovuvani movi zadayutsya z vikoristannyam prirodnih movnih opisiv yih semantiki Cej opis zazvichaj maye formu dovidnika movi Ci posibniki mozhut mati sotni storinok napriklad paperova versiya dovidnika Specifikaciya movi Java 3 e vidannya mistit 596 storinok Netochnist prirodnoyi movi yak zasobu dlya opisu semantiki movi programuvannya mozhe prizvesti do problem z interpretaciyeyu specifikaciyi Napriklad semantiki potokiv u Java buli opisani anglijskoyu movoyu zgodom bulo viyavleno sho specifikaciya ne nadaye adekvatnogo kerivnictva po yih realizaciyi dlya koristuvachiv Formalna semantika Dokladnishe Formalna semantika mov programuvannya Formalna semantika obgruntovana matematichnim aparatom Yak naslidok voni mozhut buti bilsh tochnimi i mensh neodnoznachnimi nizh semantiki opisani prirodnoyu movoyu Odnak dodatkovi opisi semantiki zrobleni prirodnoyu movoyu chasto dodayutsya dlya polegshennya rozuminnya formalnih viznachen Napriklad standart ISO dlya en mistit yak formalne tak i viznachennya prirodnoyu movoyu na susidnih storinkah Movi programuvannya chiya semantika opisuyetsya formalno mozhut skoristatisya bagatma perevagami Napriklad Formalna semantika daye mozhlivist matematichnih dokaziv korektnosti programi Formalna semantika polegshuye rozrobku sistemi tipizaciyi i dokazi docilnosti cih sistem tipizaciyi Formalna semantika mozhe vstanovlyuvati odnoznachni i yedini standarti dlya realizaciyi movi Avtomatichna pidtrimka instrumentiv mozhe dopomogti realizuvati deyaki z cih perevag Napriklad avtomatizovane dovedennya teorem abo perevirka teorem mozhe zbilshiti vpevnenist programista abo rozrobnika movi u pravilnosti doveden shodo programi abo samoyi movi Potuzhnist i masshtabovanist cih instrumentiv znachno variyuyutsya povna formalna verifikaciya ye zatratnoyu po obchislennyam zazvichaj ne masshtabuyetsya dlya program rozmir yakih perevishuye dekilka soten ryadkiv i mozhe vimagati uchasti programista bilsh legki instrumenti taki yak perevirka modeli vimagayut menshih resursiv i vikoristovuyutsya dlya program sho mistyat desyatki tisyach ryadkiv bagato kompilyatoriv zastosovuyut statichni sistemi tipizaciyi do bud yakoyi programi yaku voni kompilyuyut Etalonna realizaciya Etalonna realizaciya ye yedinoyu realizaciyeyu movi programuvannya yaka poznachayetsya yak avtoritetna Povedinka ciyeyi realizaciyi provoditsya dlya viznachennya nalezhnoyi povedinki programi napisanij na cij movi Cej pidhid maye kilka privablivih osoblivostej Po pershe vona tochna i tomu ne vimagaye lyudskoyi interpretaciyi superechki shodo sensu programi mozhut buti virisheni prosto shlyahom vikonannya programi na etalonnoyi realizaciyi za umovi sho realizaciya vede sebe determinovano dlya ciyeyi programi Z inshogo boku viznachennya semantiki movi za dopomogoyu etalonnoyi realizaciyi takozh maye ryad potencijnih nedolikiv Golovne z nih polyagaye v tomu sho vono obmezhuye obmezhennya etalonnoyi realizaciyi z vlastivostyami movi Napriklad yaksho v etalonnij realizaciyi ye pomilka to cyu pomilku slid vvazhati avtoritetnoyu povedinkoyu Inshim nedolikom ye te sho programi napisani na cij movi mozhut pokladatisya na primhi v etalonnoyi realizaciyi pereshkodzhayuchi portativnosti v riznih realizaciyah Tim ne mensh kilka mov uspishno zastosuvali pidhid do bazovoyi realizaciyi Napriklad interpretator Perl vvazhayetsya takim sho viznachaye avtoritetnu povedinku program Perl U vipadku z Perl model z vidkritim vihidnim kodom poshirennya programnogo zabezpechennya spriyala tomu sho nihto nikoli ne stvoryuvav inshu realizaciyu movi tomu pitannya pov yazani z vikoristannyam etalonnoyi realizaciyi dlya viznachennya semantiki movi ye spirnimi Nabir testiv Viznachennya semantiki movi programuvannya z tochki zoru testovogo naboru peredbachaye napisannya dekilkoh prikladnih program movoyu a potim opis togo yak ci programi povinni povoditisya mozhlivo zapisuyuchi yih pravilni vihodovi znachennya Programi a takozh yihni vihodovi znachennya nazivayutsya naborom testiv movi Bud yaka pravilna realizaciya movi povinna viroblyati tochni vihodovi dani na testovih programah Golovnoyu perevagoyu takogo pidhodu do semantichnogo opisu ye te sho legko viznachiti chi peredaye mova realizaciya naboru testiv Koristuvach mozhe prosto vikonati vsi programi v testovomu nabori i porivnyati vihodi z bazhanimi vihodami Prote pid chas vikoristannya samogo pidhodu testovij nabir maye i veliki nedoliki Napriklad koristuvachi hochut zapuskati vlasni programi yaki ne ye chastinoyu testovogo naboru Dijsno realizaciya movi yaka mogla b tilki zapuskati programi u svoyemu testovomu nabori bula b v osnovnomu marnoyu Ale nabir testiv sam po sobi ne opisuye yak realizaciya movi povinna povoditisya z bud yakoyu programoyu yaka ne znahoditsya v testovomu nabori viznachennya togo sho povedinka vimagaye ekstrapolyaciyi z boku vikonavcya rizni vikonavci mozhut ne pogoditisya Krim togo vazhko vikoristovuvati nabir testiv dlya testuvannya povedinki yake priznacheno abo dozvoleno buti en Tomu u zvichajnij praktici nabori testiv vikoristovuyutsya tilki v poyednanni z odniyeyu z inshih tehnichnih umov specifikaciyi movi takih yak opis prirodnoyu movoyu abo posilannya na etalonnu realizaciyu PosilannyaSpecifikaciyi mov programuvannya Prikladi specifikacij mov programuvannya Specifikaciyi napisani zdebilshogo formalno matematichno The Definition of Standard ML revised edition 16 lyutogo 2019 u Wayback Machine formalne viznachennya v stili operacijnoyi semantiki Scheme R5RS 18 lyutogo 2005 u Wayback Machine formalne viznachennya v stili denotacijnoyi semantiki Specifikaciyi napisani prirodnoyu movoyu Algol 60 report 25 chervnya 2007 u Wayback Machine Ada 95 reference manual 23 bereznya 2019 u Wayback Machine Java language specification 26 lyutogo 2009 u Wayback Machine Draft C standard 18 grudnya 2018 u Wayback Machine Specifikaciyi z vikoristannyam naboru testiv PrimitkiAnnouncing a specification for PHP 13 lipnya 2017 u Wayback Machine 30 lipnya 2014 Joel Marcey Arhiv originalu za 10 serpnya 2006 Procitovano 15 veresnya 2006 Milner R M Tofte R Harper D MacQueen 1997 The Definition of Standard ML Revised MIT Press ISBN 0 262 63181 4 Kelsey Richard William Clinger Jonathan Rees February 1998 Revised5 Report on the Algorithmic Language Scheme Arhiv originalu za 6 lipnya 2006 Procitovano 9 chervnya 2006 Jones D 2008 PDF Arhiv originalu PDF za 28 listopada 2018 Procitovano 23 chervnya 2012 William Pugh The Java Memory Model is Fatally Flawed Concurrency Practice and Experience 12 6 445 455 August 2000