작용 의미론
Action semantics의미론 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
컴퓨팅 | ||||||||
| ||||||||
작용 의미론(action semantics)은 데이비드 와트와 피터 D에 의해 발명된 프로그래밍 언어의 의미론(semantics)의 공식 명세를 위한 틀이다. 1990년대의 이끼. 그것은 변성적 의미론, 운영적 의미론, 대수적 의미론의 혼합물이다.
액션 셈틱스는 실용성을 목표로 한다. 액션-대서양 설명(ASD)은 현실적인 프로그래밍 언어를 처리하도록 확장되도록 설계되어 있다. 이것은 ASD의 확장성과 수정가능성에 의해 도움을 받는다. 이를 통해 확장 및 변경에 너무 많은 설명 변경이 필요하지 않도록 할 수 있다. 이는 변성적 의미론이나 운영적 의미론을 확장할 때 나타나는 일반적인 경우와 대조적이며, 이는 전체 설명의 재조정이 필요할 수 있다.
Action Semantics 프레임워크는 원래 Arhus 대학교와 Glasgow 대학교에서 개발되었다. 이후 전 세계의 단체와 개인들은 이 접근법에 더 많은 기여를 했다.
의미론적 실체
이전의 프로그래밍 언어 의미론에서 볼 수 없는 모듈화를 제공하는 작용 의미론에서 중요한 부분은 1차 의미론적 실체의 사용이다. 제1순서는 의미 함수를 다른 의미 함수에 적용할 수 있는 변성 의미론에서와 달리, 행동 의미론에서 의미 실체를 그 종류의 다른 의미론적 실체에 적용할 수 없는 방법을 말한다.[1] 더욱이, 행동 의미론에 의해 이용되는 의미론적 실체는 어떤 특정한 구현에 독립된 프로그램 행동과 프로그램의 일부가 전체의 수행에 영향을 미치는 방식을 모두 나타내는 역할을 함으로써 프로그래밍 언어의 구성을 기술하는 프레임워크의 능력을 넓힌다. 적절한 명칭의 작용 표기법은 작용 의미론에서 발견되는 세 가지 유형의 의미론적 실체, 즉 작용, 데이터 및 산출자를 표현하기 위해 사용된다. 이 프레임워크의 중심 의미 실체는 데이터 및 산출자가 보조 역할을 점유하고 있는 행동이다.[2] 보다 구체적으로 말하면, 조치는 산출자와 데이터가 처리되는 메커니즘이다.[1] 다른 동작 내에서 발생할 수 있는 동작은 프로그램 동작의 단계별 표현으로, 각 단계가 현재 정보에 접근하거나, 현재 정보를 변경하거나, 둘 모두를 수행한다. 산출자는 조치 내에 나타나며 현재 정보에만 액세스한다. 수익자 실체는 평가될 수 있으며, 평가될 때 생산물은 기준점 실체다.[2]
작업 엔티티
행동실체는 가능한 프로그램 행동을 설명함으로써 프로그램의 의미론을 직접적으로 나타낼 수 있고, 또는 보다 간접적인 방법으로, 프로그램의 개별 조각이 프로그램 전체의 의미론에 미치는 영향을 나타낼 수 있다.[2] 이들은 전달된 값에서 새로운 값의 생성을 통해 상태 변화를 나타냄으로써 계산 행동을 모델링한다. 구체적으로, 동작은 현재 정보, 즉 주어진 일시적 데이터, 그에 의해 수신된 바인딩, 저장소의 현재 상태를 통해 전달된 데이터를 받아들이고, 이를 통해 새로운 임시 데이터를 제공하고, 새로운 바인딩을 생성하며, 저장소의 상태를 업데이트하거나, 또는 이것들의 조합을 통해 전달되는 데이터를 받아들인다.[1] 행동주체는 네 가지 가능한 방법으로 절정에 이를 수 있다. 완료(정상 종료), 탈출(예외에서 종료), 실패(대체 폐기) 또는 이탈(종료되지 않음)이 가능하다.[2]
조치 성과에 의해 처리되는 정보에는 네 가지 범주가 있다. 과도정보는 중간 결과에 해당하며, 조치에서 즉시 사용할 수 있도록 접근 가능하다.[2] 일시적인 정보로 구성된 데이터는 표현식에 의해 주어진 값을 포함한다. 이러한 값을 즉시 사용하지 않으면 손실된다.[1] 범위 정보는 기호 표에 해당하며 작업 및 하위 작업 내의 모든 위치에서 참조할 수 있다.[2] 또한 그러한 정보는 내부 범위의 생성을 통해 하위 액션 내에 숨겨질 수 있으며, 이 경우 해당 범위 내에서 로컬로 접근 가능한 경우에만 하위 액션에 노출될 수 있다.[1] 안정적인 정보는 변수에 할당된 값에 해당하며, 작업 수행에서 수정할 수 있다.[2] 조치 수행 중 저장소에 대한 변경은 지속적이기 때문에 명시적 조치만이 그러한 변경을 야기할 수 있다.[1] 이에 따라 명시적으로 파기될 때까지 안정적인 정보를 이용할 수 있다. 그리고 범위정보와는 달리 숨길 수 없다. 영구적인 정보는 행동 간에 교환되는 데이터에 해당하며, 확장될 수 있지만 수정할 수는 없다. 과도정보는 조치가 완료되거나 빠져나갈 때만 생성되며, 범위정보는 조치가 완료되었을 때만 생성된다. 안정적인 정보의 수정과 영구적인 정보의 확장은 조치 수행 중에 이루어져야 한다.[2]
조치실체는 정보에 의존하지 않는 처리용 하나와 네 가지 다른 유형의 정보를 각각 처리하기 위한 네 개의 다른 면을 가지고 있다. 통제 흐름의 한 예가 될 수 있는 기본적인 측면은 어떤 종류의 정보에도 얽매이지 않는다. 기능적 측면은 일시적인 정보의 처리를 다루며, 데이터를 주고 받아들이는 작용으로 특징지어진다. 선언적 측면은 범위 정보의 처리를 다루며 바인딩을 만들고 수신하는 작용이 특징이다. 명령적인 면은 안정적인 정보의 처리를 다루며, 저장 셀을 할당하고 자유롭게 하고, 그 안에 저장된 데이터를 가져오고 수정하는 작용이 특징이다. 의사소통 측면은 영구적인 정보 처리를 다루며, 메시지를 주고받는 행위와 "대리인에게 계약을 체결하는 행위"[2]가 특징이다. 각 측면의 정보에 미치는 영향 측면에서 두 가지 다른 종류의 행동이 있다. 원시적인 행동은 오직 한 면에서만 정보에 영향을 미친다. 작용 결합자는 여러 면을 포함하는 작용을 허용하며, 결합 작용에 관련된 각 측면에 대해 통제와 정보가 흐르는 방법을 지배한다.[2] 액션을 결합할 때, 액션 콤비네이터는 서브액션 성과와 각 서브액션에 대한 데이터의 들어오고 나가는 흐름의 순서를 관리한다.[1]
데이터 엔티티
데이터 엔티티는 액션 엔티티에서 처리되는 정보를 구성하는 항목이다. 그 데이터는 분류라고 알려진 구조로 배열되어 있다. 정렬은 수학적 객체의 집합이며, 해당 객체에 대해 수행할 수 있는 연산을 포함하며, 대수적 기준에 따라 정의된다.[1] 이러한 구조는 각각의 개별 실체에 대한 접근을 허용한다. 데이터 실체의 예로는 지도, 목록, 세트, 문자열, 문자, 숫자, 진실 값과 같은 구체적인 요소, 즉 데이터 액세스, 즉 에이전트, 메모리 위치에 해당하는 셀, 토큰과 같은 데이터 액세스, 또는 계약 및 메시지 같은 요소를 포함할 수 있다. 데이터 구성요소 [2]복합 추상화는 행동 실체를 캡슐화하는 데이터 실체로서, 이 경우 추상화를 제정하면 수행되는 행동이 된다. 이것은 액션 의미론들이 하위 프로그램의 선언과 호출을 나타내는 기법이다.[1]
항복자 도면요소
산출자 실체는 평가되지 않은 데이터 양으로 구성된다. 이러한 수량의 값은 현재 정보와 계산 상태에 따라 결정된다. 생산자는 임시 데이터, 바인딩 및 저장소에 의존하여 작업으로 처리할 정보를 선택한다.[1] 수익자를 평가하는 것은 조치 수행 중이고, 그 평가 결과는 데이터 실체에서 이루어진다. 현행 정보는 수익자실체의 평가에 의해 생산된 데이터에 영향을 미칠 수 있지만, 그 평가는 현행 정보에 영향을 미칠 수 없다. 데이터 연산이 수익자 기업에 채택되면 그 결과로 복합수익자 실체가 형성될 수 있다.[2]
작용 표기법
규칙적인 영어 단어들은 행동 표기법의 상징 역할을 한다. 행동 표기법은 자연 언어를 시뮬레이션하기 위해 고안된 것으로, 의미적 실체를 나타내기 위해 사용되는 언어 부분에 설명되어 있다. 작용 도면요소는 동사 구와 데이터로 표시되며 산출자 도면요소는 명사 구로 표시된다. 이러한 기호 선택의 결과는 정확하게 정의되어 있기 때문에 판독성이 높고 다른 프레임워크보다 덜 공식적인 프레임워크이다.[2]
기타 주요 측면
행동 의미론은 이해도를 높이는 추상화 수준을 구현한다. 의미 함수의 세부사항이 단항적 의미론에서 명시적으로 표현되는 것과 달리, 어떤 행동이 수반하는 통제와 데이터 흐름의 세부사항은 암시적으로 작용에 통합된다. 조치가 수행되면 대부분의 정보 처리와 조작이 자동으로 이루어진다.[1]
프로그램 구절은 동작 의미론에서 프로그래밍 언어의 의미 정의를 구성할 때 동작에 매핑된다. 프로그래밍 구문의 실행은 그것이 매핑하는 동작의 성능에 해당한다.[1]
작용 의미론의 응용에서 생성된 프로그래밍 언어 규격은 하위 수준(마이크로맨틱스)과 상위 수준(매크로맨틱스)으로 나눌 수 있다. 하위 수준은 동작 표기법의 의미를 정의하는 것으로 구성되며, 상위 수준은 이를 위해 동작 표기법을 사용하여 프로그래밍 언어의 의미를 정의하는 것으로 구성된다.[1]