Спецификация языков программирования

Спецификация (стандарт, определение) языка программирования — это предмет документации, который определяет язык программирования, чтобы пользователи и разработчики языка могли согласовывать, что означают программы на данном языке. Спецификации обычно являются подробными и формальными и в основном используются разработчиками языка, в то время как пользователи обращаются к ним в случае двусмысленности: например, спецификация языка C++ часто цитируется пользователями из-за сложности. Сопутствующая документация включает , который специально предназначен для пользователей, и логическое обоснование языка программирования, которое объясняет, почему спецификация написана именно так; последние обычно более неформальны, чем спецификации.

Стандартизация 
Не все основные языки программирования имеют спецификации; языки могут существовать и быть популярными в течение десятилетий без спецификации. Язык может иметь одну или несколько реализаций, поведение которых де-факто является стандартом, но при этом данное поведение не документировано в спецификации. Perl (Perl 5) — известный пример языка без спецификации, тогда как PHP получил спецификацию только в 2014 году, после использования в течение 20 лет.

Язык может быть реализован, а затем стандартизован, или стандартизован, а после этого реализован, или же два этих процесса могут развиваться вместе, что является в настоящее время обычной практикой. Это связано с тем, что реализация и спецификация обеспечивают проверку друг друга: для написания спецификации требуется точно указать поведение реализации, а реализация проверяет, что спецификация является возможной, целесообразна и последовательна.

Написания спецификации до реализации зачастую стали избегать после Алгол 68 (1968 г.), из-за неожиданных трудностей в реализации, когда реализация была отложена. Тем не менее, языки всё ещё время от времени используются и приобретают популярность без формальной спецификации: реализация языка необходима для его использования, в то время как спецификация является желательной, но не необходимой.

Формы 

Спецификация языков программирования может принимать несколько форм, среди которых:

 явное определение синтаксиса и семантики языка.  Хотя синтаксис обычно задается с использованием формальной грамматики, семантические определения могут быть написаны на естественном языке (например, подход, принятый для языка Си) или в формальной семантике (например, спецификации Standard ML и Scheme. Примечательным примером является язык Си, который приобрёл популярность без формальной спецификации, а был описан вместо этого в части книги, «Язык программирования Си» (1978 г.), и был формально стандартизован намного позже в ANSI C (1989 г.);

 описание поведения компилятора (иногда называемого «транслятором») для языка (например, языки C++ и Фортран). Синтаксис и семантика языка выводятся из этого описания, которое может быть написано на естественном или формальном языке;

 эталонная реализация, иногда написанная на указанном языке (например, Пролог). Синтаксис и семантика языка подробно ясны из поведения реализации модели.

Синтаксис 
Синтаксис языка программирования обычно описывается с использованием комбинации следующих двух компонентов:

 регулярное выражение, описывающее его лексемы (распознанные группы входной последовательности символов), и

 контекстно-свободная грамматика, которая описывает, как лексемы могут быть скомбинированы для формирования синтаксически правильной программы.

Семантика 
Формулирование строгой семантики большого, сложного, практичного языка программирования является сложной задачей даже для опытных специалистов, и получающаяся в результате спецификация может быть трудной для понимания всех, кроме экспертов. Ниже приведены некоторые из способов описания семантики языка программирования; все языки используют по крайней мере один из этих методов описания, а некоторые языки объединяют более одного:

 естественный язык: описание естественным человеческим языком;

 формальная семантика: математическое описание;

 эталонная реализация: описание посредством компьютерной программы;

 : описание при помощи примеров программ и их ожидаемого поведения. Хотя лишь несколько спецификаций языка начинались с этой формы спецификации, семантика набора тестов влияет на эволюцию некоторых спецификаций языка; например, в прошлом спецификация Ада была изменена в соответствии с поведением Тестового набора для оценки соответствия Ада (Ada Conformity Assessment Test Suite).

Примечания 

Языки программирования