Из Википедии, свободной энциклопедии
  (Перенаправлено из спецификации языка )
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Справочник по языку программирования

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

Спецификации языка [ править ]

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

  • Спецификации, написанные преимущественно по формальной математике:
    • The Definition of Standard ML, исправленное издание - формальное определение в стиле операционной семантики .
    • Схема R5RS - формальное определение в денотативной семантике стиле
  • Спецификации написаны преимущественно на естественном языке:
    • Отчет Algol 60
    • Справочное руководство по Ada 95
    • Спецификация языка Java
    • Проект стандарта C ++
  • Технические характеристики через набор тестов:
    • Спецификация Ruby де-факто, управляемая сообществом

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

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