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

редактировать

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

Содержание
  • 1 Стандартизация
  • 2 Формы
  • 3 Синтаксис
  • 4 Семантика
    • 4.1 Естественный язык
    • 4.2 Формальная семантика
    • 4.3 Эталонная реализация
    • 4.4 Набор тестов
  • 5 См. Также
  • 6 Внешние ссылки
    • 6.1 Спецификации языка
  • 7 Примечания
Стандартизация

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

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

C.H.A. Костер,
Формы

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

  • Явное определение синтаксиса и семантики языка. Хотя синтаксис обычно определяется с использованием формальной грамматики, семантические определения могут быть написаны на естественном языке (например, подход, принятый для языка C ), или в формальной семантике (например, спецификации Standard ML и Scheme ). Ярким примером является язык C, который приобрел популярность без формальной спецификации, вместо этого был описан как часть книги The C Programming Language (1978) и лишь намного позже был официально стандартизирован в ANSI C (1989).
  • Описание поведения компилятора (иногда называемого «переводчиком») для языка (например, C ++ язык и Фортран ). Синтаксис и семантика языка должны быть выведены из этого описания, которое может быть написано на естественном или формальном языке.
  • A реализация модели, иногда написанная на указанном языке (например, Prolog ). Синтаксис и семантика языка явно указаны в поведении реализации модели.
Синтаксис

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

Семантика

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

Естественный язык

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

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

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

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

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

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

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

Эталонная реализация

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

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

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

Набор тестов

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

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

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

См. Также
Внешние ссылки

Спецификации языка

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

Примечания
  1. ^Объявление спецификации для PHP, 30 июля 2014 г., Joel Marcey
  2. ^«Краткая история Algol68». Архивировано из оригинала 10 августа 2006 г. Получено 15 сентября 2006 г.
  3. ^Милнер, Р. ; М. Тофте ; Р. Харпер ; Д. Маккуин (1997). Определение Standard ML (пересмотренное). MIT Press. ISBN 0-262-63181-4.
  4. ^Келси, Ричард; Уильям Клингер; Джонатан Рис (февраль 1998 г.). «Раздел 7.2 Формальная семантика». Пересмотренный отчет об алгоритмической языковой схеме. Проверено 9 июня 2006 г.
  5. ^(2008). Формы языковой спецификации (PDF). Проверено 23 июня 2012 г.
  6. ^Уильям Пью. Модель памяти Java имеет фатальные недостатки. Параллелизм: практика и опыт 12 (6): 445-455, август 2000 г.
Последняя правка сделана 2021-06-02 07:49:46
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте