stringtranslate.com

Семантика действия

Семантика действий — это структура для формальной спецификации семантики языков программирования, изобретенная Дэвидом Уоттом и Питером Д. Моссесом в 1990-х годах. Она представляет собой смесь денотационной , операционной и алгебраической семантики .

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

Фреймворк семантики действий был первоначально разработан в Университете Орхуса и Университете Глазго . С тех пор группы и отдельные лица по всему миру внесли свой вклад в этот подход.

Семантические сущности

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

Действия сущностей

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

Существует четыре категории информации, которые обрабатываются при выполнении действия. Временная информация соответствует промежуточным результатам и доступна для немедленного использования действием. [2] Данные, которые содержат временную информацию, охватывают значения, заданные выражениями. Если эти значения не используются немедленно, они теряются. [1] Информация с ограниченной областью действия соответствует таблицам символов и может быть использована из любого места в пределах действия и его поддействий. [2] Также возможно, чтобы такая информация была скрыта внутри поддействия посредством создания внутренней области действия, в этом случае она будет доступна только локально в этой области действия для этого поддействия. [1] Стабильная информация соответствует значениям, назначенным переменным, и может быть изменена при выполнении действия. [2] Поскольку изменения в хранилище во время выполнения действия являются постоянными, только явные действия могут вызывать такие изменения. [1] В соответствии с этим стабильная информация доступна до тех пор, пока она не будет явно уничтожена. И, в отличие от информации с ограниченной областью действия, ее нельзя скрыть. Постоянная информация соответствует данным, которыми обмениваются действия, и может быть расширена, но не изменена. Временная информация создается только тогда, когда действие завершается или исчезает, а ограниченная информация создается только тогда, когда действие завершается. Изменение стабильной информации и расширение постоянной информации должны происходить во время выполнения действия. [2]

Сущность действия имеет пять различных граней, одну для обработки, которая не зависит от информации, и четыре для обработки каждого из четырех различных типов информации. Базовая грань, примером которой могут служить потоки управления, не привязана к информации любого рода. Функциональная грань имеет дело с обработкой временной информации и характеризуется действиями по предоставлению и принятию данных. Декларативная грань имеет дело с обработкой ограниченной информации и характеризуется действиями по созданию и получению привязок. Императивная грань имеет дело с обработкой стабильной информации и характеризуется действиями по выделению и освобождению ячеек хранения, а также извлечению и изменению хранящихся в них данных. Коммуникативная грань имеет дело с обработкой постоянной информации и характеризуется действиями по отправке и получению сообщений и «предложению контрактов агентам». [2] Существует два различных вида действий с точки зрения их влияния на информацию в каждой грани. Примитивные действия влияют только на информацию в одной грани. Комбинаторы действий допускают действия, которые включают несколько граней, определяя, как потоки управления и информации передаются для каждой грани, участвующей в объединенном действии. [2] При комбинировании действий комбинаторы действий управляют последовательностью выполнения поддействий, а также входящими и исходящими потоками данных для каждого поддействия. [1]

Данные сущности

Сущности данных — это элементы, которые содержат информацию, обрабатываемую в сущностях действий. Данные организованы в структуры, известные как сортировки. Сортировки — это наборы математических объектов, включающие операции, которые могут быть выполнены над этими объектами, и определяются в соответствии с алгебраическими критериями. [1] Эти структуры позволяют получить доступ к каждой отдельной сущности. Примерами сущностей данных могут быть конкретные элементы, такие как карты, списки, наборы, строки, символы, числа и значения истинности, более абстрактные элементы, используемые исключительно для целей некоторой вычислительной операции, а именно доступа к данным, такие как агенты, ячейки, соответствующие ячейкам памяти, и токены, или элементы, такие как контракты и сообщения, которые являются составными частями компонентов данных. [2] Абстракция — это сущность данных, которая инкапсулирует сущность действия, и в этом случае принятие абстракции приводит к выполнению действия. Это метод, с помощью которого семантика действия представляет объявление и вызов подпрограмм. [1]

Доходные сущности

Сущности Yielder состоят из неоцененных объемов данных. Значения этих объемов зависят от текущей информации и состояния вычислений. Yielder используют временные данные, привязки и хранилище для выбора информации, которая будет обрабатываться действиями. [1] Именно во время выполнения действия оцениваются yielders, и их оценка приводит к сущностям данных. Хотя текущая информация может влиять на данные, полученные в результате оценки сущности yielder, оценка не может влиять на текущую информацию. Если операции с данными применяются к сущностям yielder, в результате могут быть сформированы составные сущности yielder. [2]

Обозначение действия

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

Другие ключевые аспекты

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

Программные фразы сопоставляются с действиями при построении определения значения языка программирования в семантике действий. Выполнение программной фразы соответствует выполнению действия, которому она сопоставляется. [1]

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

Ссылки

  1. ^ abcdefghijklm Слоннегер, Кеннет; Курц, Барри Л. (1995). Формальный синтаксис и семантика языков программирования: лабораторный подход . Reading, MA: Addison-Wesley.
  2. ^ abcdefghijklm Питер Д. Моссес (1996) Теория и практика семантики действий . Публикация. Орхус, Дания: Университет Орхуса, 1996. Серия отчетов BRICS RS9653.