Jump to content

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

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

Стандартизация [ править ]

Не все основные языки программирования имеют спецификации, а языки могут существовать и быть популярными десятилетиями без спецификации. Язык может иметь одну или несколько реализаций, поведение которых действует как стандарт де-факто , причем это поведение не документируется в спецификации. Perl (до Perl 5 ) является ярким примером языка без спецификации, тогда как PHP был указан только в 2014 году, после 20 лет использования. [1] Язык может быть реализован, а затем указан, или указан, а затем реализован, или они могут развиваться вместе, что сегодня является обычной практикой. Это связано с тем, что реализации и спецификации обеспечивают проверку друг друга: написание спецификации требует точного указания поведения реализации, а реализация проверяет, что спецификация возможна, практична и непротиворечива. (1968) в основном избегали написания спецификации до реализации Начиная с АЛГОЛа 68 из-за неожиданных трудностей в реализации, когда реализация откладывается. Однако языки все еще иногда реализуются и набирают популярность без формальной спецификации: реализация необходима для использования, тогда как спецификация желательна, но не обязательна (неформально, «код говорит»).

АЛГОЛ 68 был первым (и, возможно, одним из последних) основных языков, для которого было дано полное формальное определение до его реализации.

Формы [ править ]

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

  • Явное определение синтаксиса и семантики языка . Хотя синтаксис обычно задается с использованием формальной грамматики , семантические определения могут быть написаны на естественном языке (например, подход, использованный для языка C ) или формальной семантики (например, стандарт ML). [3] и схема [4] характеристики). Ярким примером является язык C, который приобрел популярность без формальной спецификации, вместо этого был описан как часть книги « Язык программирования C» (1978 г.) и лишь намного позже был официально стандартизирован в ANSI C (1989 г.).
  • Описание поведения компилятора ( иногда называемого «транслятором») для языка (например, языка C++ и Fortran ). Синтаксис и семантика языка должны быть выведены из этого описания, которое может быть написано на естественном или формальном языке.
  • модели Пролог Реализация , иногда написанная на указанном языке (например, ) . Синтаксис и семантика языка явны в поведении реализации модели.

Синтаксис [ править ]

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

  • Определенный набор символов (непустой, конечный набор символов)
  • Регулярные выражения, описывающие его лексемы (для токенизации по алфавиту)
  • Бесконтекстная грамматика , описывающая, как можно комбинировать лексемы для формирования правильной программы.

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

Семантика [ править ]

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

Естественный язык [ править ]

Наиболее широко используемые языки определяются с использованием описаний их семантики на естественном языке. Это описание обычно принимает форму справочного руководства по языку. Эти руководства могут занимать сотни страниц, например, печатная версия «Спецификации языка Java», 3-е изд. объем 596 страниц.

Неточность естественного языка как средства описания семантики языка программирования может привести к проблемам с интерпретацией спецификации. Например, семантика Java потоков была определена на английском языке, и позже выяснилось, что спецификация не дает адекватных указаний для разработчиков. [6]

Формальная семантика [ править ]

Формальная семантика основана на математике. В результате они могут быть более точными и менее двусмысленными, чем семантика, заданная на естественном языке. Однако для облегчения понимания формальных определений часто включаются дополнительные описания семантики на естественном языке. Например, стандарт ISO для Модулы-2 содержит как формальное, так и определение естественного языка на противоположных страницах.

Языки программирования, семантика которых описана формально, могут принести много преимуществ. Например:

  • Формальная семантика позволяет математически доказать корректность программы;
  • Формальная семантика облегчает проектирование систем типов и доказательство правильности этих систем типов;
  • Формальная семантика может установить однозначные и единые стандарты для реализации языка.

