- Содержание
- Стандартизация
- Формы
- Синтаксис
- Семантика
- Естественный язык
- Формальная семантика
- Эталонная реализация
- Тестирование
- Смотрите также
- внешние ссылки
- Спецификации языка
- ru.knowledgr.com
- Стандартизация
- Формы
- Синтаксис
- Семантика
- Естественный язык
- Формальная семантика
- Справочное внедрение
- Набор тестов
- См. также
- Внешние ссылки
- Языковые технические требования
- Что такое спецификация языка программирования
- Лекция 7: Формальные спецификации, доказательство и верификация программ
- 6.1. Анализ языков формальной спецификации программ
- 6.1.1. VDM-спецификация программ
- Видео
Содержание
Стандартизация
АЛГОЛ 68 был первым (и, возможно, одним из последних) основным языком, для которого было дано полное формальное определение до его реализации.
Формы
Спецификация языка программирования может принимать несколько форм, включая следующие:
Синтаксис
Синтаксис языка программирования обычно описываются с использованием комбинации из следующих двух компонентов:
Семантика
Естественный язык
Наиболее широко используемые языки определяются с использованием естественного языка описания их семантики. Это описание обычно имеет форму справочного руководства для языка. Эти руководства могут занимать сотни страниц, например, печатная версия Спецификации языка Java, 3-е изд. составляет 596 страниц.
Неточность естественного языка как средства описания семантики языка программирования может привести к проблемам с интерпретацией спецификации. Например, семантика потоков Java была указана на английском языке, и позже было обнаружено, что в спецификации не было адекватного руководства для разработчиков.
Формальная семантика
Формальная семантика основана на математике. В результате они могут быть более точными и менее двусмысленными, чем семантика, представленная на естественном языке. Тем не менее, дополнительные описания семантики на естественном языке часто включаются для облегчения понимания формальных определений. Например, Стандарт ISO для Modula-2 содержит определение как на формальном, так и на естественном языке на противоположных страницах.
Языки программирования, семантика которых описана формально, могут получить много преимуществ. Например:
Автоматическая поддержка инструментов может помочь реализовать некоторые из этих преимуществ. Например, автоматическое средство доказательства теорем или средство проверки теорем может повысить уверенность программиста (или разработчика языка) в правильности доказательств программ (или самого языка). Мощность и масштабируемость этих инструментов сильно различаются: полная формальная проверка требует больших вычислительных ресурсов, редко выходит за рамки программ, содержащих несколько сотен строк, и может потребовать значительной ручной помощи со стороны программиста; более легкие инструменты, такие как средства проверки моделей, требуют меньше ресурсов и используются в программах, содержащих десятки тысяч строк; многие компиляторы применяют проверки статического типа к любой компилируемой программе.
Эталонная реализация
С другой стороны, определение семантики языка через эталонную реализацию также имеет несколько потенциальных недостатков. Главный из них состоит в том, что он объединяет ограничения эталонной реализации со свойствами языка. Например, если в эталонной реализации есть ошибка, то эту ошибку следует рассматривать как авторитетное поведение. Другой недостаток заключается в том, что программы, написанные на этом языке, могут полагаться на особенности эталонной реализации, что затрудняет переносимость между различными реализациями.
Тестирование
Поэтому в обычной практике комплекты тестов используются только в сочетании с одним из методов спецификации других языков, например, с описанием на естественном языке или эталонной реализацией.
Смотрите также
внешние ссылки
Спецификации языка
Несколько примеров официальных или черновых языковых спецификаций:
ru.knowledgr.com
В вычислении спецификация языка программирования (или стандарт или определение) является экспонатом документации, который определяет язык программирования так, чтобы пользователи и конструкторы могли договориться о том, что означают программы в том языке. Технические требования, как правило, детализируются и формальны, и прежде всего используются конструкторами с пользователями, обращающимися к ним в случае двусмысленности; C ++ спецификация часто цитируется пользователями, например, из-за сложности. Связанная документация включает ссылку языка программирования, которая предназначена явно для пользователей и объяснения языка программирования, которое объясняет, почему спецификация написана, как это; они, как правило, более неофициальные, чем спецификация.
Стандартизация
Не у всех главных языков программирования есть технические требования, и языки могут существовать и быть популярными в течение многих десятилетий без спецификации. У языка могут быть одно или более внедрений, поведение которых действует как фактический стандарт без этого поведения, зарегистрированного в спецификацию. Perl (через Perl 5) является известным примером языка без спецификации, в то время как PHP был только определен в 2014 после использования в течение 20 лет. Язык может быть осуществлен и затем определен, или определен и затем осуществлен, или они могут развиться вместе, который является обычной практикой сегодня. Это вызвано тем, что внедрения и технические требования обеспечивают, проверяет друг друга: написание спецификации требует точно заявления поведения внедрения, и внедрение проверяет, что спецификация возможна, практична, и последовательна. Сочиняя спецификацию, прежде чем внедрения в основном избежали начиная с АЛГОЛА 68 (1968), из-за неожиданных трудностей во внедрении, когда внедрение отсрочено. Однако языки все еще иногда осуществляются и завоевывают популярность без формальной спецификации: внедрение важно для использования, в то время как спецификация желательна, но не важна (неофициально, «закодируйте переговоры»).
Формы
Спецификация языка программирования может принять несколько форм, включая следующее:
Синтаксис
Синтаксис языка программирования обычно описывается, используя комбинацию следующих двух компонентов:
Семантика
Естественный язык
Наиболее широко используемые языки определены, используя описания естественного языка их семантики. Это описание обычно принимает форму справочного руководства для языка. Эти руководства могут бежать к сотням страниц, например, печатная версия Явской Языковой Спецификации, 3-го Эда. 596 страниц длиной.
Неточность естественного языка как транспортное средство для описания семантики языка программирования может привести к проблемам с интерпретацией спецификации. Например, семантика Явских нитей были определены на английском языке, и это было позже обнаружено, что спецификация не предоставляла соответствующее руководство конструкторам.
Формальная семантика
Формальная семантика основана в математике. В результате они могут быть более точными и менее неоднозначными, чем семантика, данная на естественном языке. Однако дополнительные описания естественного языка семантики часто включаются, чтобы помочь пониманию формальных определений. Например, Стандарт ISO для Modula-2 содержит и формальное и определение естественного языка на противостоящих страницах.
Языки программирования, семантика которых описана формально, могут получить много выгоды. Например:
Автоматическая поддержка инструмента может помочь осознать некоторые из этих преимуществ. Например, автоматизированная программа автоматического доказательства теоремы или контролер теоремы могут увеличить программиста (или языковой проектировщик) уверенность в правильности доказательств о программах (или сам язык). Власть и масштабируемость этих инструментов значительно различаются: полная формальная проверка в вычислительном отношении интенсивна, редко измеряет вне программ, содержащих несколько сотен линий, и может потребовать значительной ручной помощи от программиста; более легкие инструменты, такие как образцовые контролеры требуют меньшего количества ресурсов и использовались на программах, содержащих десятки тысяч линий; много компиляторов применяют статические проверки типа к любой программе, которую они собирают.
Справочное внедрение
Тем не менее, несколько языков успешно использовали справочный подход внедрения. Например, переводчик Perl, как полагают, определяет авторитетное поведение программ Perl. В случае Perl модель Open Source распределения программного обеспечения способствовала факту, что никто никогда не производил другое внедрение языка, таким образом, проблемы, вовлеченные в использование справочного внедрения, чтобы определить языковую семантику, спорны.
Набор тестов
Главное преимущество этого подхода к семантическому описанию состоит в том, что легко определить, передает ли языковое внедрение набор тестов. Пользователь может просто выполнить все программы в наборе тестов и сравнить продукцию с желаемой продукцией. Однако, когда используется отдельно, у подхода набора тестов есть главные недостатки также. Например, пользователи хотят управлять своими собственными программами, которые не являются частью набора тестов; действительно, языковое внедрение, которое могло только управлять программами в его наборе тестов, будет в основном бесполезно. Но набор тестов, отдельно, не описывает, как языковое внедрение должно вести себя на любой программе не в наборе тестов; определение, что поведение требует некоторой экстраполяции на части конструктора и различных конструкторов, может не согласиться. Кроме того, трудно использовать набор тестов, чтобы проверить поведение, которое предназначено или позволено быть недетерминированным.
Поэтому, в обычной практике, наборы тестов используются только в сочетании с одним из других языковых методов спецификации, таких как описание естественного языка или справочное внедрение.
См. также
Внешние ссылки
Языковые технические требования
Несколько примеров чиновника или языковых технических требований проекта:
Что такое спецификация языка программирования
Спецификация языков программирования. Написание программы обработки информации может быть выполнено на одном или нескольких языках программирования. Конечный продукт разработки — программа обработки информации — выражается оператором только одного языка. Неправильное использование языковых конструкций, синтаксиса и семантики языка (или языков) программирования может послужить серьезной причиной возникновения программных ошибок (точка 9) [c.53]
Организация использует купленные или заказные средства программного обеспечения А) Дайте характеристики всех систем, например, операционных систем, баз данных, редакторов, справочных программ, коммуникаций, языков программирования и т.д. Для каждого заказного программного средства раскрыть а) дата установки б) название пакета или спецификация программного обеспечения, выполненного на заказ в) существуют ли групповые контроли над операциями по бухгалтерскому учёту г) количество счетов в главной бухгалтерской книге д) среднее число операций в месяц [c.107]
Для трейдеров, далеких от программирования, которые не владеют языком С или каким-то другим языком программирования было специально разработано дружественное по отношению к пользователю программное обеспечение. Эти программы позволяют трейдеру описывать и тестировать торговые идеи, не имея опыта программирования. Это не говорит о том, что от неправильно определенной системы можно ожидать правильных результатов. Тем не менее, эти программы на самом деле имеют несколько встроенных функций и операций, существенным образом облегчающих спецификацию торговой системы. [c.18]
Мини-спецификации процессов могут быть выражены с помощью псевдокодов (языков спецификаций), визуальных языков проектирования или языков программирования. [c.123]
Программисты обычно не имеют достаточной подготовки и опыта по этому виду проектирования. Они должны быть опытными в использовании языков программирования, методов организации вычислительных процессов, теории и практики компиляции, тестирования и отладки. В связи с этим было бы разумно использовать программистов в качестве проектировщиков модулей, предназначенных для средств отладки, компиляции и обнаружения ошибок, но вряд ли целесообразно поручать им разработку внешних спецификаций операционной системы, где они выступают не более чем пользователи. [c.116]
Концепция бригады главного программиста хорошо вписывается в методологию, излагаемую в данной книге. Библиотека поддержки разработки является хорошей иллюстрацией методов конфигурационного управления на уровне проекта. Структурное программирование удовлетворяет многим требованиям методологии проектирования, которые упоминаются в этой книге. Нисходящее проектирование, называемое также программированием сверху вниз, является фактически постепенной детализацией описаний функциональной структуры на уровнях более простых функций до тех пор, пока, наконец, не будет достигнут уровень собственно операторов языка программирования [14]. В ходе этого процесса фактически осуществляется декомпозиция проекта, описанная в предыдущей главе. Как заметил Бейкер [39], один из недостатков работы бригад главного программиста заключается в отсутствии подробных описаний функциональной структуры, которые отражали бы все внешние аспекты системы, не затрагивая внутренней структуры проекта. Ясно, что речь здесь идет о внешних спецификациях, рассмотренных в гл. 2. Бригада главного программиста, в составе которой предусмотрена должность руководителя проек- [c.91]
Наиболее очевидной сферой применения новых идей служит спецификация, разработка и реализация вычислительных систем, которые непрерывно действуют и взаимодействуют со своим окружением. Основная идея заключается в том, что эти системы без труда можно разложить на параллельно работающие подсистемы, взаимодействующие как друг с другом, так и со своим общим окружением. Параллельная композиция подсистем ничуть не сложнее последовательного сочетания строк или операторов в обычных языках программирования. [c.6]
В гл. 1 вводится общее понятие процесса как математической абстракции взаимодействия системы и ее окружения Показано, как с помощью известного механизма рекурсии можно описывать протяженные во времени и бесконечные процессы. Вначале идея иллюстрируется с помощью примеров и рисунков более полное истолкование дают алгебраические законы, а также машинная реализация на функциональном языке программирования. Вторая часть главы посвящена тому, как можно представить поведение процесса в виде протокола последовательности его действий. Определены многие полезные операции над протоколами. Еще до реализации процесс может быть специфицирован путем описания свойств его протоколов. Даны правила, помогающие получить реализации процессов, сопровожденные доказательством их соответствия исходным спецификациям. [c.9]
Поведенческие модели описывают процессы обработки информации. В системах ASE их представляют в виде граф-схем, диаграмм перехода состояний, таблиц решений, псевдокодов (языков спецификаций), языков программирования, в том числе языков четвертого поколения (4GL). [c.122]
Q диаграммы потоков данных — DFD (Data Flow Diagrams). Они обеспечивают спецификацию внешних устройств (источников или приемников информации), систем/подсистем, процессов (функций системы), потоков входной и выходной информации, накопителей данных (БД). Используется иерархия взаимосвязанных диаграмм потоков данных, что позволяет последовательно детализировать и описывать алгоритмы обработки данных с помощью таблиц решений, языков программирования, блок-схем алгоритмов [c.51]
Разработка DFD начинается с построения диаграммы верхнего уровня, отражающей связи программной системы, представленной в виде единого процесса, с внешней средой. Декомпозиция процесса проводится до уровня, где фигурируют элементарные процессы, которые могут быть представлены одностранич-ными описаниями алгоритмов (мини-спецификациями) на языке программирования. [c.122]
Классические методы проектирования. Конец 70-х — начало 80-х годов — это время становления технологии интегрированных баз данных как одной из головных технологий в проектировании ИС. Был разработан и вошел в практику большой набор теоретически обоснованных методов проектирование концептуальных и логических схем БД, организация физической среды хранения данных, планирование путей доступа к данным и др. Развивались методы проектирования функций от методов формальной спецификации функций до структурного программирования и первых непроцедурных языков программирования четвертого поколения (4GL). Анализ функций (задач) предприятия также служил основой и в проектировании БД. Появились ASE-системы, ориентированные на формализацию информационных и функциональных требований к ИС и предназначенные для формального описания и бригадной разработки больших программных комплексов. [c.135]
Написание компонентов ПО. В точке 4 обсуждаемой модели выполняется несколько шагов трансляции, начиная с трансляции внутреннего описания и кончая детальной разработкой необходимого набора программных операторов, обеспечивающих работу ПО в соответствии с заданными спецификациями. Этот этап работы реализует такие шаги, как трансляция внешнего описания проблемы в структуру компонентов ПО (модулей) и трансляция этих компонентов в описания структурного уровня, например блок-схемы процессов обработки информации. Именно в этой точке модели разработчик имеет дело с все возрастающим объемом информации, а отсюда и вероятность возникновения ошибок здесь достаточно высока. Основными задачами исследования надежности системы в это время являются задачи сравнительного анализа эффективности различных способов обеспечения надежности и выбор вариантов, обладающих заданной надежностью при учете реально существующих ограничений по различного рода ресурсам. Эти исследования могут проводиться на уровне моделей. Получение программы. Процесс последнего этапа разработки представляет собой трансляцию программных спецификаций в операторы языка программирования,. В силу формальности и рутинности выполняемой работы на этом этапе отмечается большое число ошибок, но эти ошибки, как правило, легко обнаруживаются и исправ- [c.51]
Для проверки правильности проведения работ по проектированию системы могут быть применены различные способы Одним из них может быть проверка проект ной документации автором архитектуры системы (авто ром внешних спецификаций) и проектировщиком после дующего процесса (разработчиком модулей) с целью обеспечения работоспособности, понятности, соответствия используемому языку программирования, а также совмес тимости с общей системой, частью которой является проект. [c.138]
Появлению ASE-технологии предшествовали исследования в области методологии программирования. Программирование обрело черты системного подхода с разработкой и внедрением языков высокого уровня, методов структурного и модульного программирования, языков проектирования и средств их поддержки, формальных и неформальных языков описания системных требований и спецификаций и т.д. Кроме того, этому способствовали перечисленные ниже факторы [c.323]
Лекция 7: Формальные спецификации, доказательство и верификация программ
В формальных методах нет рутинного написания спецификации на ЯП, а есть анализ текста и описание поведения программы в стиле, близком математической нотации, путем рассуждений и доказательств, принятых в математике. Формальные методы в программировании появились одновременно с самим программированием, на которое повлияли работы по теории алгоритмов А.А. Маркова [6.1], А.А. Ляпунова [6.2], схемы Ю.И.Янова [6.3], формальные нотации языка описания взаимодействующих процессов К.А. Хоара [6.4] и др.
В 70-х годах прошлого столетия появились формальные спецификации, которые близки ЯП и предоставляют средства, облегчающие проводить рассуждение о свойствах формальных тестов и сближающие их с математической нотацией. Несмотря на это, исследования формальных методов носили в основном академический, теоретический характер, поскольку извлечь из них практическую пользу в программировании не удавалось в силу огромных затрат на формальную спецификацию программ и разработку дополнительных [6.5-6.10] аксиом, утверждений и условий, называемых предварительными условиями (предусловиями) и постусловиями, определяющими заключительные правила получения правильного результата.
Доказательство проводится с помощью утверждений, которые составляются в формальном языке и служат способом проверки правильности программы в заданных точках. Набор утверждений использует предусловия и последовательность операций, приводящих к проверке результата относительно отмеченной точки программы, для которой сформулировано заключительное утверждение. Если утверждение соответствует конечному оператору программы, где требуется получить окончательный результат, то с помощью заключительного утверждения и постусловия делается окончательный вывод о частичной или полной правильности работы программы.
6.1. Анализ языков формальной спецификации программ
Описание задачи в языке спецификации включает в себя описание общего контекста всех понятий, через которые определяются понятия, участвующие в формулировке задачи или в описании модели ПрО (домена).
Описание задачи дается в виде аксиом, утверждений, пред- и постусловий, требующих для их реализации не систем программирования, а специального аппарата для доказательства или верификации описания задач, в частности интерпретаторов или метасистем.
В VDM и RAISE нет средств описания графовых структур, управления и параллелизма, однако имеется механизм конструирования новых структур данных.
Языки спецификации областей включают в себя следующие языки:
Каждый из этих языков имеет специализированные средства, отображающие специфические особенности соответствующей области.
Языки описания взаимодействий и параллельного выполнения в отличие от ЯП позволяют специфицировать процессы управления вычислениями, передачей сообщений и взаимодействием объектов в распределенных системах.
Отдельные операции логики предикатов используются также в языках логического программирования (например, Пролог ).
6.1.1. VDM-спецификация программ
Этот язык имеет математическую символику, которая легко воспринимается математически подготовленными студентами последних курсов университетов за 5-6 лекций. В языке содержатся следующие типы данных:
Объекты языка VDM. Все объекты строятся иерархически. Элементами данных, с которыми оперируют функции, могут быть множества, деревья, последовательности, отображения, а также более сложные структуры, образованные с помощью конструкторов.
Множество может быть конечное и обозначается . При работе с множеством используются операции
,
,
,
и др. Язык имеет правила проверки правильности задания этих операций. Пример,
будет корректным только тогда, когда
является подмножеством множества, которому принадлежит
. Пример дистрибутивного объединения дан ниже:
Например, .
Например, ,
.
Могут использоваться также операция конкатенации (соединение двух списков) и операция дистрибутивной конкатенации.
Приведенные конструкции используются для спецификации программы и, в частности, начального состояния с инвариантными свойствами, в качестве которого используется функция, содержащая описание типов аргументов, результата и операций самой функции. Для проверки правильности спецификации программы средствами языка VDM задаются пред- и постусловия, аксиомы и утверждения.
Утверждение задает описание операций проверки правильности программы в разных ее точках. Операторы программы изменяют состояние переменных в заданной точке, а операции утверждений анализируют ее (например, после операции работы с БД) в целях определения правильности выполнения этой операции. При возникновении непредвиденной ситуации, аксиомы и утверждения должны предусматривать соответствующие действия.
Видео
Что такое язык программирования? / Введение в программирование, урок 2 (JavaScript ES6)Скачать
Языки программирования - просто о сложномСкачать
Что такое программирование и язык программирования? Просто о сложном.Скачать
Обзор языка программирования R. #ityoutubersСкачать
Курс №1: Отличие языка программирования от фреймворкаСкачать
Языки и сферы их применения. Какой язык программирования выбрать?Скачать