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

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

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

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

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

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

Сущности действия

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

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

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

Объекты данных

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

Подчиняющиеся сущности

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

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

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

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

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

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

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

Рекомендации

  1. ^ а б c d е ж грамм час я j k л м Кеннет Слоннегер и Барри Л. Курц (1995) Формальный синтаксис и семантика языков программирования: лабораторный подход. Ридинг, Массачусетс: Эддисон-Уэсли,.
  2. ^ а б c d е ж грамм час я j k л м Питер Д. Мосс (1996) Теория и практика семантики действия. Публикация. Орхус, Дания: Орхусский университет, 1996. Серия отчетов БРИКС RS9653.