Автоматическая поддержка инструментов может помочь реализовать некоторые из этих преимуществ. Например, автоматизированное средство доказательства или проверки теорем может повысить уверенность программиста (или разработчика языка) в правильности доказательств программ (или самого языка). Мощность и масштабируемость этих инструментов широко варьируются: полная формальная проверка требует больших вычислительных ресурсов и редко выходит за рамки программ, содержащих несколько сотен строк. [ нужна ссылка ] и может потребоваться значительная ручная помощь программиста; более легкие инструменты, такие как средства проверки моделей, требуют меньше ресурсов и используются в программах, содержащих десятки тысяч строк; многие компиляторы применяют статические проверки типов к любой компилируемой программе.

Эталонная реализация [ править ]

Эталонная реализация — это отдельная реализация языка программирования, обозначенная как авторитетная. Считается, что поведение этой реализации определяет правильное поведение программы, написанной на этом языке. Этот подход имеет несколько привлекательных свойств. Во-первых, он точен и не требует человеческой интерпретации: споры относительно смысла программы могут быть разрешены простым выполнением программы в эталонной реализации (при условии, что реализация ведет себя детерминировано для этой программы).

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

Тем не менее, в нескольких языках успешно используется эталонный подход к реализации. Например, Perl считается, что интерпретатор определяет авторитетное поведение программ Perl. В случае Perl модель распространения программного обеспечения с открытым исходным кодом способствовала тому, что никто никогда не создавал другой реализации языка, поэтому вопросы, связанные с использованием эталонной реализации для определения семантики языка, являются спорными.

Набор тестов [ править ]

Определение семантики языка программирования с помощью набора тестов включает в себя написание ряда примеров программ на этом языке, а затем описание того, как эти программы должны вести себя — возможно, путем записи их правильных результатов. Программы вместе с их результатами называются «набором тестов» языка. Любая правильная реализация языка должна затем давать точно правильные выходные данные в программах набора тестов.

Главное преимущество этого подхода к семантическому описанию состоит в том, что легко определить, проходит ли языковая реализация набор тестов. Пользователь может просто выполнить все программы из набора тестов и сравнить результаты с желаемыми результатами. Однако, когда используется сам по себе подход с набором тестов, он также имеет серьезные недостатки. Например, пользователи хотят запускать свои собственные программы, не входящие в набор тестов; действительно, реализация языка, которая могла бы запускать только программы из своего набора тестов, была бы в значительной степени бесполезной. Но набор тестов сам по себе не описывает, как реализация языка должна вести себя в любой программе, не входящей в набор тестов; определение этого поведения требует некоторой экстраполяции со стороны разработчика, и разные разработчики могут не согласиться. Кроме того, сложно использовать набор тестов для проверки поведения, которое задумано или разрешено быть недетерминированным .

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

См. также [ править ]

Внешние ссылки [ править ]

Языковые характеристики [ править ]

Несколько примеров официальных или проектных спецификаций языка:

Примечания [ править ]

  1. ^ Анонс спецификации PHP , 30 июля 2014 г., Джоэл Марси.
  2. ^ «Краткая история Алгола68» . Архивировано из оригинала 10 августа 2006 года . Проверено 15 сентября 2006 г.
  3. ^ Милнер, Р .; М. Тофте ; Р. Харпер ; Д. МакКуин (1997). Определение стандарта ОД (пересмотренного) . МТИ Пресс. ISBN  0-262-63181-4 .
  4. ^ Келси, Ричард; Уильям Клингер; Джонатан Рис (февраль 1998 г.). «Раздел 7.2 Формальная семантика» . Пересмотренный 5 Отчет об алгоритмической языковой схеме . Проверено 9 июня 2006 г.
  5. ^ Джонс, Д. (2008). Формы спецификации языка (PDF) . Проверено 23 июня 2012 г.
  6. ^ Уильям Пью. Модель памяти Java имеет фатальные недостатки. Параллелизм: практика и опыт 12 (6): 445-455, август 2000 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0b5d75da738a79a28439063f7dc69853__1708539300
URL1:https://arc.ask3.ru/arc/aa/0b/53/0b5d75da738a79a28439063f7dc69853.html
Заголовок, (Title) документа по адресу, URL1:
Programming language specification - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)