KR101187486B1 - 병행 분산 자원 네트워크의 협동을 위한 컴퓨터 실행가능 방법, 및 컴퓨터 판독가능 저장 매체 - Google Patents
병행 분산 자원 네트워크의 협동을 위한 컴퓨터 실행가능 방법, 및 컴퓨터 판독가능 저장 매체 Download PDFInfo
- Publication number
- KR101187486B1 KR101187486B1 KR1020047018145A KR20047018145A KR101187486B1 KR 101187486 B1 KR101187486 B1 KR 101187486B1 KR 1020047018145 A KR1020047018145 A KR 1020047018145A KR 20047018145 A KR20047018145 A KR 20047018145A KR 101187486 B1 KR101187486 B1 KR 101187486B1
- Authority
- KR
- South Korea
- Prior art keywords
- query
- expression
- literal
- queue
- term
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/314—Parallel programming languages
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
프로토콜 기반 애플리케이션을 프로세스로서 표현하기 위해 프로세스 기반 언어로 작성된 표현식을 포함하는 프로그램(324, 320)이 개시되어 있다. 프로세스 커널(320C, 306C, 304C, 308C)은 프로그램 내의 표현식을 실행한다. 이 표현식은 커스터마이즈가능한 태그 기반 언어(302, 304, 306, 308)로 작성된 이름있는 데이터 구성 방식(named organizational scheme of data)이 이 이름있는 데이터 구성 방식을 전송 및 수신하는 프로세스들 간에 프로세스로서 교환될 수 있도록 함으로써 프로세스들의 상호작용을 지정한다.
프로세스, 태그 기반 언어, 병행 네트워크
Description
관련 출원의 상호 참조
본 출원은 여기에 인용함으로써 본 명세서에 명백히 포함되는, 2002년 5월 10일자로 출원된 발명의 명칭이 "프로세스 프로그래밍 언어(Process Programming Language)"인 미국 가특허출원 제60/379,864호, 여기에 인용함으로써 본 명세서에 명백히 포함되는, 2002년 11월 22일자로 출원된 발명의 명칭이 "프로세스 커널(Process Kernel)"인 미국 특허출원 제10/303,407호, 여기에 인용함으로써 본 명세서에 명백히 포함되는, 2002년 11월 22일자로 출원된 발명의 명칭이 "큐에서의 프로세스로서의 쿼리와 프로세스의 통합의 순열 뉘앙스(Permutation Nuances of the Integration of Processes and Queries as Processes at Queues)"인 미국 특허출원 제10/303,445호, 여기에 인용함으로써 본 명세서에 명백히 포함되는, 2002년 11월 22일자로 출원된 발명의 명칭이 "프로세스 및 쿼리를 포함하는 표현식의 구조적 등가(Structural Equivalence of Expressions Containing Processes and Queries)"인 미국 특허 출원 제10/303,379호, 및 여기에 인용함으로써 본 명세서에 명백히 포함되는, 2002년 11월 22일자로 출원된 발명의 명칭이 "프로세서로서의 쿼리와 프로세스의 진화를 규율하는 동작적 의미론 규칙(Operational Semantics Rules Governing Evolution of Processes and Queries as Processes)"인 미국 특허 출원 제10/303,343호를 우선권 주장한다.
본 발명은 일반적으로 네트워크화된 컴퓨터에 관한 것으로서, 보다 구체적으로는 컴퓨팅 자원의 병행 분산 네트워크(concurrent, distributed network)의 협동을 야기하는 방법에 관한 것이다.
자연어는 프로그래밍 언어 또는 기계어와는 달리, 사람이 말하고 쓰는 언어이다. 프로그래밍 언어는 궁극적으로 컴퓨터에 의해 처리되고 실행될 수 있는 일련의 명령어를 정의하는 데 사용될 수 있는 임의의 인공 언어이다. 무엇이 프로그래밍 언어이고 무엇이 아닌지를 정의하는 것은 까다로울 수 있지만, 일반적인 사용은 프로그래밍 언어를 사용하여 표현된 소스 코드로부터 컴퓨터가 동작하는 데 사용할 필요가 있는 코드인 기계 코드로의 번역 프로세스가 컴파일러 등의 또하나의 프로그램에 의해 자동화되어 있음을 의미한다. 자연어 및 프로그래밍 언어는 둘다 사람 대 사람 또는 사람 대 기계 등의 한 개체로부터 또하나의 개체로 정보 및 명령어를 전달하는 체계적인 수단이다. 그러나, 종래의 프로그래밍 언어는 사람으로부터 기계로 정보 및 명령어를 전달하는 불완전한 방식이었다.
예를 들어, 컴퓨터 시대의 초기에, 어셈블리어가 저레벨 프로그래밍 언어를 형성하는 데 사용되었다. 어셈블리어는 각각의 서술문(statement)이 하나의 기계 명령어에 대응하는 약어 또는 니모닉(mnemonic) 코드를 사용한다. 시스템 하드웨어 및 자원과의 직접적인 프로그래머 상호작용으로 인한 높은 효율성의 이점과 함 께, 어셈블리어 프로그램에 사소한 변화라도 있은 경우 데이터 구조 등의 임시적 구성 방식을 수동으로 갱신해야만 하는 바람직하지 않은 결과가 있었다. 기반이 되는 기계어 상부에 추상화 레벨을 제공하는 오늘날의 고레벨 언어는 어셈블리어에서 진화하였다. 고레벨 언어 서술문은 일반적으로 2개 이상의 기계어 명령어로 번역되는 (보통 영어로 된) 키워드를 사용한다. 고레벨 언어는 데이터 구조에 대한 지원을 내장하고 있으며 언어의 구조를 정의하는 일련의 구문적 및 의미론적 규칙을 정의한다. 고레벨 언어로 작성된 프로그램에 작은 변경이 행해지면, 미리 정해진 일련의 구문적 및 의미론적 규칙을 따름으로써 그 프로그램을 오브젝트 코드로 변환하는 컴파일러는 그 프로그램에 행해진 변경과 일치하도록 필요에 따라 오브젝트 코드를 리플로우(reflow)하거나 오히려 프로그래머에게 명백한 프로그래밍 에러를 통지한다.
프로그래머는 호출측 애플리케이션 프로그래밍 인터페이스(API)의 서명을 정의된 API의 대응하는 서명에 대조해 검사함으로써 API의 호출에서의 에러를 검출하기 위해 컴파일러의 기능을 이용한다. API는 프로그램이 원하는 태스크를 수행하기 위해 받아들이게 되는 입력의 종류 및 프로그램이 원하는 태스크의 수행 후에 반환하게 되는 출력의 종류를 정의하는 프로그램의 인터페이스이다. API에 의해 프로그램들은 각각이 독자적으로 제공할 수 있는 것보다 많은 기능을 제공하기 위해 서로 협력할 수 있게 된다.
API는 API의 기초를 이루는 프로그램의 거동이 아니라, API에 무엇이 제공되어야만 하는지 및 API로부터 무엇이 반환되는지를 지정할 뿐이다. 예를 들어, 적 절히 협력하기 위해, "초기화(initialization)" 프로그램은 "작업 실행(do work)" 프로그램이 호출되기 이전에 호출되어야만 하고, 이에 대응하여 "작업 실행" 프로그램은 "클린업(clean up)" 프로그램이 호출되기 전에 호출되어야만 한다. API는 이러한 순서 개념 또는 프로그램이 어떻게 협력해야 하는지를 표현하는 임의의 다른 개념을 포착하지 않는다. 그 결과, 예전의 어셈블리 프로그램을 유지하는 고된 작업과 같이, 프로그래머들은 프로그램들이 올바르게 협력하도록 보장하기 위해 현재의 고레벨 언어의 표현력의 한계 내에서 작업함으로써 다시 한번 고된 일을 해야만 한다.
상기한 문제점은 웹 서비스의 급증으로 악화되었으며, 이 웹 서비스는 기본적으로 인터넷에 의해 상호 연결된 임의의 수의 컴퓨팅 장치들 상에 존재하는 프로그램이다. 반면에, 비록 고되기는 하지만 하나의 컴퓨팅 장치 내의 프로그램들의 협력의 지정 및 고된 검증은 착수될 수 있지만, (다수의 컴퓨팅 장치로부터 다수의 메시지를 전송하는) 다수의 웹 서비스의 협력과 관련된 복잡한 발레(ballet)를 검증하는 작업은 현재의 고레벨 언어의 표현력의 부족으로 인해 이겨내기 어려운 문제이다. 그 중에서도 특히 순서 및 타이밍 등의 프로그램 또는 서비스의 협력적 차원이 프로그램적으로 검증될 수 있도록 이러한 협력적 차원을 표현할 수 있는 프로그래밍 언어가 필요하다.
한가지 부분적인 해결책은 도 1에 도시한 시스템(100)과 같은 상호작용하는 병행 시스템에서의 프로세스를 기술하기 위한 수학적 언어인 π-연산구조(π-calculus)의 사용이다. 시스템(100)은 근거리 통신망 또는 인터넷(104) 등의 원거 리 통신망 상의 서버(106) 등의 또하나의 컴퓨터에 의해 제공되는 공유 네트워크 자원에 액세스하는 컴퓨터인 클라이언트(102)를 포함한다. 다수의 웹 서비스(108, 116)는 클라이언트(102) 및 서버(106) 상에 프로그램으로서 정적으로 저장되어 있다.
초기의 오퍼레이팅 시스템은 사용자로 하여금 한번에 하나의 프로그램만을 실행할 수 있게 해주었다. 사용자는 프로그램을 실행시키고 그 프로그램이 완료되기를 기다린 다음에 또다른 프로그램을 실행시켰다. 현대의 오퍼레이팅 시스템은 사용자로 하여금 한번에 2개 이상의 프로그램 또는 심지어 동일한 프로그램의 다수의 복사본을 동시에 실행(작동)시킬 수 있게 해준다. 쓰레드는 프로세서 시간을 프로그램에 할당하기 위해 오퍼레이팅 시스템에 의해 사용되는 기본 단위이다. 쓰레드는 또하나의 쓰레드에 의해 현재 실행되고 있는 부분을 포함한, 프로그래밍 코드의 임의의 부분을 포함할 수 있다. 프로세서는 한번에 하나의 쓰레드만을 실행할 수 있다. 그렇지만, 멀티태스킹 오퍼레이팅 시스템, 즉 사용자로 하여금 다수의 프로그램을 실행시킬 수 있게 해주는 오퍼레이팅 시스템은 다수의 프로그램을 동시에 실행시키는 것처럼 보인다. 실제로는, 멀티태스킹 오퍼레이팅 시스템은 프로그램들 간을 계속하여 왔다갔다하면서 한 프로그램으로부터의 쓰레드를 실행한 다음에 다른 프로그램으로부터의 쓰레드를 실행하는 등을 한다. 각각의 쓰레드가 그의 서브 태스크를 완료할 때, 프로세서는 실행할 또하나의 쓰레드를 받는다. 프로세서의 엄청난 속도가 모든 쓰레드가 동시에 실행되는 착각을 일으킨다.
용어 멀티-태스킹 및 멀티-프로세싱은 때로는 서로 교환하여 사용될 수 있지 만, 이들은 서로 다른 의미를 갖는다. 멀티-프로세싱은 멀티 프로세서를 필요로 한다. 머신이 하나의 프로세서만을 가지고 있는 경우, 오퍼레이팅 시스템은 멀티-태스킹을 할 수 있지만 멀티-프로세싱은 할 수 없다. 단일 머신이 다수의 프로세서를 가지고 있거나 각각이 프로세서를 가지고 있는 다수의 머신(클라이언트(102) 및 서버(106))이 있는 경우, 단일 머신의 오퍼레이팅 시스템 또는 다수의 머신의 오퍼레이팅 시스템은 멀티-태스킹 및 멀티-프로세싱 둘다를 행할 수 있다. 다수의 프로세서를 갖는 단일 머신 및 각각이 프로세서를 갖는 다수의 머신 양쪽 모두는 병행 시스템(concurrent system)을 정의한다. 이것이 π-연산구조의 관심 대상이다.
π-연산구조의 핵심은 링크(링크(124) 등)를 통해 통신하는 독립적인 병렬 프로세스들(웹 서비스(108, 116) 등)의 시스템으로 이루어져 있다. 링크는 이하의 것, 즉 원격 프로시저 호출로서 되는 API, 생성되어 전달되고 제거될 수 있는 하이퍼텍스트 링크, 및 객체 지향 시스템에서 메소드 호출의 인수로서 전달되는 객체 참조(예를 들어, "장미(rose)") 중 임의의 것일 수 있다. 프로세스의 다른 프로세스들과의 통신 가능성은 여러가지 다른 링크에 대해 알고 있는지에 달려있다. 링크는 어떤 프로세스들만이 그를 통해 통신할 수 있도록 제한될 수 있다. π-연산구조를 다른 프로세스 언어와 구별시켜 주는 것은 제한의 범위(링크가 사용될 수 있는 콘텍스트)가 실행 동안 변할 수 있다는 것이다. 예를 들어, 웹 서비스(116)가 웹 서비스(116)만이 미리 알고 있는 API 등의 제한된 이름을, 제한의 범위 밖에 있는 웹 서비스(108)에 메시지로서 전송할 때, 그 범위는 확장된다(또는 π-연산구 조의 수학적 관점(mathematic idiom)에서 돌출됨). 이것은 API를 수신하는 웹 서비스(108)를 포괄하기 위해 API의 범위가 확대됨을 의미한다. 환언하면, 웹 서비스(108)는 이제 API에 의해 표현된 함수를 호출할 수 있지만, 이전에는 웹 서비스(108)는 API에 대해 알지 못하였고 따라서 API를 호출할 수 없었다. 이 절차에 의해 프로세스의 통신 가능성이 π-연산구조의 프레임워크 내에서 시간에 따라 변할 수 있게 된다. 프로세스는 범위 돌출(scope extrusion)을 통해 새로운 링크들의 이름을 알 수 있다. 따라서, 링크는 통신을 향상시키기 위한 전송가능량(transferable quantity)을 나타낸다.
π-연산구조에 관하여 중심을 이루고 기초적이며 변하지 않는 것은 "장미" 등의 이름에 대한 그의 강한 집중 및 이름을 링크를 통해 메시지로서 전달하는 것이다. 특히, π-연산구조는 순수 이름(pure name)을 크게 강조하며, 그 이름 각각은 단지 비트 패턴인 것으로 정의된다. 순수 이름의 한 예는 COM 컴포넌트 모델에서의 인터페이스 또는 구현을 일의적으로 식별하는 128-비트의 공간 GUID(Globally Unique Identifier)이다. 순수 이름의 다른 예는 전술한 바와 같은 함수 서명 또는 API이다. 추가로 강조하기 위해, 이러한 측면에서 상기한 문제를 생각해보자. 웹 서비스(116)로부터 웹 서비스(108)로 전송되는 3개의 API("초기화", "작업 실행", 및 "클린업")가 있지만 웹 서비스(116)가 이들 3개의 API를 특정의 순서로만(예를 들어, "초기화" 다음에 "작업 실행", 이어서 "클린업") 호출해야 하는 것으로 가정하자. 기존의 π-연산구조 및 그의 변형은 3개의 API가 웹 서비스(116)로부터 웹 서비스(108)에 도달하기 위해 링크(124)를 통해 전송될 수 있게 해주지만, 기존 의 π-연산구조 및 그의 변형에서는 웹 서비스(116)가 웹 서비스(108)에 대해 3개의 API가 호출되어지는 특정의 순서를 표현해줄 방법이 없다. 이 점에서, 기존의 π-연산구조 및 그의 변형은 그 중에서도 특히 순서 및 타이밍 등의 프로그램 또는 서비스의 협력적 차원이 프로그램적으로 검증될 수 있도록 이러한 협력적 차원을 완전히 표현하지는 못한다.
한명의 엘리자베스 여왕 시대의 시인은 형태에 있어서 은유적이지만 시대를 초월한 관찰을 구체화한 다음과 같은 격언을 간결하게 제공하였다. "이름에는 무엇이 있는가? 우리가 장미를 어떤 다른 이름으로 부르면 사탕같은 냄새가 날 것이다." 오래 전에 행해진 이러한 관찰은 π-연산구조 및 그의 변형의 현재의 문제점-이름있는 링크(링크(124) 등)를 통한 구조화된 데이터의 전달에 대한 허용오차의 결여-을 정확하게 지적한다. 실제로, π-연산구조는 안타깝게도 구조화된 데이터를 부정적인 언어 구조인 "불순한 이름(impure name)"이라고 부른다. 순수함은 바람직하지만 불순함은 싫어한다. 따라서, π-연산구조와 관련하여 불순한 이름은 확장가능 마크업 언어(XML) 문서 등의 어떤 종류의 인식가능한 구조를 갖는 데이터이다. 실제, 하나의 프로세스가 구조화된 데이터를 다른 프로세스로 전달하는 것이 유용하다(때로는 필요하다).
데이터의 흐름이 없다면, 프로세스들 간의 이동성 또는 역동성을 나타내기 위해 (아주 간접적인 방법을 제외하고는) 프로세스들간의 통신을 용이하게 하는 것이 어렵다. 이 문제를 해결하기 위해, 컴퓨터 과학자들은 프로세스가 링크를 통해 통신중에 이동될 수 있게 하는 가능성을 조사하였다. 예를 들어, 프로세스(110)는 제3 프로세스(도시 생략)를 나타내는 메시지를 프로세스(118)에 전송할 수 있다. 이것은 고차 π-연산구조(higher-order π-calculus)라고 한다. π-연산구조가 순수 이름을 처리함에 있어서의 엄격성으로 인해, 링크를 통해 프로세스를 전송하지 않고, 고차 π-연산구조 변형조차도 프로세스 그 자체를 전송하지 않고 원하는 프로세스에 대한 액세스를 제공하는 이름을 전송한다.
프로세스 대신에 이름을 전송하는 것은 파라미터의 값을 검색 또는 수정하기 위해 파라미터의 주소를 사용하는 참조에 의한 전달 기법, 즉 파라미터의 주소를 호출측 루틴에서 피호출 루틴으로 전달하는 종래의 프로그래밍 기법에 비유될 수 있다. 고차 π-연산구조 변형에서 참조에 의한 전달 기법을 사용함에 있어서의 주된 문제는 그 기법이 병행 시스템을 분산형으로 되지 못하도록 할 수 있다는 것이다. π-연산구조의 많은 구현, 즉 그 중에서도 특히 PICT, 노마딕(Nomadic) PICT, TyCO, Oz 및 Join이 있다. 그렇지만, 이들 다른 구현은 분산형 π-연산구조도 아니고(PICT) 고차형 π-연산구조도 아니다(노마딕 PICT, TyCO, Oz 및 Join).
따라서, 기존의 π-연산구조 및 그의 변형과 관련된 상기의 문제 및 다른 문제를 피하거나 감소시키면서 병행 분산 컴퓨팅 네트워크에서의 프로세스들이 상호작용할 수 있게 해주는 보다 나은 방법 및 시스템이 필요하다.
본 발명에 따르면, 프로세스 기반 언어로 작성된 프로그램을 처리하는 시스템, 방법 및 컴퓨터 판독가능 매체가 제공된다. 시스템 형태의 본 발명은 프로그램을 저장하는 컴퓨터 판독가능 수단을 포함한다. 상기 프로그램은 프로토콜 기반 애플리케이션을 프로세스로서 표현하기 위해 프로세스 기반 언어로 작성된 표현식을 포함한다. 상기 시스템은 또한 상기 프로그램 내의 상기 표현식을 실행하는 프로세스 커널을 포함한다. 상기 표현식은 커스터마이즈가능한 태그 기반 언어로 작성된 이름있는 데이터 구성 방식이 프로세스들 간에 프로세스로서 교환될 수 있도록 해줌으로써 프로세스들의 상호작용을 지정한다. 상기 이름있는 데이터 구성 방식은 상기 이름있는 데이터 구성 방식을 전송 및 수신하는 프로세스들의 범위에 바인딩되어 있다.
본 발명의 다른 측면에 따르면, 방법 형태의 본 발명은 컴퓨터 시스템에서 구현가능하다. 본 방법은 프로세스 기반 언어로 작성된 프로그램 내의 프로세스 표현식이 실행될 때 프로토콜 기반 애플리케이션을 프로세스로서 표현하는 단계를 포함한다. 본 방법은 또한 쿼리 표현식이 실행될 때 커스터마이즈가능한 태그 기반 언어로 작성된 이름있는 데이터 구성 방식을 프로세스로서 표현하는 단계를 포함한다. 본 방법은 프로세스들이 상기 이름있는 데이터 구성 방식을 쿼리로서 큐로 전송하거나 큐로부터 수신할 때 프로세스들로 하여금 통신하게 하는 단계를 포함한다. 상기 이름있는 데이터 구성 방식은 상기 이름있는 데이터 구성 방식을 전송 또는 수신하는 프로세스들의 범위에 바인딩되어 있다.
본 발명의 다른 측면에 따르면, 또하나의 시스템 형태의 본 발명은 프로세스 기반 언어로 작성된 프로그램에서 쿼리를 정의하고 쿼리와 큐 사이의 상호작용을 규율하는 쿼리 가상 머신을 포함한다. 본 시스템은 또한 상기 프로그램에서 프로토콜 기반 애플리케이션을 포함하는 프로세스를 정의하고 프로세스들 간의 상호작 용을 규율하는 프로세스 가상 머신을 포함한다. 본 시스템은 쿼리, 큐 및 프로세스 간의 유효한 상호작용을 정의하고 또한 쿼리를 프로세스로서 해석함으로써 쿼리, 큐 및 프로세스 간의 상호작용을 규율하는 반응 가상 머신을 더 포함한다.
본 발명에 따르면, 프로세스 기반 언어로 작성된 프로그램을 처리하는 방법 및 컴퓨터 판독가능 매체가 제공된다. 본 발명에 따르면, 방법 형태의 본 발명은 큐, 큐 구분자(queue delimiter) 세트, 쿼리, 시퀀스 구분자(sequence delimiter), 및 다른 동작을 표현하는 구문 요소를 획득하기 위해 상기 표현식을 파싱하는 단계를 포함한다. 본 방법은 상기 표현식을, 첫번째 동작이 상기 쿼리를 상기 큐에 또하나의 프로세스로서 전송하는 것이고 그 후에 다른 동작을 계속하는 프로세스로서 해석하는 단계를 포함한다. 상기 쿼리는 데이터를 포함하고 또 데이터를 기술하는 커스터마이즈가능한 태그 기반 언어로부터 형성된 구성 방식을 포함한다.
본 발명의 한 측면에 따르면, 프로세스 기반 언어로 작성된 표현식의 구조적 등가(structural equivalence)를 규율하는 일련의 등식 법칙을 실행하는 방법 형태의 본 발명이 제공된다. 본 방법은 제1 표현식을 파싱한다. 상기 제1 표현식은 쿼리가 프로세스와 병렬로 실행되고 있음을 기술한다. 상기 쿼리는 비어 있는 헤드와, 제2 이름에 바인딩되어 있는 제1 이름을 포함하는 보디를 갖는다. 본 방법은 상기 제1 표현식을 제2 표현식에 구조적 등가인 것으로 해석한다. 상기 제2 표현식은 상기 쿼리가 표준형(canonical form)으로 되어 있는 경우 상기 쿼리가 상기 프로세스와 병렬로 실행되고 있음을 기술한다. 상기 프로세스에서의 상기 제1 이름의 각각의 발생은 상기 제2 이름으로 대체가능하다.
본 발명에 따르면, 프로세스 기반 언어로 작성된 프로그램을 처리하는 방법 및 컴퓨터 판독가능 매체가 제공된다. 프로세스 기반 언어로 작성된 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙(operational semantics rule)을 실행하는 방법 형태의 본 발명이 제공된다. 본 방법은 제1 표현식을 파싱하는 단계를 포함한다. 상기 제1 표현식은 프로세스가 2개의 프로세스 중의 선택임을 기술한다. 상기 2개의 프로세스 중 제1 프로세스는 제1 쿼리가 큐로 전송되고 그 후에 상기 제1 프로세스가 제1의 일련의 동작을 계속함을 표현한다. 상기 2개의 프로세스 중 제2 프로세스는 제2 쿼리가 상기 큐로 전송되고 그 후에 상기 제2 프로세스가 제2의 일련의 동작을 계속함을 표현한다. 본 방법은 상기 제1 표현식을 제2 표현식으로 축약(reduce)시키는 단계를 더 포함한다. 상기 제2 표현식은 제3 쿼리가 표준형으로 되어 있는 경우에 상기 제3 쿼리가 상기 큐로 전송되고 그 후에 상기 제1 프로세스가 상기 제2 프로세스와 병렬로 실행됨을 기술한다.
본 발명의 다른 측면에 따르면, 프로세스 기반 언어로 작성된 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙을 실행하는 또다른 방법이 제공된다. 본 방법은 제1 표현식을 파싱하는 단계를 포함한다. 상기 제1 표현식은 제1 프로세스를 기술하고 이 제1 프로세스의 제1 동작은 쿼리를 큐로 전송하는 것으로서 그 후에 상기 제1 프로세스는 제2 프로세스를 계속한다. 본 방법은 상기 제1 표현식을 제2 표현식으로 축약시키는 단계를 더 포함한다. 상기 제2 표현식은 상기 제1 쿼리가 표준형으로 되어 있는 경우에 리프트된 쿼리(lifted query)가 상기 제2 프로세스와 병렬로 실행됨을 기술한다.
본 발명의 상기 측면 및 부수 이점의 대부분은 첨부 도면과 관련하여 기재된 이하의 상세한 설명을 참조하면 본 발명이 보다 잘 이해되는 것처럼 보다 용이하게 알게 될 것이다.
도 1은 π-연산구조를 사용하여 API 등의 이름을 2개의 웹 서비스 사이의 링크를 통해 전달하는 종래의 병행 시스템을 나타낸 블록도.
도 2는 예시적인 컴퓨팅 장치를 나타내는 블록도.
도 3a 내지 도 3c는 다수의 프로세스 사이에서 구조화된 메시지를 전달하기 위한, 본 발명에 따라 형성된 예시적인 병행 분산 시스템을 나타낸 블록도.
도 4는 궁극적으로 컴퓨팅 자원의 병행 분산 네트워크 내의 예시적인 컴퓨팅 장치에 의해 처리되고 실행될 수 있는 일련의 명령어를 정의하는 데 사용될 수 있는 인공 언어인 예시적인 프로그래밍 언어의 주요 구문 카테고리를 나타낸 블록도.
도 5는 프로세스를 2개의 프로세스 사이에서 전달하기 위한 메시지로서 저장하기 위한, 본 발명에 따라 형성된 예시적인 큐를 보다 상세히 나타낸 블록도.
도 6a 및 도 6b는 본 발명에 따라 형성된 2개의 프로그램적 문서 사이의 구조적 등가를 결정하는 기술을 나타낸 블록도.
도 7a 및 도 7b는 본 발명에 따라 형성된 병행 분산 시스템에서 2개의 프로세스 사이에서의 통신을 향상시키기 위해 2개의 큐를 융합시키는 기술을 나타낸 블록도.
도 8은 본 발명에 따라 형성된 병행 분산 시스템에서 2개의 큐를 융합시켜 프로세스들 사이의 통신을 향상시키기 위한, 본 발명에 따라 형성된 예시적인 시스템을 나타낸 블록도.
도 9a 및 도 9b는 2개의 데이터베이스 형태를 축약시켜 본 발명에 따라 형성된 병행 분산 시스템에서 2개의 별개의 프로세스가 통신할 수 있게 해주는 예시적인 시스템을 나타낸 블록도.
도 10a 내지 도 10c는 본 발명에 따라 형성된 병행 분산 시스템에서 프로세스가 다수의 데이터베이스에 액세스하는 데 사용될 수 있는 이름을 발견하기 위한, 본 발명에 따라 형성된 예시적인 시스템을 나타낸 블록도.
도 11a 내지 도 11v는 컴파일러에 의해 프로그램을 컴파일하거나 프로세스 커널을 통해 프로세스를 실행하기 위한, 본 발명에 따라 형성된 예시적인 방법을 나타낸 방법 다이어그램.
도 2는 본 발명에 따라 발생된 쿼리, 큐, 및 프로세스를 처리하는 것 및/또는 이후에 기술되는 프로세스 커널을 실행하는 것 등의, 본 발명의 어떤 측면을 실시하기 위한 적당한 컴퓨팅 시스템 환경(200)의 예를 나타낸 것이다. 컴퓨팅 시스템 환경(200)은 적당한 컴퓨팅 환경의 한 예에 불과하며 본 발명의 사용 또는 기능의 범위에 관한 어떤 제한을 암시하려고 하는 것이 아니다. 컴퓨팅 환경(200)은 도시되고 설명된 컴포넌트의 임의의 하나 또는 그의 조합에 관하여 어떤 의존 관계 또는 요구 조건을 갖는 것으로 해석되어서도 안된다.
본 발명은 많은 다른 범용 또는 특수 목적의 컴퓨팅 시스템 환경 또는 구성 에서 동작한다. 본 발명과 함께 사용하기에 적합할 수 있는 공지의 컴퓨팅 시스템, 환경 및/또는 구성의 예로는 퍼스널 컴퓨터, 서버 컴퓨터, 핸드헬드 또는 랩톱 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋톱 박스, 프로그램가능 가전 제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템 또는 장치 중 임의의 것을 포함하는 분산 컴퓨팅 환경 등이 있지만 이에 한정되는 것은 아니다.
본 발명은 컴퓨터에 의해 실행되는 프로그램 모듈 등의 컴퓨터 실행가능 명령어의 일반적인 관점에서 기술된다. 일반적으로, 프로그램 모듈로는 특정의 태스크를 수행하거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등이 있다.
본 발명은 또한 태스크들이 통신 네트워크를 통해 연결되어 있는 원격 프로세싱 장치들에 의해 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함한 로컬 및 원격 컴퓨터 저장 매체 둘다에 위치할 수 있다.
도 2에 도시된 컴퓨팅 시스템 환경은 컴퓨터(210) 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(210)의 컴포넌트들로는 프로세싱 유닛(220), 시스템 메모리(230), 및 시스템 메모리를 포함한 여러가지 시스템 컴포넌트를 프로세싱 유닛(220)에 연결시키는 시스템 버스(221)가 있을 수 있지만, 이에 한정되는 것은 아니다. 시스템 버스(221)는 메모리 버스나 메모리 콘트롤러, 주변 버스, 및 각종의 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 포함한 몇가지 유형의 버스 구조 중 임의의 것일 수 있다. 제한이 아닌 예로서, 이러한 버스 아키텍처로는 ISA(Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 로컬 버스, 및 메자닌 버스라고도 하는 PCI(Peripheral Component Interconnect) 버스가 있다.
컴퓨터(210)는 일반적으로 각종의 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터(210)에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있으며, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체 둘다를 포함한다. 제한이 아닌 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등의 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 분리형 및 비분리형 매체 둘다를 포함한다. 컴퓨터 저장 매체로는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 기타 메모리 기술, CD-ROM, DVD 또는 기타 광학 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 임의의 다른 컴퓨터 저장 매체가 있지만, 이에 한정되는 것은 아니다. 통신 매체는 일반적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터를, 반송파 또는 임의의 정보 전달 매체를 포함하는 다른 전송 메카니즘 등의 변조된 데이터 신호에 구현한다. 용어 "변조된 데이터 신호"는 그의 특성 중 하나 이상이 정보를 그 신호에 인코딩하기 위해 설정 또는 변경된 신호를 의미한다. 제한이 아닌 예로서, 통신 매체로는 유선 네트워크 또는 직접 유선 연결 등의 유선 매체, 및 음향, RF, 적외선, 및 기타 무선 매체 등의 무선 매체가 있다. 상기한 것 중 임의의 것의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
시스템 메모리(230)는 판독 전용 메모리(ROM)(231) 및 랜덤 액세스 메모리(RAM)(232) 등의 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에 컴퓨터(210) 내의 구성요소들 사이에서의 정보의 전달을 돕는 기본적인 루틴을 포함하는 기본 입출력 시스템(233)(BIOS)은 일반적으로 ROM(231)에 저장된다. RAM(232)은 일반적으로 프로세싱 유닛(220)에 의해 직접 액세스 가능하고 및/또는 현재 그에 의해 처리되고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 제한이 아닌 예로서, 도 2는 오퍼레이팅 시스템(234), 애플리케이션 프로그램(235), 기타 프로그램 모듈(236), 및 프로그램 데이터(237)를 도시하고 있다.
컴퓨터(210)는 또한 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 단지 예로서, 도 2는 비분리형, 비휘발성 자기 매체로부터 판독하거나 그에 기록하는 하드 디스크 드라이브(241), 분리형, 비휘발성 자기 디스크(252)로부터 판독하거나 그에 기록하는 자기 디스크 드라이브(251), 및 CD-ROM 또는 다른 광학 매체 등의 분리형, 비휘발성 광학 디스크(256)로부터 판독하거나 그에 기록하는 광학 디스크 드라이브(255)를 도시하고 있다. 예시적인 오퍼레이팅 환경에서 사용될 수 있는 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD, 디지털 비디오 테이프, 고체 상태 RAM, 고체 상태 ROM 등을 포함하지만 이에 한정되는 것은 아니다. 하드 디스크 드라이브(241)는 일반적으로 인터페이스(240) 등의 비분리형 메모리 인터페이스를 통해 시스템 버스(221)에 연결되고, 자기 디스크 드라이브(251) 및 광학 디스크 드라이브(255)는 일반적으로 인터페이스(250) 등의 분리형 메모리 인터페이스에 의해 시스템 버스(221)에 연결된다.
전술하고 도 2에 도시한 드라이브 및 그의 관련된 컴퓨터 저장 매체는 컴퓨터(210)의 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 저장을 제공한다. 도 2에서, 예를 들어 하드 디스크 드라이브(241)는 오퍼레이팅 시스템(244), 애플리케이션 프로그램(245), 기타 프로그램 모듈(246), 및 프로그램 데이터(247)를 저장하는 것으로 도시되어 있다. 유의할 것은 이들 컴포넌트가 오퍼레이팅 시스템(234), 애플리케이션 프로그램(235), 기타 프로그램 모듈(236), 및 프로그램 데이터(237)과 동일하거나 그와 다를 수 있다는 것이다. 오퍼레이팅 시스템(244), 애플리케이션 프로그램(245), 기타 프로그램 모듈(246), 및 프로그램 데이터(247)에는 최소한 이들이 서로 다른 복사본임을 나타내기 위해 본 명세서에서 서로 다른 번호가 부여되어 있다. 사용자는 키보드(262) 및 포인팅 장치(261) 등의 입력 장치를 통해 컴퓨터(210)에 명령 및 정보를 입력할 수 있으며, 포인팅 장치는 통상 마우스, 트랙볼, 또는 터치 패드라고 한다. 다른 입력 장치(도시 생략)로는 마이크로폰, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있을 수 있다. 이들 및 다른 입력 장치는 종종 시스템 버스에 연결된 사용자 입력 인터페이스(260)를 통해 프로세싱 유닛(220)에 연결되지만, 병렬 포트, 게임 포트, 또 는 유니버설 직렬 버스(USB) 등의 다른 인터페이스 및 버스 구조에 의해 연결될 수 있다. 모니터(291) 또는 다른 유형의 디스플레이 장치는 또한 비디오 인터페이스(290) 등의 인터페이스를 통해 시스템 버스(221)에 연결된다. 모니터 이외에, 컴퓨터는 또한 입/출력 주변 인터페이스(295)를 통해 연결될 수 있는 스피커(297) 및 프린터(296) 등의 다른 주변 출력 장치를 포함할 수 있다.
컴퓨터(210)는 원격 컴퓨터(280) 등의 하나 이상의 원격 컴퓨터로의 논리적 연결을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(280)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치, 또는 기타 통상의 네트워크 노드일 수 있으며, 비록 메모리 저장 장치(281)만이 도 2에 도시되어 있지만, 일반적으로 컴퓨터(210)와 관련하여 상기한 구성요소들의 대부분 또는 그 전부를 포함한다. 도 2에 도시된 논리적 연결은 근거리 통신망(LAN)(271) 및 원거리 통신망(WAN)(273)을 포함하지만, 다른 네트워크도 포함할 수 있다. 이러한 네트워크 환경은 사무실, 전사적인 컴퓨터 네트워크, 인트라넷 및 인터넷에서 통상적인 것이다.
LAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(210)는 네트워크 인터페이스 또는 어댑터(270)를 통해 LAN에 연결된다. WAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(210)는 일반적으로 모뎀(272) 또는 인터넷 등의 WAN(273)을 통해 통신을 설정하기 위한 다른 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(272)은 입/출력 주변 인터페이스(295) 또는 기타의 적당한 메카니즘을 통해 시스템 버스(221)에 연결될 수 있다. 네트워크화된 환경에서, 컴퓨터(210) 또는 그의 일부분 과 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 제한이 아닌 예로서, 도 2는 원격 애플리케이션 프로그램(285)을 메모리 장치(281) 상에 존재하는 것으로 도시하고 있다. 도시된 네트워크 연결은 단지 예시적인 것으로서 컴퓨터들 사이에 통신 링크를 설정하기 위한 다른 수단이 사용될 수 있음을 잘 알 것이다.
하나 이상의 컴퓨팅 태스크를 수행하기 위해 함께 동작하는 컴포넌트 구성요소들의 집합체인 시스템(300)이 도 3a에 도시되어 있다. 한 예는 각각이 마이크로프로세서, 그의 관련 칩 및 회로, 입력 및 출력 장치, 및 주변 장치(도시 생략)를 포함하는 개인 휴대 단말기(PDA)(302), 셀룰러 전화(334), 및 데스크톱 컴퓨터(336) 등의 다수의 컴퓨팅 장치를 포함할 수 있는 하드웨어 시스템(344)이다. 설명의 편의상, 후속 도면에 유일하게 도시된 컴퓨팅 장치는 개인 휴대 단말기(PDA)이다.
시스템(300)은 오퍼레이팅 시스템 커널(303A) 등의 일련의 프로그램 및 데이터 파일을 포함하는 오퍼레이팅 시스템(342), 하나 이상의 장치 드라이버(303B), 및 프로세스 커널(302C)을 포함한다. 오퍼레이팅 시스템(342) 하부에는 하드웨어 추상화 계층(hardware abstraction layer)(301)이 연결되어 있다. 하드웨어 추상화 계층(301)은 하드웨어 시스템(344)의 장치들(컴퓨팅 장치(302), 셀룰러 전화(334), 및 데스크톱 컴퓨터(336) 등)에 액세스하기 위해 프로그래머가 사용하기 위한 애플리케이션 프로그래밍 인터페이스이다. 오퍼레이팅 시스템 커널(303A)은 오퍼레이팅 시스템(342)의 코어이며, (하드웨어 추상화 계층(301)을 통해) 메모리, 파일, 및 주변 장치를 관리하고, 시간 및 날짜를 유지하며, 웹 서비스(302A) 등의 애플리케이션을 기동시키고 또 시스템 자원을 할당하도록 설계되어 있다. 장치 드라이버(303B)는 웹 서비스(302A)가 컴퓨팅 장치(302) 등의 장치와 통신할 수 있게 해주는 별도의 컴포넌트이다. 프로세스 커널(302C)은 웹 서비스(302A)를 프로세스(302B)로서 나타내고, 프로세스(302B)를 관리하며, 프로세스(302B)의 다른 프로세스와의 통신을 용이하게 해준다(이하에 기술됨). 오퍼레이팅 시스템 커널(303A), 장치 드라이버(303B), 및 프로세스 커널(303C)은 오퍼레이팅 시스템(342)의 커널 모드 부분에 존재하는 반면, 웹 서비스(302A) 및 프로세스(302B)는 오퍼레이팅 시스템(342)의 사용자 모드 부분(346)에 존재한다. 다른 대안에서, 프로세스 커널(303C)이 COM(Component Object Model, 컴포넌트 객체 모델) 등의 다른 시스템 소프트웨어 컴포넌트(305,307)(도 3b)의 하부에 연결되는 경우, 프로세스 커널(303C)은 사용자 모드 부분(346)에 존재할 수 있다.
본 발명에 따라 사용되는 용어 "프로세스"는 동작을 수행함으로써 진화하는 기능을 갖거나 다른 프로세스가 진화할 수 있게 해주는 하나 이상의 계산 엔티티(computation entity)의 동적 표현을 의미한다. 환언하면, 용어 "프로세스"는 계산 엔티티의 이중적 특성 중 하나를 나타낸다. 계산 엔티티가 쉬고 있는 경우, 그 엔티티는 프로그램 보기 등에 의해 검사될 수 있다. 계산 엔티티가 (프로세스로서) 동작하고 있는 경우, 그 엔티티를 볼 수는 없지만 그의 거동은 본 발명에 따라 형성된 프로그래밍 언어(400)에 의해 표현되고 검증될 수 있다(이하에 기술함).
웹 서비스(302A)는 어떤 서비스를 전담하도록 설계된다. 더 많은 기능을 달 성하기 위해, 웹 서비스(302A)는 웹 서비스(302A)의 범위 내에 있지 않은 서비스를 제공할 수 있는 다른 웹 서비스들의 도움을 얻을 수 있다. 다른 웹 서비스들을 찾아내기 위해, 웹 서비스(302A)는 디렉토리 프레임워크(326)와 통신할 수 있다. 디렉토리 프레임워크(326)는 인터넷 상의 웹 서비스들을 찾아내어 등록하는 방법을 제공하는 플랫폼-독립적인 소프트웨어(디렉토리 프레임워크)이다. 디렉토리 프레임워크(326)는 다수의 등록된 웹 서비스를 포함하고 이들 웹 서비스에 대한 상세한 기술적 정보를 포함하는 저장소(330)를 포함한다. 디렉토리 프레임워크(326)의 발견 컴포넌트(328)는 원하는 웹 서비스를 찾아내기 위해 프로세스(302B)와 저장소(330) 사이의 중개자로서 역할한다.
디렉토리 프레임워크(326)가 웹 서비스(302A)에 의해 요청된 적당한 웹 서비스를 발견하면, 웹 서비스(302A)는 원하는 태스크를 달성하기 위해 발견된 웹 서비스와 상호 작용하기 시작할 수 있다. 도 3b는 발견된 웹 서비스(304A)를 나타낸 것이다. 프로세스 커널(304C)은 웹 서비스(302A, 304A)의 태스크를 달성하기 위해 웹 서비스(304A)를, 큐(310) 등의 통신 수단을 거쳐 프로세스(302B)와 상호작용하는 프로세스(304B)로서 나타낸다.
프로세스들이 그를 통해 통신하는 큐(310)는 데이터베이스, 채널, 또는 다른 적당한 구조화된 저장소 등의 여러가지 형태를 취할 수 있다. 컴퓨팅 장치(302, 304)가 서로 멀리 떨어진 지리적 장소에 위치될 수 있기 때문에, 프로세스(302B, 304B)는 공유 메모리를 통해 통신할 수 없다. 큐(310) 등의 적당한 통신 수단은 프로세스(302B, 304B)로 하여금 서로 다른 시간에 실행되고 있는 동안에 일시적으로 오프라인일 수 있는 이기종 네트워크 및 시스템을 거쳐 통신할 수 있게 해주는 기술을 포함한다. 프로세스(302B, 304B)는 통신 수단으로 메시지를 전송하고 통신 수단으로부터 메시지를 판독한다. 통신 수단은 보장된 메시지 전달, 효율적인 라우팅, 보안 및 우선순위 기반 메시징을 제공할 수 있다. 게다가, 통신 수단은 고성능을 필요로 하는 비동기 시나리오 및 동기 시나리오 둘다에 대한 해결책을 구현하는 데 사용될 수 있다. 전술한 바와 같이, 적당한 통신 수단의 구체적인 예로는 다른 구조화된 저장소 중에서도 특히 채널, 큐, 또는 데이터베이스가 있다. 큐(310-316)가 데이터베이스인 경우, 이들은 레코드로 이루어진 파일이며, 각각의 레코드는 다수의 테이블로 구성된, 검색, 소트, 재결합 및 다른 처리 기능을 위한 일련의 동작과 함께 필드를 포함하고, 각각의 테이블은 행과 열로 구성되는 데이터 구조이고, 데이터는 행-열 교차점으로 형성되는 각각의 셀을 차지하거나 잠재적으로 차지하게 된다.
프로세스 커널(302C, 304C)의 내부 아키텍처는 프로세스를 정의하고 프로세스들 간의 상호작용을 규율하는 소프트웨어 컴포넌트를 포함하는 프로세스 가상 머신(302C1, 304C1), 쿼리를 정의하고 쿼리와 큐 사이의 상호작용을 규율하는 소프트웨어 컴포넌트를 포함하는 쿼리 가상 머신(302C3, 304C3), 쿼리, 큐, 및 프로세스 간의 상호작용을 규율하는 소프트웨어 컴포넌트를 포함하는 반응 가상 머신(302C2, 304C2), 및 프로세스 커널(302C, 304C)을 컴퓨팅 장치(302, 304) 상의 시스템 소프트웨어 컴포넌트(305, 307)(그 중에서도 특히, COM 및 오퍼레이팅 시스템 등)의 상세로부터 분리시키는 소프트웨어 컴포넌트를 포함하는 전이 가상 머신(302C4, 304C4)을 포함한다.
컴퓨팅 장치(302, 304)는 근거리 통신망, 원거리 통신망 또는 무선 네트워크(338)를 통해 상호작용하고 통신하며 정보를 교환한다. 프로세스(302B, 304B)는 메시지(318) 등의 메시지를 교환하기 위해 큐(310)를 거쳐 통신한다. π-연산구조 및 그의 변형을 구현하는 종래 시스템과는 달리, 본 발명에 따라 형성된 시스템(300)은 메시지(318) 등의 메시지가 프로세스(302B, 304B) 사이의 교환에서 프로세스 커널(302C, 304C)에 의해 프로세스로서 표현될 수 있게 해준다. 이것에 의해 많은 다른 것 중에 특히 API의 호출 순서 등의 프로그램 또는 웹 서비스의 협력적 차원이 프로세스(302B, 304B) 사이에 표현될 수 있게 된다.
도 3c는 시스템(300)을, 서로와 통신할 수 있고 또 사용자에게 공유 하드웨어, 소프트웨어 및 데이터의 하나의 대규모 액세스가능한 "저장소(storehouse)"로서 보이는 다수의 컴퓨팅 장치(302, 304, 306, 308)를 포함하는 비집중식 네트워크로서 나타내고 있다. 시스템(300)은 컴퓨터 과학자의 관점에서 볼 때 개념적으로 덤 클라이언트(dumb client)가 메인프레임 등의 단일의 스마트 중앙 컴퓨터에 연결되어 있는 것인 집중식 또는 모놀리딕 시스템의 반대인 분산 시스템이다. 시스템(300)은, 고도로 분산된 병행 프로세스(302B, 304B, 306B, 308B)가 컴퓨팅 장치(302-308) 상에서 병렬로 상호작용하는 동적 네트워크 토폴로지이다.
프로세스(302B-308B)는 메시지 또는 쿼리로서 큐(310-314)로 전송된 정보를 서로에게 표현하기 위해 협력한다. 통신 수단을 거쳐 전송된 여러 정보로는 실행의 순서, 데이터의 타이밍, 서비스의 품질, 및 데이터의 해석 또는 데이터에 대한 연산의 수행을 용이하게 하는 방식으로 데이터를 포함하고 데이터를 기술하는, 프로세스(302B-308B) 사이의 커스터마이즈가능한 태그 기반 언어로부터 형성된 구성 방식의 전달이 있다. 하나의 적당한 커스터마이즈가능한 태그 기반 언어가 확장가능 마크업 언어(XML)이지만, 본 발명은 이 언어에 한정되지 않는다. 다른 커스터마이즈가능한 태그 기반 언어가 사용될 수 있다.
본 발명에 따라 형성된 프로그래밍 언어(400)(도 4)에 의해 프로세스(302B-308B) 사이의 협력적 통신이 제공된다. 언어(400)는 π-연산구조의 고차 변형(high-order variant)이다. 환언하면, 언어(400)는 프로세스 기반 언어이다. 보다 구체적으로는, 이하에 기술하는 다른 특성 이외에, 언어(400)는 프로그램적으로 "라이브니스(liveness)"를 검출할 수 있는 기능을 가지고 있다. 라이브니스는 프로세스가 활성 상태(alive)에 있음을 나타내는 표지이다. 프로그램이 신뢰를 얻어 그 프로그램이 하도록 설계된 일을 하기 위해서는 이 특성이 프로그램적으로 검증될 필요가 있다. 언어(400)로 작성된 웹 서비스(302A) 등의 프로그램은 프로그램적으로 "라이브니스"에 대한 검증을 받을 수 있다. 다른 특성으로는 프로세스(302B-308B) 및 자원 액세스 런타임 에러의 보안을 분석할 수 있는 기능이 있다. 보안 문제로는 컴퓨팅 장치(302-308) 및 그의 데이터를 유해 또는 손실로부터 보호하는 것이 있다. 특히 다수의 큐(310, 312, 314, 316)를 통해 많은 사람에 의해 액세스되는 시스템(300) 등의 비집중식 네트워크에 대한 보안의 한가지 주된 촛점은 비인가 개인에 의한 액세스의 방지이다. 언어(400)로 작성된 웹 서비스(302A)는 신뢰할 수 없는 웹 프로그램 또는 신뢰할 수 없는 컴퓨팅 장치에 의해 야기되는 보안 문제를 검지하기 위해 검증될 수 있다.
언어(400)의 형식적인 수학적 정의는 부록에 주어져 있다. 언어(400)는 문법, 구조적 등가의 규칙, 및 동작적 의미론의 규칙을 포함한다. 언어(400)의 문법은 쿼리 및 프로세스의 구문적 요소가 허용가능한 프로그래밍 서술문을 형성하기 위해 합성되는 방식을 정의하는 규칙의 체계이다. 환언하면, 언어(400)의 문법으로 정확하게 표현할 수 없는 경우, 한 프로세스에서 다른 프로세스로 API의 호출 등의 개념을 전달할 수 없다. 표현식이 정확하게 형성되면, 의미론의 규칙은 표현식을 의미와 연결시킨다. 프로세스가 동적이기 때문에, 언어(400)는 동작적 의미론을 사용하여 의미를 프로세스와 결합시킨다. 환언하면, 프로세스는 다른 프로세스와 함께 동작하거나 그와 상호 작용함으로써 진화한다. 언어(400)의 표현식의 의미를 이해하는 것은 그의 동작을 이해하는 것과 직접 관련되어 있다. 구조적 등가의 규칙에 의해 언어(400)의 동작적 의미론은 표현식이 다른 표현식에 비유될 수 있다는 점에서 단순화될 수 있다. 따라서, 동작적 의미론의 규칙의 수는 적게 유지될 수 있는데, 그 이유는 이들 규칙이 표현식의 순열에 적용될 수 있기 때문이다.
언어(400)는 몇가지 주요 구문 카테고리, 즉 서로 다른 시간에 또는 동시에 실행되는 프로세스가 메시지를 통해 통신할 수 있게 해주는 것인 큐, 데이터베이스, 통신 채널 또는 임의의 구조화된 저장소를 표현하는 큐 구문(402), 메시지를 어셈블(assemble) 및 디스어셈블(disassemble)하고 큐 구문(402)에 의해 표현된 구조화된 저장소를 처리하며 또 메시지 패턴을 검출하기 위해 데이터 처리 언어로 작 성된 명령어를 표현하는 쿼리 구문(404), 및 API 등의 이름 뿐만 아니라 메시지 등의 프로세스를 큐 구문(402)에 의해 표현된 구조화된 저장소를 거쳐 교환할 수 있는 계산 엔티티의 동적 측면을 표현하는 프로세스 구문(406)을 갖는다. 큐 구문(402), 쿼리 구문(404), 및 프로세스 구문(406)은 함께 언어(400)의 주요 구문적 요소를 형성한다. 언어(400)의 구문적 요소(402-406)는 단독으로 사용되거나 프로세스(302B-308B) 등의 프로세스들 간의 협력적 뉘앙스를 표현하기 위해 순열 형태로 결합될 수 있다. 구문적 규칙(도 11c 내지 도 11f 및 부록의 섹션 1.1을 참조하여 상세히 기술됨), 구조적 등가 규칙(도 11j 및 부록의 섹션 2.1을 참조하여 이하에 보다 상세히 기술됨), 및 동작적 의미론 규칙(도 11o 내지 도 11r 및 부록의 섹션 3.1을 참조하여 이하에 보다 상세히 기술됨)은 쿼리와 연계하여 쿼리 가상 머신(302C3, 304C3)에 배치되어 있다. 구문적 규칙(도 11g 내지 도 11i 및 부록의 섹션 1.2를 참조하여 상세히 기술됨), 구조적 등가 규칙(도 11k 내지 도 11n 및 부록의 섹션 2.2를 참조하여 이하에 보다 상세히 기술됨), 및 동작적 의미론 규칙(도 11s 내지 도 11v 및 부록의 섹션 3.2를 참조하여 이하에 보다 상세히 기술됨)은 프로세스와 연계하여 프로세스 가상 머신(302C1, 304C1)에 배치되어 있다. 반응 가상 머신(302C2, 304C2)은 큐, 쿼리, 및 프로세스가 서로에 반응하는 방법을 정의하는 동작적 의미론 규칙을 포함하고 있다.
프로그래밍 언어(400)는 병렬로 실행되고 큐(310-314) 등의 통신 수단을 거쳐 상호작용하는 프로세스(302B-308B) 등의 프로세스를 기술하기 위한 표현식이 형성될 수 있게 해준다. 수학적으로, T와 P가 프로세스인 경우, 표현식 T|P는 프로세스 T, P가 병렬로 실행되고 있으며 잠재적으로 통신 수단을 통해 서로 또는 외부 세계와 통신하고 있음을 기술한다.
큐(310-314)는 이름(그에 대응하여 "X", "Y", "Z" 및 "W"임)에 의해 표현된다. 프로그래밍 언어(400)는 그 중에서도 특히 프로세스(318-324) 등의 어떤 부류의 프로세스의 전달이 큐(310-314) 상의 메시지로서 표현될 수 있게 해준다. 프로세스(318-324)는 데이터의 해석 또는 데이터에 대한 연산의 수행을 용이하게 해주는 방식으로 데이터를 포함하고 또 데이터를 기술하는 커스터마이즈가능한 태그 기반 언어로부터 형성된 구성 방식을 구현한다. 한가지 예시적인 구성 방식으로는 쿼리가 있다. 다른 예시적인 구성 방식으로는 메시지가 있다. 또다른 예시적인 구성 방식으로는 XML 문서가 있다.
쿼리는 데이터 및 데이터를 처리하기 위한 정보를 포함한다. 이 예를 생각해보자. 컴퓨팅 장치(302)는 출판사에 있는 컴퓨터를 나타내고 컴퓨팅 장치(304)는 서점에 있는 컴퓨터를 나타낸다. 출판사 및 서점 둘다는 책의 저자, 제목, 및 출판일에 관한 정보를 위한 그 자신의 태그를 XML로 정의할 수 있는 독립적인 기능을 가지고 있다. 이러한 책 정보는 적절한 태그를 갖는 XML 문서로 구성될 수 있다. 이 정보는 출판사에 있는 컴퓨팅 장치(302) 또는 서점에 있는 컴퓨팅 장치(304)에 의해 교환되며, 이들 컴퓨팅 장치는 XML 문서를, 프로세스 커널(302C-30C)에 의해 프로세스(302B)와 프로세스(304B) 사이에서 큐(310)를 거쳐 전달되는 프로세스(318) 등의 프로세스로서 표현되는 쿼리로 변환한다.
이전의 π-연산구조 변형은 XML 문서 등의 구조화된 정보가 큐(310) 등의 통 신 수단을 거쳐 전달될 수 있게 해주지 못한다. 그렇지만, 애플리케이션의 실제 수행은 때때로 구조화된 정보의 어떤 교환을 필요로 한다. 적절한 경우로는 API의 호출 순서를 표현하는 구조화된 정보가 있다. 다른 적절한 경우로는 출판사와 서점 간의 상기한 예이다. 프로그래밍 언어(400)는 다차원 데이터(데이터 구조)가 프로세스(318-324) 등의 프로세스에 구현될 수 있게, 즉 프로세스(302B-308B) 사이에 전달되는 메시지로서 전달될 수 있게 해준다. 언어(400)는 병행 분산형 비집중식 네트워크에서 큐를 거쳐 프로세스 간에 (데이터의 해석 또는 데이터에 대한 연산의 수행을 용이하게 해주는 방식으로 데이터를 포함하고 데이터를 기술하는 커스터마이즈가능한 태그 기반 언어로 표현되는) 구성 방식의 교환을 용이하게 해주기 위한 환경의 생성을 가능하게 해준다.
도 5는 큐(310)(X), 쿼리(504, 506)(Q0, Q1), 및 프로세스(302B, 304B)(T, P)를 관련시키는 구문 표현식을 시각적으로 나타낸 것이다. 큐(310-316)에는 하나 이상의 쿼리(502)가 저장되어 있으며, 이 쿼리는 명백한 구조를 갖지 않는 구조화된 데이터 또는 이름을 구현하는 프로세스이다. XML 문서(500A) 등의 구조화된 데이터 파일을 큐(310)를 거쳐 프로세스(302B)로부터 프로세스(304B)로 전달하기 위해, 프로세스(302B)는 XML 문서(500A)를 쿼리(500B)로 변환한 다음에 쿼리(500B)를 큐(310)에 기록한다. 쿼리(500B)는 프로세스 커널(302C-308C)에 의해 프로세스로서 취급된다. π-연산구조의 이전의 변형과는 달리, 프로그래밍 언어(400)는 쿼리(500B) 등의 프로세스가 큐(310) 등의 통신 수단을 통과할 수 있도록 해준다. 쿼 리(500B)는 쿼리(500B)가 또한 XML 문서(500A)의 구조화된 콘텐츠를 포함한다는 점에서 순수 이름 그 이상을 포함한다. 쿼리(500B)를 획득하기 위해, 프로세스(304B)는 큐(310)를 읽는다.
프로그래밍 언어(400)는 쿼리를 어셈블 및 디스어셈블하고 큐를 처리하며 또 쿼리에서 패턴을 검출하는 데 사용되는 일련의 쿼리 동작을 제공한다. 다른 쿼리 동작은 메시지를 큐에 집어 넣고, 큐로부터 메시지를 가져오며 또 기존의 메시지로부터 새 메시지를 작성하는 데 사용된다. 쿼리는 2 부분, 즉 헤드와 보디로 이루어져 있다. 쿼리의 헤드는 일련의 파라미터와 그의 대응하는 유형을 정의한다. 보디는 일련의 바인딩이다. 쿼리는 그의 파라미터를 인수에 바인딩하고 그의 일련의 바인딩을 활성화시킴으로써 호출된다. 바인딩은 2개의 항 사이의 관계를 정의한다. 모든 항이 서로 바인딩될 수 있는 것은 아니다. 바인딩이 어떤 유형의 항을 그의 상보적 유형의 항에 바인딩할 때 유효 바인딩이 존재한다. 쿼리는 종래의 프로시저에 비유될 수 있다. 쿼리의 헤드는 프로시저의 서명과 같고, 쿼리의 보디는 프로시저의 일련의 프로그래밍 서술문과 같으며, 각각의 바인딩은 프로시저의 서명의 파라미터에 저장된 데이터를 사용하거나 프로시저의 서명의 파라미터에 데이터를 배치하는 프로그래밍 서술문이다.
수학적으로, 큐(310), 쿼리(500B) 및 프로세스(304B) 사이의 관계는 구문적으로 X[Q0].P로 표현될수 있으며, 여기서 X는 큐(310)이고, Q0는 쿼리(500B)이며, P는 쿼리(Q0)가 큐(X)에 기록된 후의 계속점인 프로세스(304B)이다. 따라서, 언어학 적으로, 수학적 표현 X[Q0].P는 쿼리(500B)를 큐(310)에 배치하는 프로세스를 기술하며, 그 후에 이 프로세스는 프로세스(304B)의 실행으로 계속된다. 프로그래밍 언어(400)의 프레임워크에서, Q0 및 P 둘다는 수학적 표기 X[Q0].P에서의 프로세스이다. 프로그래밍 언어(400)는 큐(X)를 거쳐 메시지로서 전달될 수 있는 프로세스의 서브셋(또는 어떤 부류의 프로세스)을 식별한다. 이 서브셋은 쿼리를 포함하며, 그 각각은 XML 문서에 포함된 것 등의 커스터마이즈가능한 태그 기반의 데이터 구조에 상관되어 있다.
언어(400)의 한가지 주된 측면은 쿼리 및 프로세스 사이의 구조적 등가를 결정하기 위한 등식 규칙의 집합체이다. 언어(400)의 이들 등식 규칙을 사용하여 구조적 등가를 결정하는 프로세스는 2개의 프로그램 또는 2개의 소프트웨어 사양 등의 2개의 프로그램적 문서가 모든 관련 사항에서 부합하는지 여부를 확인하기 위해 그 문서들 사이의 사소한 차이에 구애되지 않는다. 이러한 구조적 등가 규칙들은 언어(400)의 동작적 의미론이 상기한 바와 같이 단순화될 수 있게 해준다.
도 6a는 이 설명에 적합한 언어로 작성된 프로그램(602)이다. 프로그램(602)은 C 또는 C++ 등의 어떤 언어의 실행의 시작점인 main() 함수를 포함한다. 제1 대괄호 세트 사이에는 테스트 조건(A==7)을 포함하는 if문이 들어 있다. 테스트 조건은 변수 A가 값 7과 같은지 여부를 결정한다. 테스트 조건이 참인 경우, 제2 대괄호 세트 내에 포함된 프로그래밍 서술문(programming statement)이 실행된다. 제1 프로그래밍 서술문은 인수로서 변수 P0를 취하는 fork() 함수를 호출한 다. 어떤 언어에서의 fork() 함수는 부모 프로세스가 시작된 후에 병행 시스템 내의 자식 프로세스를 기동시킨다. 이 경우, 자식 프로세스는 인수 P0에 의해 표현된다. 이와 같이 fork() 함수의 호출 후에, 자식 프로세스 P0는 프로그램(602)을 실행하는 부모 프로세스와 병렬로 실행된다. 제2 프로그래밍 서술문도 fork() 함수의 호출을 포함하지만, 변수 P0를 인수로서 취하지 않고, fork() 함수의 제2 호출은 변수 P1을 인수로서 취한다. 인수 P1에 의해 표현된 또하나의 자식 프로세스가 제2 fork() 함수의 호출로 기동된다. 자식 프로세스(P0, P1)는 제2 대괄호 세트의 닫기 대괄호로부터의 프로그램 흐름의 출구에서 서로 병렬로 실행된다.
또하나의 프로그램(604)은 여러가지 점에서 프로그램(602)과 유사하지만, 몇가지 다른 점이 있다. 한가지 차이점은 변수 A 대신에 변수 B를 포함하는, 프로그램(604)의 IF 문의 테스트 조건이다. 또하나의 차이점은 자식 프로세스 P1이 자식 프로세스 P0의 호출 이전에 fork() 함수의 첫번째 호출로 기동된다는 것이다. 이들 차이점에도 불구하고, 양쪽 프로그램(602, 604)의 논리적 흐름은 궁극적으로 양쪽 IF 문의 테스트 조건이 참인 경우 양쪽 프로그램(602, 604)의 fork() 문에 도달한다. 따라서 변수 A, B의 이름에 있어서의 차이는 무시될 수 있으며, 프로그램(602, 604)의 논리적 구조에 영향을 주지 않는다. 게다가, 자식 프로세스(P0, P1)가 병렬로 실행되기 때문에, 그의 호출의 순서도 무시될 수 있다.
전술한 바와 같이, 프로그램(602)은 구조적 등가 분석을 방해하는 여러가지 다양한 문법적 구조를 포함하는 많은 다른 프로그래밍 언어에 의해 작성될 수 있다. 언어(400)를 사용하여, 프로그램(602)은 프로그램(602)의 문법적 상세와 별도 인 특성에 의해 표현될 수 있다. 예를 들어, 프로그램(602)의 핵심은 자식 프로세스(P0, P1)를 병렬로 실행하는 것이다. 이 핵심은 프로그램(602)을 사양(602A)으로 변환함으로써 언어(400)에 의해 표현될 수 있다. 프로세스(P0, P1)의 병렬 실행은 프로그램(602A)에서 "P0|P1"으로서 표현된다. 서술문 "P0|P1"은 태그 <I_DO>와 그의 대응하는 종료 태그 </I_DO> 사이에 들어 있다.
자식 프로세스(P0)가 또하나의 자식 프로세스(P2)와 병렬로 실행되도록 요망되는 서비스를 프로세스(302B)가 필요로 하는 것으로 가정하자. 이러한 요건은 언어(400)으로 작성된 사양(302D)에 나타낸 바와 같은 서술문 "P0|P2"에 의해 포착된다. 서술문 "P0|P2"은 태그 <I_NEED>와 그의 대응하는 종료 태그 </I_NEED> 사이에 있다. 추가로 프로그램(602)이 프로세스(302B)가 달성하고자 하는 태스크에 적합한지를 결정하기 위해 프로세스(302B)가 발견 컴포넌트(328)로부터 사양(602A)을 획득하는 것으로 가정하자. 구조적 등가 분석을 사용하여, 프로세스(302B)는 프로그램(602A)이 사양(302D)에 의해 지정된 바와 같은 요청 서비스를 제공할 수 없을 것임을 신속하게 결정할 수 있다. 이러한 이유는 프로그램(602)이 자식 프로세스(P0, P1)를 병렬로 실행하는 반면 프로세스(302B)는 그 대신에 자식 프로세스(P0, P2)가 병렬로 실행될 것을 요구하기 때문이다.
언어(400)의 일련의 등식 법칙 중의 한가지 등식 법칙은 하나의 큐가 동작 중에 있는 다른 큐를 대신할 수 있도록 겉보기에 별개인 큐들이 융합될 수 있게 해준다. 이것을 부록의 섹션 2.2에서 치환 등가(substitution equivalence)라고 부른다. 도 7a에 도시한 바와 같이, 프로세스(302B)는 메시지를 전송하고 수신하기 위해 (또는 쿼리를 기록하고 판독하기 위해) 큐(310)(큐 X)를 사용한다. 큐(310)를 사용하지 않고, 프로세스(304B)는 메시지를 전송하고 수신하기 위해 (또는 쿼리를 기록하고 판독하기 위해) 큐(702)(큐 X')와 통신한다. 쿼리가 이름 X가 이름 X'에 바인딩되어 있는 것(이름 X:=:이름 X')인 큐(702)에 배치되는 것으로 가정하자(단, 연산자 :=:는 언어(400)에서 바인딩 연산자임). 이것은 큐(310)가 큐(702)와 기본적으로 융합되어 있으며 따라서 프로세스(302B-304B)가 큐(310) 등의 동일한 큐 상에서 동작하거나 통신할 수 있게 됨을 나타낸다. 도 7b를 참조하기 바란다. 언어(400)의 등식 법칙을 사용하여, 프로세스(302B, 304B)는 큐(또는 다른 구조화된 저장소 중에서도 특히, 데이터베이스 또는 채널)에 액세스하는 새 방법을 발견할 수 있다.
π-연산구조의 종래의 변형의 입력/출력 메카니즘(I/O)는 비대칭이다. 이하의 수학적 일례를 생각해보자. , 여기서 및 U는 동일한 링크를 말하지만, 는 그 링크가 X 등의 무언가를 출력하고 있음을 나타내며, U는 그링크가 Y 등의 무언가를 입력하고 있음을 나타내고, X는 출력 데이터이며, Y는 입력 데이터이고, P, Q는 표현식 와 가 실행된 후에 계속되는 프로세스이다. 출력 데이터인 X가 채널 U에 바인딩되어 있지 않은 반면 입력 데이터인 Y가 채널 U에 바인딩되어 있다는 사실로부터 비대칭이 발생한다. "바인딩되어 있다"는 용어는 Y의 동작 범위가 Y가 바인딩되어 있는 링크로 제한되어 있음을 의미한다. 환언하면, 웹 서비스(116)()가 웹 서비스(108)로 웹 서비스(108)을 호출하는 데 사용 되는 API를 전달한 후에, 웹 서비스(116)는 그 API에 대해 잊어버리게 된다. 비대칭 I/O는 시스템(300) 등의 분산 네트워크 토폴로지의 형성을 방해한다. 본 발명은 대칭적 I/O를 제공함으로써 상기한 문제를 극복하거나 감소시킨다.
도 8은 본 발명에 따라 형성되는 시스템(300)의 대칭적 I/O 측면을 나타낸 것이다. 프로세스(302B)가 수학적으로 으로 정의되고, 여기서 T는 프로세스(302B)를 말하고 는 무언가를 출력하고 있는 동안의 큐(310)를 말하며, 는 무언가를 출력하고 있는 동안의 큐(312)를 말하고, 는 무언가를 출력하고 있는 동안의 큐(316)를 말하며, S는 프로세스(306B)를 말하는 것으로 가정하자. 또한 프로세스(304B)가 수학적으로 다음과 같이, 즉 로 정의되고, 여기서 P는 프로세스(304B)이고, X는 무언가를 입력하고 있는 동안의 큐(310)를 말하며, Y는 무언가를 입력하고 있는 동안의 큐(312)를 말하고, Z는 무언가를 입력하고 있는 동안의 큐(314)를 말하며, R은 프로세스(308B)를 말하는 것으로 가정하자. 프로세스 T가 프로세스 P와 병렬로 실행되는 것으로, 즉 수학적으로 인 것으로 가정하자. 실행에 있어서, 프로세스 는 큐(310)(X)로 배포되고, 프로세스 도 큐(310)로 배포된다. 이들 2개의 프로세스 및 가 큐(310)에서 반응한 후에, 프로세스 는 큐(312)(Y)로 배포된다. 이 때, 큐(312)에서, 실행 중인 프로세스와 병렬로 큐(316)를 큐(314)에 바인딩하는 쿼리가 발행되는 것으로, 즉 수학적으로 인 것으로 가정 하자. 이러한 쿼리의 발행으로, 큐(316)(W)는 큐(314)(Z)와 융합된다. W에서의 임의의 입력 또는 출력은 Z로 전달되고, 그에 따라 Z에서의 임의의 입력 또는 출력은 W로 전달되며, 따라서 분산 네트워크 토폴로지를 형성한다. 채널(312)로부터, 또하나의 서브프로세스 가 큐(316)(W)로 배포되고, 또하나의 서브프로세스 이 큐(314)(Z)로 배포된다. 큐(316)로부터, 프로세스(306B)(프로세스 S)는 계속점으로서 배포되고 실행된다. 큐(314)로부터, 프로세스(308B)(프로세스 R)도 또하나의 계속점으로서 배포되고 실행된다.
언어(400)는 그의 구문 이외에, 프로세스의 진화를 기술하기 위한 일련의 규칙을 갖는다. 환언하면, 이들 규칙은 언어(400)의 동작적 의미론을 정의한다. 언어(400)의 동작적 의미론은 구문 요소(402-406)와 그의 의도된 의미 사이의 관계를 기술한다. 따라서, 언어(400)로 작성된 프로그램 서술문은 구문적으로 정확할 수 있지만, 의미론적으로는 부정확할 수 있다. 환언하면, 언어(400)로 작성된 서술문은 타당한 형태로 되어 있을 수 있지만 여전히 잘못된 의미를 전달할 수 있다. 언어(400)의 동작적 의미론의 한 예는 도 9a 및 도 9b에 도식적으로 나타내어져 있는 통신 감축 규칙(반응 가상 머신(302C2, 304C2)에 구현되어 있음)이다. 쿼리(902A)(Q0)는 프로세스(302B)(T)에 의해 데이터베이스(904)(V)로 전송될 준비가 되어 있다.
설명의 편의상, 쿼리(902A)는 데이터베이스 폼(database form)으로 도시되어 있다. 이 폼은 데이터는 물론 데이터베이스(904)에 의해 데이터가 계산될 때 잠재적으로 채워질 수 있는 "홀"(hole)도 포함한다. 예를 들어, 쿼리는 답변될 질문에 대한 정보를 갖는 질문에 비유될 수 있다. 따라서, 정보는 폼 내의 데이터이고 답변은 폼 내의 홀을 채울 데이터이다. 다른 예로서, 폼은 충분한 정보가 이용가능한 경우 대수적으로 해를 구할 수 있는 선형 연립 방정식에 비유될 수 있다. 쿼리(902A)의 데이터베이스(904)로의 전송 후에, 프로세스는 프로세스(306B)(S)의 실행을 계속한다. 수학적으로, 폼(902A)을 데이터베이스(904)로 전송하고 프로세스(306B)를 계속하는 프로세스는 다음과 같이 기술될 수 있다. , 여기서 V는 데이터베이스(904)를 나타내고, Q0는 폼(902A)을 나타내며, S는 프로세스(306B)를 나타낸다.
폼(902A)을 데이터베이스(904)로 전송하고 프로세스(306B)를 계속하지 않고 프로세스는 폼(902C)을 데이터베이스(904)로 전송하고 그 후에 프로세스(308B)를 계속하는 것으로 가정하자. 수학적으로, 이것은 다음과 같이 기술될 수 있다. , 여기서 V는 데이터베이스(904)를 나타내고, Q1은 폼(902C)을 나타내며, T는 프로세스(308B)를 나타낸다.
프로세스 를 실행하는 것과 프로세스 를 실행하는 것 사이의 이러한 선택의 존재 시에, 이러한 선택은 데이터베이스(904)로 전송되는 폼(906A)(Q)으로 축약될 수 있고 그 후에 프로세스(306B, 308B) 둘다가 병렬로 실행된다. 도 9b를 참조하기 바란다. 수학적으로, 이 결과는 로 표현된다. 폼(906A)의 형성은 쿼리(906A)가 표준형(이하에 기술됨)으로 되도록 폼(902A, 904A)을 결합함으로써 일어난다. 반면에 2개의 서로 다른 별개의 폼(902A, 902C)으로부터의 쿼리(906A)의 형성으로 2개의 대안( 또는 ) 사이에 단지 하나의 선택만이 행해질 수 있기 전에, 하나의 폼(906A)이 데이터베이스(904)로 전송될 수 있고 프로세스(306B, 308B) 둘다가 활성 상태로 되고 병렬로 실행된다. 이것을 이해하는 한가지 방법은 폼(902A)을 3개의 항을 갖는 제1 선형 연립 방정식에 비유하고 폼(902C)을 3개의 항을 갖는 제2 선형 연립 방정식에 비유하는 것이다. 선형 대수의 수학으로부터, 2개의 선형 연립 방정식에 대한 해가 아직 없지만 부가의 데이터(또하나의 선형 연립 방정식)가 주어진 경우, 모든 항의 해가 구해질 수 있도록 2개의 선형 연립 방정식이 폼으로 계산될 수 있음을 결론지을 수 있다. 폼(906A)은 더 이상 데이터가 없는 경우 추가의 계산이 수행될 수 없는 것인 2개의 폼(902A, 902C)의 계산을 나타낸다.
도 10a 내지 도 10c는 프로세스의 진화를 위한 또하나의 동작적 의미론 규칙, 리프트 규칙(lift rule)(도 11u 및 부록의 섹션 3.2를 참조하여 보다 상세히 기술됨)을 도식적으로 나타낸 것이다. 도 10a에 도시한 바와 같이, 프로세스(302B)는 메시지(또는 쿼리)를 전송하고 수신하기 위해 데이터베이스(1006, 904)와 개별적으로 통신한다. 데이터베이스(1006)는 "U"라고 명명되고, 데이터베이스(904)는 "V"라고 명명되어 있다. 프로세스(306B)가 데이터베이스(904)에 이름 "U"와 이름 "V" 사이의 관계를 표현하는 바인딩을 포함하는 쿼리(1002A)를 전송하는 것으로 가정하자. 쿼리(1002A)의 전송으로, 프로세스(302B)는 이름 "U", "V"가 동일한 데이터베이스를 말하는 것임을 알게 된다. 환언하면, 프로세스(302B)에 의해 데이터베이스(1006)에 배치된 메시지가 데이터베이스(904)로 포워딩되고, 그에 대응하여 프로세스(302B)에 의해 데이터베이스(904)에 배치된 메시지가 데이터베이스(1006)로 포워딩된다. 프로세스(302B)가 쿼리(1002A)로부터 이름 "U", "V"가 동일한 데이터베이스를 지칭하거나 또는 프로세스(302B)에 의해 전송된 메시지를 서로에게 포워딩하는 2개의 별도의 데이터베이스가 있음을 해석할 수 있기 전에 만족되어야만 하는 어떤 조건(도 11u를 참조하여 이하에 상세히 기술됨)이 있다.
도 10c에는 다수의 지역에 걸쳐 분산되어 있는 다수의 컴퓨팅 장치를 보여주는 시스템(1010)이 도시되어 있다. 프로세스(302B)는 샌프란시스코 지역(1012)에 있는 컴퓨팅 장치(302) 상에서 실행된다. 프로세스(304B)는 시애틀 지역(1016)에 있는 컴퓨팅 장치(304) 상에서 실행되고, 프로세스(308B)는 포틀랜드 지역(1014)에 있는 컴퓨팅 장치(308) 상에서 실행된다. 프로세스(302B)는 어떤 태스크를 수행하기 위해 프로세스(304B)의 도움을 받았다. 프로세스(302B)에 눈치채이지 않고, 프로세스(304B)는 프로세스(302B)에 의해 지정된 모든 태스크를 달성할 수 없다. 따라서, 프로세스(304B)는 프로세스(304B)의 범위 내에 있지 않은 태스크를 수행하기 위해 프로세스(308B)의 도움을 받았다. 쿼리(1002A) 등의 쿼리를 데이터베이스(1006)에 발행함으로써, 메시지(1020) 등의 프로세스(302B)로부터 데이터베이스(1006)로 오는 메시지는 프로세스(308B)가 요청된 태스크를 수행할 수 있도록 자동적으로 데이터베이스(904)로 포워딩된다. 다른 대안에서, 프로세스(302B)는 메시지를 교환하기 위해 직접 데이터베이스(904)와 통신할 수 있다. 그렇지만, 프로세스(302B)는 그렇게 할 필요가 없으며 데이터베이스(1006)와 계속 통신할 수 있다.
도 11a 내지 도 11v는 프로세스 커널(302C) 등의 프로세스 커널에 의해 웹 서비스(302A)(이후부터는 "프로그램(302A)"라고 함) 등의 프로그램을 컴파일 또는 실행하는 방법(1100)을 나타낸 것이다. 프로그램(302A)은 언어(400)로 작성된다. 프로그램의 분석에 있어서, 방법(1100)은 쿼리 표현식 및 프로세스 표현식의 구조 및 내용을 규율하는 일련의 구문적 규칙을 실행한다. 쿼리 표현식 및 프로세스 포현식의 구조적 등가를 규율하는 일련의 등식 법칙도 커널 프로세스(302C)에 의해 실행된다. 언어(400)는 또한 언어(400)의 일련의 구문적 규칙에 따라 정확하게 형성되는 쿼리 표현식 및 프로세스 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙을 포함한다. 이들 일련의 동작적 의미론 규칙은 프로세스 커널(302C)에 의해 실행된다. 간명함을 위해, 방법(1100)의 이하의 설명은 도 3a 내지 도 3c에 도시한 시스템(300)과 연계하여 도시된 여러가지 구성요소를 참조한다.
시작 블록으로부터, 방법(1100)은 계속 터미널(continuation terminal)("터미널 A")과 종료 터미널(exit terminal)("터미널 B") 사이에 정의된 일련의 방법 단계(1102)로 진행한다. 일련의 방법 단계(1102)는 큐 구문(402)으로부터 형성된 쿼리 서술문의 구조 및 내용을 규율하는 구문적 규칙에 대해 프로그램을 실행시킨다. 터미널 A로부터(도 11c), 방법(1100)은 블록(1114)으로 진행하여 프로세스 커널(302C)은 프로그램(302A)으로부터 쿼리 표현식(Q)을 얻는다. 그 다음에, 결정 블록(1116)에서, 프로세스 커널(302C)은 쿼리(Q) 표현식이 구문 형태(syntactical form) 을 갖는지 여부를 결정한다.
언어(400)로 작성된 각각의 쿼리는 구문 형태 를 가지며, 구문 요소 는 쿼리의 헤드를 나타내고 구문 요소 는 쿼리의 보디를 나타낸다. 언어(400)로 작성된 각각의 쿼리는 헤드와 보디를 갖는다. 헤드는 파라미터의 수와 그 각각의 타입을 선언한다. 보디는 일련의 바인딩을 포함한다. 쿼리가 보통 하나의 태스크를 수행하는, 관련 상수, 데이터 타입, 및 변수를 갖는 이름있는 일련의 서술문(a named sequence of statements)(이름없는 쿼리(unnamed query)는 언어(400)를 사용하여 표현될 수 있음)이라는 점에서 쿼리는 종래의 프로그래밍 프로시저에 비유될 수 있다. 예를 들어, 쿼리의 헤드는 프로시저의 서명과 유사한 반면, 쿼리의 보디는 프로시저 내부에 포함된 일련의 서술문과 유사하다. 헤드 구분자 <> 내에는 0개 이상의 쿼리 항(이하에 정의됨)을 나타내는 심볼 T*이 들어 있다. 보디 구분자 () 내에는 0개 이상의 제약(이하에 기술됨)을 나타내는 심볼 C*이 들어 있다.
결정 블록(1116)에서의 테스트에 대한 대답이 '아니오'이어서, 쿼리 Q가 언어(400)에 의해 인식되는 구문 형태로 작성되지 않음을 의미하는 경우, 방법(1100)은 실행을 완료하고 종료된다. 대답이 '예'인 경우, 방법(1100)은 또하나의 결정 블록(1118)으로 진행하여 프로세스 커널(302C)은 쿼리의 보디 내의 각각의 제약(C)이 구문 형태 T:=:T를 갖는지 여부를 결정하며, 여기서 T는 전술하고 또 이하에 추가로 기술되는 바와 같이 쿼리 항이고, 심볼 :=:은 2개의 쿼리 항 사이의 관계를 정의하는 바인딩을 나타낸다. 대답이 '아니오'이어서, 쿼리의 보디의 한 제약이 언어(400)에 타당한 형태로 작성되지 않았음을 의미하는 경우, 방법(1100)은 실행을 완료하고 종료된다. 그렇지 않은 경우, 결정 블록(1118)에서의 대답은 '예'이고, 방법은 또하나의 결정 블록(1120)으로 진행한다.
결정 블록(1120)에서, 프로세스 커널(302C)은 쿼리 항 T가 리터럴(이후부터, "TOP"라고 함)인지 여부를 결정한다. 리터럴이란 변수나 표현식의 결과로서가 아닌 그 자신으로서 표현되는, 프로그램에서 사용되는 값이다. 리터럴의 예로는 숫자 25 및 32.1, 문자 a, 스트링 Hello, 및 부울값 TRUE가 있다. 결정 블록(1120)에서의 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 A5")로 진행한다. 터미널 A5로부터, 방법(1100)은 결정 블록(1146)으로 진행하여 프로세스 커널(302C)은 분석할 또하나의 쿼리 표현식이 있는지 여부를 결정한다. 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 B")로 진행한다. 그렇지 않은 경우, 결정 블록(1146)에서의 대답은 '예'이고, 방법(1100)은 블록(1114)로 루프백하여 분석을 위해 프로그램(302A)로부터 또하나의 쿼리 표현식을 획득한다.
결정 블록(1120)에서, 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1122)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 상보적 리터럴(complimentary literal)(이후부터, "BOTTOM"이라 함)인지 여부를 결정한다. 상보적 리터럴은 리터럴의 역(inversion)이다. 결정 블록(1122)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 A5(상기함)로 진행한다. 그 대신에 결정 블록(1122)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1124)으로 진행한 다. 여기에서, 프로세스 커널(302C)은 쿼리 항 T가 디스카더(discarder)(심볼 "_"로 구분됨)인지 여부를 결정한다. 디스카더는 입력 파라미터만을 가지고 있고 출력 파라미터를 제공하지 않는 쿼리이다. 결정 블록(1124)에서의 대답이 '예'인 경우, 방법(1100)은 전술한 터미널 A5로 진행한다. 결정 블록(1124)에서, 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 A1")로 진행한다.
터미널 A1(도 11d)으로부터, 대답이 '아니오'인 경우, 방법(1100)은 결정 블록(1126)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 이름(또는 "hello" 등의 리터럴 스트링)인지 여부를 검증한다. 양호하게는, 알파벳 문자는 구문적으로 언어(400)에 의해, 프로그램 실행 동안에 수정될 수 있는 데이터를 포함할 수 있는 이름있는 저장 장소(named storage location)인 변수로서 취급된다. 언어(400)에서 알파벳 문자 앞에 "이름"이 오는 경우, 알파벳 문자는 언어(400)에 의해 변수가 아닌 리터럴 스트링으로 취급된다. 결정 블록(1126)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 A5(전술함)로 진행한다. 결정 블록(1126)에서, 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1128)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 (X 등의) 변수인지 여부를 결정한다. 대답이 '예'인 경우, 방법(1100)은 터미널 A5(전술함)로 진행한다.
결정 블록(1128)에서, 대답이 '아니오'인 경우, 방법은 결정 블록(1159)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 형태 ""를 갖는 지역 변수인지 여부를 결정한다. 형태 는 언어(400)로 작성된 프로그램에서 변수를 나타내는 항 X를 포함하며, 일반적으로 마이크로컴퓨터 키보드의 최상위 행의 6번키 상에 있는 작은 위로 향하는 심볼(^)인 캐럿(caret)은 변수 X가 지역 변수(컴퓨터 과학과 관련하여, 지역 변수는 범위가 주어진 코드 블록, 보통 서브루틴으로 제한되어 있는 변수를 의미하지만, 본 발명에서는 지역 변수의 범위는 프로세스로 제한됨)임을 나타내며, 항 는 프로세스에서 계속 프로세스에서 사용될 정보를 익스포트(export)할 수 있는 지역 변수 X의 생성을 나타낸다. 결정 블록(1159)에서 대답이 '예'인 경우, 방법(1100)은 터미널 A5(전술함)로 진행한다.
결정 블록(1159)에서, 대답이 '아니오'인 경우, 방법은 결정 블록(1157)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 형태 ""를 갖는 지역 변수인지 여부를 결정한다. 형태 는 변수를 나타내는 항 X를 포함하며, 항 ^는 캐럿이고, 항 는 프로세스에서 프로세스가 진화하는 컴퓨팅 환경으로부터 (사용될) 정보를 임포트(import)할 수 있는 지역 변수 X를 나타낸다. 결정 블록(1157)에서 대답이 '예'인 경우, 방법(1100)은 터미널 A5(전술함)로 진행한다. 그렇지 않은 경우, 결정은 '아니오'이고, 방법(1100)은 또하나의 계속 터미널("터미널 A2")로 진행한다.
터미널 A2로부터, 방법 흐름은 결정 블록(1130)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 (~ 심볼로 구분된) 역인지를 알아보기 위해 쿼리 항 T를 검사한다. 결정이 '예'인 경우, 방법 흐름은 터미널 A5(전술함)로 진행한다. 그렇지 않은 경우, 결정은 '아니오'이며, 방법(1100)은 결정 블록(1132)으로 들어간다. 결정 블록(1132)에서, 프로세스 커널(302C)은 쿼리 항 T가 순서화된 요소 세트인 튜플인지 여부를 결정한다. 언어(400)에는 튜플을 나타내기 위한 2개의 심볼, 즉 구문적 심볼 "" 및 구문적 심볼 "#"이 있다. 결정 블록(1132)에서의 대답이 '예'인 경우, 방법 흐름은 터미널 A5(전술함)로 진행한다. 그렇지 않고 결정이 '아니오'인 경우, 방법(1100)은 결정 블록(1134)으로 진행한다. 여기에서, 프로세스 커널(302C)은 쿼리 항 T가 형태 를 갖는지를 알아보기 위해 검사를 행하며, 여기서 X*은 하나 이상의 변수를 나타내고 Q는 쿼리를 나타낸다. 따라서, 프로세스 표현식 은 쿼리의 헤드 내의 0개 이상의 변수 및 콤마로 분리된 쿼리의 보디 내의 2개의 다른 쿼리를 나타낸다. 결정 블록(1134)에서 결정이 '예'인 경우, 방법 흐름은 터미널 A5(전술함)로 진행한다. 결정이 '아니오'인 경우, 방법(1100)은 결정 블록(1136)으로 진행한다. 여기서, 프로세스 커널(302C)은 쿼리 항 T가 좌측 인젝션(INR(X))인지 여부를 검사한다. 종래에, 좌측 인젝션 연산자 "inl()"은 2개의 집합의 합집합 내의 요소의 소스를 나타내는 데 사용된다. 예를 들어, 집합 A가 집합 B와 합산(A+B로 표시됨)되는 것으로 가정하자. 집합 A+B의 각 요소는 실제로 그 요소가 집합 A에서 온 것임을 나타내기 위해 라벨 inl로 태깅된다(시각적으로 알파벳 문자 A가 집합 A+B의 좌측에 있기 때문임). 본 발명에서, 생성자 inl은 양호하게는 쿼리 표현식 의 보디의 좌측 Q에 대한 연산(이하에 기술됨)을 나타내기 위해 사용된다. 결정 블록(1136)에 대한 대답이 '예'인 경우, 방법 흐름은 터미널 A5(전술함)로 진행한다. 그렇지 않은 경우, 방법(1100)은 또다른 계속 터미널("터미널 A3")로 들어간다.
터미널 A3로부터, 방법(1100)은 결정 블록(1138)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 우측 인젝션(INR(X))인지 여부를 결정한다. 위에서 간략히 기술한 바와 같이, 형태 의 쿼리의 존재 시에, 좌측 인젝션 생성자 (INL(X))는 변수 X가 제약 QL에 바인딩되게 할 수 있고, 우측 인젝션 생성자 (INR(X))는 변수 X가 제약 QR에 바인딩되게 할 수 있다. 결정 블록(1138)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 A5(전술함)로 진행한다. 그렇지 않은 경우, 방법 흐름은 결정 블록(1140)으로 진행하여 프로세스 커널(302C)은 쿼리 항 T가 형태 를 갖는지 여부를 결정한다. 결정 블록(1140)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 A5로 진행한다. 그렇지 않은 경우, 방법 흐름은 또하나의 결정 블록(1142)으로 들어간다. 여기서, 프로세스 커널(302C)은 쿼리 항 T가 형태 ?T를 갖는지 여부를 결정한다. 결정 블록(1142)을 참조하기 바란다. 연산자 "?"는 항 T를 쿼리 의 보디 내에 포함되어 있는 쿼리 Q 내의 첫번째 항에 바인딩시키는 판독 연산자로 생각될 수 있다. 결정 블록(1142)에서의 대답이 '예'인 경우, 방법 흐름은 터미널 A5(전술함)로 진행한다. 대답이 '아니오'인 경우, 방법은 쿼리 항이 복사 동작(예를 들어, "T@T")인지 여부를 결정한다. 결정 블록(1144)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 A5(전술함)로 들어간다. 그 대신에 대답이 '아니오'이어서, 쿼리 Q가 언어(400)에 의해 인식가능한 구문 형태로 작성되지 않았음을 의미하는 경우, 방법(1100)은 실행을 완료하고 종료된다.
터미널 B(도 11a)로부터, 방법(1100)은 계속 터미널("터미널 C")과 종료 터미널("터미널 D") 사이에 정의된 일련의 처리 단계(1104)로 진행한다. 이 일련의 처리 단계(1104)는 프로세스 서술문의 구조 및 내용을 규율하는 구문적 규칙에 대해 프로그램(302A)을 실행한다. 터미널 C(도 11g)로부터, 프로세스 커널(302C)은 프로그램(302A)로부터 프로세스 표현식()을 획득한다. 블록(1148)을 참조하기 바란다. 다음에, 결정 블록(150)에서, 프로세스 커널(302C)은 프로세스 표현식 이 프로세스 정지 또는 프로세스의 비활성을 나타내는 "0"인지 여부를 결정한다. 대답이 '예'인 경우, 방법 흐름은 또하나의 계속 터미널("터미널 C3")로 진행한다. 그렇지 않은 경우, 방법 흐름은 또하나의 결정 블록(1152)으로 진행한다. 프로세스 커널(302C)은 프로세스 표현식 이 형태 를 갖는지 여부를 결정하며, 여기서 X는 채널, 큐, 데이터베이스, 또는 다른 구조화된 저장소를 나타내는 변수이고, Q는 전술하고 도 11c 내지 도 11f에 도시한 쿼리를 나타내며, 는 쿼리 Q가 X로 전송되거나 X에 배치되어 있음을 나타내고, 마침표 "."는 프로세스 로부터 또하나의 프로세스 P로의 시퀀스를 나타내거나 프로세스 의 일부분으로부터 동일한 프로세스의 또다른 부분 P로의 시퀀스를 나타낸다. 결정 블록(1152)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 C3로 진행한다. 그렇지 않고, 대답이 '아니오'인 경우, 방법(1100)은 결정 블록(1154)으로 진행한다. 프로세스 커널(302C)은 프로세스 표현식 이 등의 다수의
의 합산인지 여부를 결정한다. 합산은 프로세스 표현식 에 의해 표현된 프로세스가 많은 대안 중 하나를 실행할 수 있음을 나타낸다. 예를 들어, 의 합산으로, 에 의해 표현된 프로세스는 또는 를 실행할 수 있다. 결정 블록(1154)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 C3로 진행한다. 그렇지 않고 대답이 '아니오'인 경우, 방법 흐름은 또하나의 계속 터미널("터미널 C1")로 진행한다.
터미널 C1(도 11h)로부터, 방법(1100)은 결정 블록(1156)으로 진행하여 프로세스 커널(302C)은 프로세스 표현식 이 형태 를 갖는지 여부를 결정하며, 여기서 NEW는 어떤 프로세스와 바인딩되어 있는 새 이름을 생성하기 위한 언어(400)에서의 연산자를 나타내고, (NEW X)는 어떤 프로세스에서의 새 이름 X의 생성을 나타내며, (NEW X)P는 새 변수 X가 생성되어 프로세스 P와 바인딩되어 있음을 나타낸다. 결정 블록(1156)에서의 결정이 '예'인 경우, 방법(1100)은 터미널 C3로 계속된다. 대답이 '아니오'인 경우, 방법(1100)은 결정 블록(1158)으로 들어간다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 이 형태 P|P를 갖는지 여부를 결정하여, 여기서 P|P는 한 프로세스가 또하나의 프로세스와 병렬로 실행됨을 나타낸다. 결정 블록(1158)에서 대답이 '예'인 경우, 방법 흐름은 터미널 C3로 진행한다. 그렇지 않은 경우, 방법(1100)은 결정 블록(160)으로 진행한다. 프로세스 커널(302C)은 결정 블록(1160)에서 프로세스 표현식 이 형태 !P를 갖는지 여부를 결정하고, 여기서 느낌표 "!"는 복제 연산자를 나타내고 !P는 무한 합성(infinite composition) P|P|...을 나타낸다. 복제 연산자 !는 개발자로 하여금 언어(400)를 사용하여 프로세스의 무한 거동을 표현할 수 있게 해준다. 결정 블록(1160)에서 결정이 '예'인 경우, 방법(1100)은 터미널 C3로 진행한다. 그렇지 않은 경우, 방법(1100)은 또하나의 계속 터미널("터미널 C2")로 들어간다.
터미널 C2(도 11i)로부터, 방법(1100)은 결정 블록(1162)으로 진행하여 프로세스 커널(302C)은 프로세스 표현식 이 형태 X[P]를 갖는지 여부를 결정한다.구문적 형태 X[P]는 언어(400)를 사용하는 개발자가 프로세스 P를 X에 배치하거나 전송할 수 있음을 나타내며, X는 전술한 바와 같이 다른 구조화된 저장소 중에서도 특히 채널, 큐, 및 데이터베이스를 포함한다. 결정 블록(1162)에서의 대답이 '예'인 경우, 방법(1100)은 터미널 C3로 진행한다. 그렇지 않은 경우, 대답이 '아니오'이며, 방법 흐름은 결정 블록(1164)으로 진행한다. 프로세스 커널(302C)은 프로세스 표현식 이 리프트된 쿼리(lifted query)(이하에 보다 상세히 기술함)인 형태 <Q>를 갖는지 여부를 결정한다. 결정 블록(1164)에서 결정이 '예'인 경우, 방법(1100)은 터미널 C3로 들어간다. 그렇지 않은 경우, 대답은 '아니오'이며, 방법(1100)은 실행을 완료하고 종료된다. 이 지점에서 방법(1100)을 종료하는 이유는 프로세스 표현식 이 언어(400)이 문법에 부합하지 않는 방식으로 형성되었기 때문이다.
터미널 C3(도 11i)로부터, 방법(1100)은 결정 블록(1166)으로 진행하여 프로세스 커널(302C)은 프로그램(302A)이 검사할 다른 프로세스 표현식을 포함하고 있 는지 여부를 결정한다. 대답이 '아니오'인 경우, 방법 흐름은 또하나의 계속 터미널("터미널 D")로 진행한다. 그렇지 않은 경우, 대답은 '예'이고, 방법(1100)은 또하나의 계속 터미널("터미널 C4")로 진행하고, 이 C4는 블록(1148)으로 루프백하여 상기한 방법 단계들이 반복된다.
터미널 D(도 11a)로부터, 방법(1100)은 일군의 프로세싱 단계(1106)로 진행하여 방법은 쿼리 표현식의 구조적 등가를 규율하는 일련의 등식 법칙을 사용하여 프로그램을 실행한다(도 11j 참조). 프로세싱 단계(1106)는 계속 터미널("터미널 E")와 종료 터미널("터미널 F") 사이에 정의된다.
터미널 E(도 11j)로부터, 방법(1100)은 블록(1168)으로 진행하여, 프로세스 커널(302C)은 구조적 등가 비교를 위한 2개 이상의 쿼리 표현식을 획득한다. 그 다음에, 방법은 쿼리 콘텍스트(K)가 형태 K[T:=:U]를 갖는지 여부를 결정한다. 쿼리 콘텍스트 K는 하나 이상의 제약에 의해 채워지도록 구성될 수 있는 홀을 갖는 다수의 쿼리를 나타낸다. 결정 블록(1178)에서의 대답이 '예'인 경우, 쿼리 콘텍스트 K는 또하나의 쿼리 콘텍스트 K[U:=:T]와 구조적으로 등가이다. 블록(1170B)을 참조하기 바란다. 이어서, 방법 흐름은 또하나의 계속 터미널("터미널 E1")로 진행한다. 그렇지 않고, 결정 블록(1170A)에서의 결정이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1172A)으로 들어간다. 여기서, 프로세스 커널(302C)은 쿼리 콘텍스트 K가 형태 K[T0:=:U0, T1:=:U1]을 갖는지를 결정한다. 결정 블록(1172A)에서의 대답이 '예'인 경우, 쿼리 콘텍스트 K는 또하나의 쿼리 콘텍스트 K[T1:=:U1, T0:=:U0]와 구조적으로 등가이다. 블록(1172B)을 참조하기 바란다. 그 다음에, 방법 흐름은 터미널 E1으로 진행한다. 그 대신에 결정 블록(1172A)에서 대답이 '아니오'인 경우, 방법(1100)은 터미널 E1으로 진행하고, 터미널 E1은 또하나의 결정 블록(1174)으로 진행한다. 프로세스 커널(302C)은 구조적 등가에 대해 분석할 프로그램 내의 쿼리 표현식이 더 있는지 여부를 결정한다. 블록(1174)을 참조하기 바란다. 대답이 '아니오'인 경우, 방법(1100)은 종료 터미널 F로 진행한다. 그렇지 않은 경우, 대답은 '예'이고, 방법(1100)은 블록(1168)으로 진행하여 상기한 방법 단계들이 반복된다.
터미널 F(도 11a)로부터, 방법(1100)은 또하나의 계속 터미널("터미널 G")로 진행한다. 터미널 G(도 11b)로부터, 방법(1100)은 계속 터미널("터미널 H")과 종료 터미널("터미널 I") 사이에 정의된 일련의 프로세싱 단계들(1108)로 진행한다. 이들 프로세싱 단계들(1108) 중에, 방법은 처리된 서술문의 구조적 등가를 규율하는 일련의 등식 법칙을 사용하여 프로그램을 실행한다.
터미널 H(도 11k)로부터, 방법(1100)은 블록(1176)으로 진행하여, 프로세스 커널(302C)은 구조적 등가 분석을 위해 프로그램(302A)으로부터 몇개의 프로세스 표현식(1 및 2)을 획득한다. 그 다음에, 방법은 프로세스 표현식 1이 형태 P0|P1을 갖는지 여부를 결정한다. 결정 블록(1178A)을 참조하기 바란다. 결정이 '예'인 경우, 프로세스 표현식 1은 2가 형태 P0|P1을 갖는 경우 프로세스 표현식 2와 구조적으로 등가이다. 블록(1178B)을 참조하기 바란다. 그 다음에, 방법 (1100)은 또하나의 계속 터미널("터미널 H7")로 진행한다. 결정 블록(1178A)에서 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1180A)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 P|0을 갖는지 여부를 결정한다. 결정 블록(1180A)에서 대답이 '예'인 경우, 프로세스 표현식 1은 프로세스 표현식 2가 형태 P를 갖는 경우 프로세스 표현식 2와 구조적으로 등가이다. 블록(1180B)를 참조하기 바란다. 그 다음에, 방법 흐름은 터미널 H7로 진행한다. 결정 블록(1180A)에서 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1182A)로 진행한다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 !P를 갖는지 여부를 결정한다. 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 H2")로 진행한다. 결정 블록(1182A)에서 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 H1")으로 진행한다.
터미널 H1(도 11l)으로부터, 방법(1100)은 블록(1182B)으로 진행하여, 프로세스 표현식 1은 프로세스 표현식 2가 형태 P|!P를 갖는 경우 프로세스 표현식 2와 구조적으로 등가인 것으로 결정된다. 그 다음에, 방법(1100)은 터미널 H7로 진행한다.
터미널 H2(도 11l)로부터, 방법(1100)은 결정 블록(1184A)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 P0+P1을 갖는지 여부를 결정한다. 결정 블록(1184A)에 대한 대답이 '예'인 경우, 프로세스 커널(302C)은 프로세스 표현식 2가 형태 P1+P0을 갖는 경우 프로세스 표현식 1이 프로세스 표현식 2와 구조적으로 등가인 것으로 결정한다. 블록(1184B)을 참조하기 바란다. 그 다음에, 방법 흐름은 터미널 H7로 진행한다. 그 대신에 결정 블록(1184A)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1186A)으로 진행한다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 P0+0을 갖는지 여부를 결정한다. 대답이 '예'인 경우, 방법(1100)은 블록(1186B)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 2가 형태 P를 갖는 경우 프로세스 표현식 1이 프로세스 표현식 2와 구조적으로 등가인 것으로 결정한다. 그 다음에, 방법(1100)은 터미널 H7로 진행한다. 대답이 '아니오'인 경우, 방법 흐름은 또하나의 결정 블록(1188A)으로 진행한다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 (NEW X)(NEW Y)P를 갖는지 여부를 결정한다. 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 H3")로 진행한다. 그렇지 않고 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 H4")로 진행한다.
터미널 H3(도 11m)로부터, 방법(1100)은 블록(1188B)으로 진행하여, 프로세스 표현식 1은 프로세스 표현식 2가 형태 (NEW Y)(NEW X)P를 갖는 경우 프로세스 표현식 2와 구조적으로 등가인 것으로 결정된다. 터미널 H4(도 11m)로부터, 방법(1100)은 또하나의 블록(1190A)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 (NEW X)(NEW X)P를 갖는지 여부를 결정한다. 결정 블록(1190A)에 대한 대답이 '예'인 경우, 프로세스 표현식 1은 프로세스 표현식 2가 형태 (NEW X)P를 갖는 경우 프로세스 표현식 2와 구조적으로 등가이다. 블록 (1190B)를 참조하기 바란다. 그 다음에, 방법(1100)은 터미널 H7으로 진행한다. 결정 블록(1190A)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1192A)으로 진행한다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 (NEW X)P|Q를 갖는지 여부를 결정한다. 결정 블록(1192A)에서의 대답이 '아니오'인 경우, 프로세스는 블록(1192B)로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 2가 형태 (NEW X)(P|Q)를 갖는 경우 프로세스 표현식 1이 프로세스 표현식 2와 구조적으로 등가인 것으로 결정한다. 이름 X는 양호하게는 프로세스 Q 내의 자유 이름(free name)이다. 환언하면, 이름 X는 프로세스 Q에 바인딩되어 있지 않다. 그 다음에, 방법(1100)은 터미널 H7로 진행한다.
결정 블록(1192A)에서의 대답이 '아니오'인 경우, 방법(1100)은 결정 블록(1194A)으로 들어간다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 1이 형태 를 갖는지 여부를 결정하며, 여기서 <>는 아무것도 포함하지 않는 쿼리의 헤드를 나타내고, 는 일련의 제약 또는 일련의 바인딩을 나타내며, 는 리터럴 X가 리터럴 X'에 바인딩되어 있거나 리터럴 X가 리터럴 X'와 등가 관계를 가짐을 나타내고, 는 쿼리 의 헤드가 프로세스 P와 병렬로 실행되고 있는 쿼리임을 나타낸다. 결정 블록(1194A)에서의 테스트에 대한 대답이 '아니오'인 경우, 방법(1100)은 터미널 H7로 진행한다. 그 대신에 결정 블록(1194A)에서의 대답이 '예'인 경우, 방법(1100)은 또하나 의 계속 터미널("터미널 H6")로 진행한다.
터미널 H5(도 11n)로부터, 방법(1100)은 또하나의 결정 블록(1194B)으로 진행한다. 결정 블록(1194B)에서, 프로세스 커널(302C)은 쿼리 가 표준형(canonical)인지 여부를 결정한다. 쿼리는 그의 제약(쿼리의 보디 내의 바인딩)의 전부가 축약불가(irreducible)이고 또 쿼리가 실패가 아닌 경우에만 표준형이거나 또는 표준형으로 되어 있다고 말해진다. 제약은 쿼리가 제2 쿼리로 매핑되거나 축약되도록 제2 쿼리가 존재하는 경우에만 쿼리에서 축약불가이고, 제약은 제2 쿼리의 요소이다. 쿼리가 또하나의 쿼리로 매핑되거나 축약되고 그 다른 쿼리가 실패를 포함하는 경우에만 쿼리는 실패한 것으로 말해진다. 형태 L0:=:L1의 제약은 L0가 L1의 보수와 등가가 아닌 경우에 실패이다(단, L0, L1은 리터럴임).
결정 블록(1194B)에서의 대답이 '예'인 경우, 방법(1100)은 블록(1194C)으로 진행한다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 2가 형태 를 갖는 경우 프로세스 표현식 1이 프로세스 표현식 2와 구조적으로 등가인 것으로 결정한다. 프로세스 표현식 은 프로세스 P에서 이름 X가 발생될 때마다 이러한 발생은 이름 X'으로 대체될 수 있음을 나타낸다. 이 점에서, 프로세싱 단계(1194A-1194C)가 프로그램적으로 치환 등가(substitution equivalent)(도 7a 및 도 7b와 연계하여 전술함)를 기술함을 상기할 수 있어야만 한다. 그 다음에, 방법(1100)은 터미널 H7으로 진행 한다.
결정 블록(1194B)에서의 대답이 '아니오'인 경우, 방법(1100)은 터미널 H7로 진행한다. 터미널 H7로부터, 방법(1100)은 또하나의 결정 블록(1196)으로 진행하여, 프로세스 커널(302C)은 구조적 등가 분석을 위한 프로세스 표현식이 더 있는지를 알아보기 위한 검사를 한다. 결정 블록(1196)에서 대답이 '아니오'인 경우, 방법 흐름은 종료 터미널 I로 진행한다. 그렇지 않은 경우, 방법(1100)은 계속 터미널("터미널 H8")로 진행한다. 터미널 H8(도 11k)로부터, 방법(1100)은 블록(1176)으로 루프백하고, 상기한 방법 단계들이 반복된다.
종료 터미널 I(도 11b)로부터, 방법(1100)은 일련의 프로세싱 단계들(1110)로 진행하여, 방법은 프로그램(302A) 내의 쿼리 서술문의 의미를 규율하는 동작적 의미론 규칙에 대해 프로그램(302A)을 실행한다. 일련의 프로세싱 단계들(1110)은 계속 터미널("터미널 J")과 종료 터미널("터미널 K") 사이에 정의된다. 언어(400)에서, 동작적 의미론 규칙은 기본적으로 일련의 진화하는 프로세스 관계이다. 프로세스는 그 특성상 동적이며 따라서 한 시점으로부터 다른 시점으로 프로세스는 계속하여 변하거나 진화한다. 언어(400)의 동작적 의미론 규칙은 언어(400)로 표현된 프로세스의 주의깊게 안내된 진화를 제공한다. 도 11c 내지 도 11i에서 전술한 구문적 규칙을 통해 개발자는 프로세스가 언어(400)의 동작적 의미론을 통해 진화하는 뉘앙스를 표현할 수 있다.
터미널 J(도 11o)로부터, 방법(1100)은 블록(1198)으로 진행하여, 프로세스 커널(302C)은 프로그램 내의 쿼리 표현식으로부터 바인딩을 획득한다. 그 다음에, 결정 블록(1199A)에서, 프로세스 커널(302C)은 바인딩 B가 바인딩 TOP:=:BOTTOM을 포함하는지 여부를 결정한다. 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 무(nothing)로 축약한다. 블록(1199B)을 참조하기 바란다. 그 다음에, 방법 흐름은 계속 터미널("터미널 J4")로 진행한다. 그 대신에, 대답이 '아니오'인 경우, 방법 흐름은 결정 블록(1197A)으로 진행하여, 프로세스 커널(302C)은 바인딩 B가 바인딩 X:=:T, U:=:X을 포함하는지 여부를 결정한다. 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 바인딩 T:=:U로 축약시킨다. 블록(1197B)을 참조하기 바란다. 그 다음에, 방법 흐름은 터미널 J4로 진행한다. 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 J1")로 진행한다.
터미널 J1(도 11p)으로부터, 방법(1100)은 또하나의 결정 블록(1193A)으로 진행하여, 프로세스 커널(302C)은 바인딩 B가 를 포함하는지 여부를 결정한다. 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 으로 축약시킨다. 블록(1193B)을 참조하기 바란다. 그 다음에, 방법 흐름은 터미널 J4로 진행한다. 결정 블록(1193A)에서 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1191A)으로 진행한다. 프로세스 커널(302C)은 바인딩 B가 바인딩 을 포함하는지 여부를 결정한다. 결정 블록(1191A)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 로 축약시킨다. 블록(1191B)을 참조하기 바란다. 그 다음에, 방법(1100)은 터미널 J4로 진행한다. 결정 블록 (1191A)에 대한 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1189A)으로 진행한다.
결정 블록(1191A)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1189A)으로 진행한다. 프로세스 커널(302C)은 바인딩 B가 를 포함하는지 여부를 결정한다. 결정 블록(1189A)에서의 대답이 '예'인 경우, 방법(1100)은 블록(1189B)으로 진행하여, 프로세스 커널(302C)은 바인딩 B를 로 축약시킨다. 그 다음에, 방법 흐름은 터미널 J4로 진행한다. 결정 블록(1189A)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 J2")로 진행한다.
터미널 J2로부터, 방법(1100)은 또하나의 결정 블록(1187A)으로 진행한다. 여기서, 프로세스 커널(302C)은 바인딩 B가 를 포함하고 있는지 여부를 결정한다. 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 로 축약시킨다. 블록(1187B)을 참조하기 바란다. 그 다음에, 방법(1100)은 터미널 J4로 진행한다. 결정 블록(1187A)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1185A)으로 진행한다. 프로세스 커널(302C)은 바인딩 B가 를 포함하는지 여부를 결정한다. 결정 블록(1185A)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 로 축약시킨다. 블록(1185B)을 참조하기 바란다. 그 다음에, 방법(1100)은 터미널 J4로 진행한다. 결정 블록(1185A)에 대한 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1183A)으로 진행한다. 프로세스 커널(302C)은 바인딩 B가 를 포함하는지 여부를 결정한다. 환언하면, 쿼리 는 디스카더 연산자와 바인딩되어 있다. 결정 블록(1183A)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 바인딩 B를 이하의 바인딩, 으로 축약시킨다. 환언하면, 쿼리 의 헤드 내의 리스트 X의 각 항은 디스카더 연산자에 바인딩되어 있다. 그 다음에, 방법(1100)은 터미널 J4로 진행한다. 결정 블록(1183A)에서의 대답이 '아니오'인 경우, 방법 흐름은 또하나의 계속 터미널("터미널 J3")로 들어간다.
터미널 J3(도 11r)로부터, 방법(1100)은 또하나의 결정 블록(1181A)으로 진행하여, 프로세스 커널(302C)은 바인딩 B가 형태 를 갖는지 여부를 결정한다. 환언하면, 프로세스 커널(302C)은 바인딩 B가 헤드 내에 리스트 를 가지고 또 를 포함하는 보디 내에 3개의 제약 리스트를 갖는 쿼리의 형태로 되어 있는지 여부를 결정한다. 결정 블록(1181A)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 또한 리스트 가 으로 축약될 수 있는지 여부를 결정한다. 결정 블록(1181B)을 참조하기 바란다. 결정 블록(1181B)에 대한 대답이 '예'인경우, 바인딩 B은 쿼리 로 축약된다. 블록(1181C)을 참조하기 바란다. 방법 흐름은 터미널 J4로 진행한다.
결정 블록(1181A, 1181B)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1179A)으로 진행한다. 프로세스 커널(302C)은 바인딩 B가 이하의 쿼리 를 포함하는지 여부를 결정한다. 결정 블록(1179A)에서의 대답이 '예'인 경우, 바인딩 B는 쿼리 로 축약된다. 블록(1179B)을 참조하기 바란다. 환언하면, 이름 U가 쿼리의 보디 내의 이름 X에 바인딩되어 있는 경우, 이름 X가 있는 리스트 내의 모든 곳에서 이름 X는 이름 U로 대체될 수 있다. 그 다음에, 방법 흐름은 터미널 J4로 진행한다. 그렇지 않은 경우, 결정 블록(1179A)에서의 대답은 '아니오'이고, 방법 흐름은 터미널 J4로 진행하며, 터미널 J4는 또하나의 결정 블록(1177)으로 진행한다. 여기서, 프로세스 커널(302C)은 언어(400)의 의미론적 규칙을 적용할 또하나의 쿼리 표현식이 있는지 여부를 결정한다. 대답이 '아니오'인 경우, 방법(1100)은 종료 터미널 K로 진행한다. 결정 블록(1177)에서의 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 J5")로 진행한다. 터미널 J5로부터, 방법(1100)은 블록(1198)으로 루프백하고 상기한 방법 단계들이 반복된다.
종료 터미널 K(도 11b)로부터, 방법(1100)은 일련의 프로세싱 단계들(1112)로 진행하여, 방법은 프로세스 표현식의 의미를 규율하는 동작적 의미론 규칙에 대해 프로그램(302A)을 실행한다. 일련의 프로세싱 단계들(1112)은 계속 터미널("터미널 L")과 종료 터미널("터미널 M") 사이에 정의된다.
터미널 L(도 11s)로부터, 방법(1100)은 블록(1175)으로진행하여, 프로세스 커널(302C)은 프로그램(302A) 내의 프로세스 표현식()을 획득한다. 그 다음에, 결정 블록(1173A)에서, 프로세스 커널(302C)은 프로세스 표현식 이 합산 을 포함하는지 여부를 결정한다. 결정 블록(1173A)에서의 대답이 '예'인 경우, 방법(1100)은 또하나의 결정 블록(1173B)으로 진행한다. 여기서, 프로세스 커널(302C)은 표준형적으로 또하나의 쿼리 Q로 축약될 수 있는 형태 의 바인딩이 있는지 여부를 결정한다. 둘다는 항을 매핑하거나 축약시키는 순열을 정의한다(부록의 섹션 3.2의 정의 3.2.1 참조). 둘다는 양호하게는 데이터베이스 결합(database join)으로 해석된다. 결정 블록(1173B)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 프로세스 표현식 을, 축약된 쿼리 Q가 구조화된 저장소 X로 전송되고 그 후에 프로세스 P0, P1 둘다 병렬로 실행됨을 나타내는 프로세스 으로 축약시킨다. 블록(1173C)을 참조하기 바란다. 프로세싱 단계들(1173A-1173C)은 도 9a 및 도 9b와 연계하여 전술하였다. 그 다음에, 블록(1173C)으로부터, 방법(1100)은 또하나의 계속 터미널("터미널 L6")로 진행한다.
결정 블록(1173A, 1173B)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1171A)으로 진행한다. 프로세스 커널(302C)은 프로세스 표현식 이 를 포함하는지 여부를 결정한다. 대답이 '예'인 경우, 방법(1100)은 또하나의 결정 블록(1171B)으로 진행하여, 프로세스 커널(302C)은 프로세스 P가 프로세 스 P'으로 축약될 수 있는지 여부를 결정한다. 결정 블록(1171B)에서의 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 L1")로 진행한다. 결정 블록(1171A, 1171B)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 L2")로 진행한다.
터미널 L1(도 11t)으로부터, 방법(1100)은 블록(1171C)로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 을 으로 축약시킨다. 그 다음에, 방법 흐름은 터미널 L6으로 진행한다. 터미널 L2(도 11t)로부터, 방법(1100)은 또하나의 결정 블록(1169A)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 이 (NEW X)P를 포함하는지 여부를 결정한다. 대답이 '예'인 경우, 방법 흐름은 결정 블록(1169B)으로 진행하여, 프로세스 커널(302C)은 프로세스 P가 P'으로 축약될 수 있는지 여부를 결정한다. 결정 블록(1169B)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 프로세스 표현식 을 (NEW X)P'으로 축약시킨다. 블록(1169C)을 참조하기 바란다. 그 다음에, 방법(1100)은 터미널 L6로 진행한다. 결정 블록(1169A, 1169B)에서의 대답이 '아니오'인 경우, 방법 흐름은 또하나의 결정 블록(1167A)으로 진행한다. 여기서, 프로세스 커널(302C)은 프로세스 표현식 이 X[P]를 포함하는지 여부를 결정한다. 대답이 '예'인 경우, 방법(1100)은 또하나의 결정 블록(1167B)으로 진행한다. 프로세스 커널(302C)은 프로세스 P가 또하나의 프로세스 P'으로 축약될 수 있는지 여부를 결정한다. 결정 블록(1167B)을 참조하기 바란다. 결정 블록(1167B)에서의 대답이 '예'인 경우, 방법 흐름은 또하나의 계속 터미널("터미널 L3")로 진행한다. 결정 블록(1167A, 1167B)에서의 대답이 ' 아니오'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 L4")로 진행한다.
터미널 L3로부터, 방법(1100)은 블록(1167C)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 을 X[P']으로 축약시킨다. 그 다음에, 방법 흐름은 터미널 L6로 진행한다. 터미널 L4(도 11u)로부터, 방법 흐름은 또하나의 결정 블록(1165A)으로 진행하여, 프로세스 커널(302C)은 프로세스 표현식 이 프로세스 X[Q].P를 포함하는지 여부를 결정한다. 결정 블록(1165A)에서의 대답이 '예'인 경우, 프로세스 커널(302C)은 결정 블록(1165B)에서 쿼리 Q가 형태 의 또하나의 쿼리와 등가 관계를 갖는지 여부를 결정한다. 항 는 그의 헤드에 아무것도 갖지 않는 쿼리를 의미한다(쿼리의 헤드에 아무 항도 포함되어 있지 않음). 그의 보디는 제약 또는 바인딩 관계(포트를 포트에 바인딩하는 조건 등)의 리스트를 나타내는 것인 항 C 또는 지역 변수의 리스트 중에서 지역 변수의 리스트와 관련된 값의 리스트에 대한 바인딩 관계를 나타내는 것인 항 를 포함한다.
결정 블록(1165B)에 대한 대답이 '예'인 경우, 프로세스 커널(302C)은 또한 쿼리 Q가 표준형으로 되어 있는지 여부를 결정한다. 결정 블록(1165C)을 참조하기 바란다. 결정 블록(1165C)에서의 테스트가 '예'인 경우, 프로세스 커널(302C)은 프로세스 표현식 을 형태 의 프로세스로 축약시킨다. 블록(1165D)을 참조하기 바란다. 항 은 와 등가인 리프트된 쿼리이며, 도 10a 내지 도 10c에서 이미 전술하였다. 리프트된 쿼리 는 그의 헤드 항을 포함하지 않는 쿼리이며, 그의 보디는 전역적으로 알려져 있는 제약 의 리스트에 기술되어 있는 바인딩 관계를 포함한다. 항 은 제약 의 리스트 내의 제약 항이 리프트되는 동안에 지역 변수 의 리스트 내의 각각의 지역 변수를 값 의 리스트 내의 대응하는 값으로 대체시키는 프로세스이다. 요약하면, 프로세스 내의 쿼리 Q가 에 등가이고 게다가 쿼리 Q가 표준형으로 되어 있는 경우, 프로세스 는 형태 의 프로세스로 진화될 수 있다. 그 다음에, 방법(1100)은 터미널 L6로 진행한다.
결정 블록(1165A-1165C)에서의 대답이 '아니오'인 경우, 방법(1100)은 또하나의 결정 블록(1163A)로 들어간다. 프로세스 커널(302C)은 프로세스 표현식 이 P0'에 등가 관계를 갖는 것인 P0를 포함하고 있는지 여부를 결정한다. 결정 블록(1163A)을 참조하기 바란다. 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 L5")로 진행한다. 결정 블록(1163A)에 대한 대답이 '아니오'인 경우, 방법(1100)은 터미널 L6로 진행한다.
터미널 L5(도 11v)로부터, 방법(1100)은 결정 블록(1163B)으로 진행하여, 프로세스 커널(302C)은 P0'이 P1'으로 축약될 수 있는지 여부를 결정한다. 대답이 ' 예'인 경우, 프로세스 커널(302C)은 프로세스 P1'이 프로세스 P1과 등가 관계를 갖는지 여부를 결정한다. 결정 블록(1163C)을 참조하기 바란다. 결정 블록(1163C)에서의 테스트가 '예'인경우, 프로세스 커널(302C)은 프로세스 P0를 프로세스 P1으로 축약시킨다. 블록(1163D)을 참조하기 바란다. 그 다음에, 방법(1100)은 터미널 L6로 진행한다. 결정 블록(1163B, 1163C)에서의 대답이 '아니오'인 경우에, 방법(1100)은 또한 터미널 L6로 진행한다.
터미널 L6(도 11v)로부터, 방법(1100)은 또하나의 결정 블록(1161)으로 진행하여, 프로세스 커널(302C)은 언어(400)의 동작적 의미론 규칙 하에서 분석될 프로세스 표현식이 더 있는지 여부를 알아보기 위해 검사를 한다. 대답이 '아니오'인 경우, 방법 흐름은 종료 터미널 M으로 진행한다. 결정 블록(1161)에서의 대답이 '예'인 경우, 방법(1100)은 또하나의 계속 터미널("터미널 L7")로 진행한다. 터미널 L7으로부터, 방법(1100)은 블록(1175)으로 루프백하고 전술한 방법 단계들이 반복된다.
본 발명의 양호한 실시예가 예시되고 설명되었지만, 본 발명의 정신 및 범위를 벗어나지 않고 여러가지 변경이 행해질 수 있음을 잘 알 것이다.
부록
의미론
언어의 의미론은 SOS 스타일의 축약 규칙 세트에 제공된다. 간략함을 위해, 종종 연산구조(calculus)라고 하는 보다 콤팩트하고 완전히 중위형(infix) 버전의 구문이 소개된다. 이러한 구문 상에 일련의 등가 규칙이 강요되는 이유는 그 구문이 너무 세밀한 프로세스 간을 구별해주기 때문이다. 축약 규칙은 이 등가 상에서 닫혀 있다.
연산 구조 스타일 구문
프로그래머가 보는 구문과 중위형 (모델-레벨) 구문 사이의 대응관계는 명백해야만 하지만, 완전함을 위해 이하의 표에 주어진다. 유의할 점은 전위형 구문(prefix syntax)은 블록 형태 같은 구문적 사탕(syntactic sugar)를 제공함으로써 그의 다변성(verbosity)을 피해가려고 한다는 것이다. 이 형태는 프로그래머가 계속 이전에 순차적으로 실행될 몇가지 동작의 전위(prefix)를 지정할 수 있게 해준다. 이하의 표는 이들 형태의 전체적인 편집을 다 기재하기보다는 단지 편집을 추 론하기 위한 최소한의 정보를 제공한다. 이러한 선택은 좌측 열이 우측 열의 변환이 되도록 하는 것에 대응한다.
프로그램-레벨 구문 | 모델-레벨 구문 |
{} | 0 |
sequence {block {x[Q];}P} | x[Q].P |
new(x){P} | (new x)P |
select {case x [Qi]: Pi} | |
parallel {P P} | P|P |
schedule S (...){... call S(...);} | !P |
주의할 점: 리프트된 쿼리 형태는 현재 전위형 구문에서는 사용자 레벨에서 이용가능하지 않다. 그렇지만, 차후의 버전에서는 이용가능할 것이다.
프로그램-레벨 구문 | 모델-레벨 구문 |
T:=: T; | T:=:T |
x | x |
x^ | x^ |
^x | ^x |
~T | ~T |
T*T | T*T |
T#T | T#T |
(x*)[left: Q | right: Q] | <x*>(Q,Q) |
in(left, x) in(right, x) | inl(x) inr(x) |
(x*)[Q] | <x*>(Q) |
?T | ?T |
T@T | T@T |
top / bottom / _ / port y | top|bottom|_|name y |
구조적 등가
전술한 바와 같이, 구문은 너무 많은 구별을 짓는다. 구문은 예를 들어, ":=:"의 어느 쪽에 항이 나타나는지에 대해 구별을 하지 않는다. 이러한 불필요한 구별을 없애기 위해 우리는 구조적 등가를 도입한다.
쿼리의 경우, 우리는 단지 조건을 삽입하기 위한 장소를 그 안에 갖는 쿼리인 쿼리 컨텍스트를 사용하여 이것을 한다. 프로세스의 경우, 우리는 명시적으로 이것을 한다.
프로세스 대수에 익숙한 독자의 경우, 이들 등식은 평범한 것이다. 한가지 흥미있는 경우는 이하의 것이다. 쿼리가 표준형이고 그의 보디에 조건이 있는 경우, 실제는 이들 조건은 포트 사이의 등식 또는 지역 변수와 그의 값 사이의 등식이다. 리프팅 시에, 지역 변수는 그의 값으로 대체되어 계속(continuation)으로 들어간다. 포트 사이의 등식은 리프트된 쿼리에 존재하는 경우 일종의 명시적 치환을 구현하는 프로세스로서 동작한다.
축약 규칙
설명
MATCH
일치 규칙은 실제로 규칙 스키마이다. 리터럴과 그의 듀얼(dual)이 만날 때마다, 이들은 사라진다. 이것은 더 이상의 검사가 필요하지 않기 때문에 성공으로 해석된다.
CUT
식별자는 직관적으로 와이어로서 생각될 수 있다. 2개의 항이 와이어의 각 단부에 있을 때, 여러분은 와이어를 제거하고 2개의 항을 서로 직접 플러깅한다. 이 때 선형 타입은 타입이 맞는 항(well-typed term)에서 식별자는 정확하게 두번 나타나도록 보증함을 상기할 가치가 있다.
TENSOR-PAR
튜플의 제공이 튜플에 대한 [sic] 요구를 충족시킬 때, 대응하는 위치는 서로 와이어링된다.
WITH-PLUS
메뉴(withClaim 형태)의 제공이 선택에 대한 요구(injectClaim 형태)를 충족 시킬 때, 선택이 행해진다. 이것은 선택된 선택 사항이 요구의 제약에 와이어링되게 한다.
READ
레코딩(ofCourseClaim)의 제공이 재생에 대한 요구(whyNotClaim)를 충족시킬 때, 레코딩에 대한 데이터는 요구의 제약에 와이어링된다.
COPY
레코딩의 제공이 복사에 대한 요구(contractClaim)를 충족시킬 때, 개별적인 복사본이 요구의 개별적인 제약에 와이어링된다.
DISCARD
레코딩의 제공이 레코딩을 디스카드하라는 요구("_")를 충족시킬 때, 레코딩은 디스카드된다.
CONTEXT
조건의 집합체가 어떤 방식으로 진화할 때, 이들은 쿼리의 보디의 관점에서 그 방식으로 진화한다.
CLEANUP
와이어의 한쪽 단부, 즉 [sic] 식별자의 한 발생이 쿼리의 헤드(내의 어떤 항)에 있고 다른쪽 단부가 보디에 있을 때, 그 식별자가 바인딩되어 있는 항은 헤드 내로 대체될 수 있다.
정의 3.2.6. 쿼리 Q는 그의 제약 모두가 축약 불가이고 Q가 실패가 아닌 경우에만 표준형이다(달리 말하면, 표준형으로 되어 있다(in canonical form)).
COMM
2개의 쿼리가 각각 그의 헤드 내의 어떤 위치에서 일치하는 항을 가지며 또 대응하는 CUT 쿼리가 더 이상 진행할 수 없는 쿼리로 진화하지만 실패는 아닌 경우, 이들 쿼리를 동일한 큐에 배치한 2개의 프로세스는 통신하게 된다. 그 각각의 계속(continuation)은 둘다 축약된 쿼리의 완료시에 대기한다.
PAR
프로세스가 자체적으로 진행을 할 수 있는 경우, 그 프로세스는 또하나의 프로세스와 병렬 합성으로 여전히 그 진행을 할 수 있다.
NEW
프로세스가 자체적으로 진행을 할 수 있는 경우, 그의 포트 중 하나가 더 이상 외부와의 상호작용을 위해 이용할 수 없는 경우에도 여전히 그 진행을 할 수 있다.
LIFT
헤드에 항을 갖지 않는 쿼리는 포트를 포트에 바인딩하거나 지역 변수를 값에 바인딩하는 조건만을 갖는다. 이러한 쿼리는 리프트될 수 있다. 리프트 시에, 지역 변수는 계속의 보디 외부에서 대체된다.
지역 변수가 대체되어 없어진 후에 남아있는 방정식은 포트 사이에 있다. 이러한 쿼리는 이어서 일종의 명시적 치환으로서 동작하는 프로세스 또는 동등시된 포트 사이의 와이어로 된다.
EQUIV
진화는 등가 관계에 대해 닫혀있다.
Claims (108)
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 프로세스 기반 언어로 작성된 표현식을 컴파일하는 컴퓨터 실행가능 방법으로서,큐, 큐 구분자(queue delimiter) 세트, 쿼리, 시퀀스 구분자(sequence delimiter), 및 다른 동작을 표현하는 구문 요소를 획득하기 위해 상기 표현식을 파싱하는 단계, 및프로세서에서 상기 표현식을, 첫번째 동작이 상기 쿼리를 상기 큐에 또하나의 프로세스로서 전송하는 것이고 그 후에 다른 동작을 계속하는 프로세스로서 해석하는 단계를 포함하며,상기 쿼리는 데이터를 포함하고 또 데이터를 기술하는 커스터마이즈가능한 태그 기반 언어로부터 형성된 구성 방식을 포함하는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 쿼리를 표현하는 상기 표현식의 일부분은 헤드와 보디를 포함하고,상기 헤드는 제1 및 제2 쿼리 헤드 구분자에 의해 구분되고,상기 보디는 제1 및 제2 쿼리 보디 구분자에 의해 구분되는 컴퓨터 실행가능 방법.
- 제22항에 있어서,0개 이상의 쿼리 항이 상기 제1 및 제2 쿼리 헤드 구분자 사이에 포함되어 있는 컴퓨터 실행가능 방법.
- 제22항에 있어서,0개 이상의 제약 조건이 상기 제1 및 제2 쿼리 보디 구분자 사이에 포함되어 있는 컴퓨터 실행가능 방법.
- 제24항에 있어서,각각의 제약 조건은 하나의 쿼리 항과 또 하나의 쿼리 항 사이의 관계를 정의하는 바인딩인 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 리터럴(literal)을 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 상보적 리터럴(complementary literal)을 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 디스카더(discarder)를 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 변수의 이름을 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 변수를 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 쿼리 항의 역(inversion)을 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 쿼리 항의 튜플(tuple)을 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 쿼리 항의 상보적 튜플을 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 상기 헤드 내의 0개 이상의 변수를 갖는 제2 쿼리, 및 상기 보디 내의 콤마에 의해 분리된 제3 및 제4 쿼리를 포함하는 컴퓨터 실행가능 방법.
- 제34항에 있어서,쿼리 항은 변수를 인수로서 받는 좌측 인젝터(left injector)를 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 변수를 인수로서 받는 우측 인젝터(right injector)를 포함하는 컴퓨터 실행가능 방법.
- 제25항에 있어서,쿼리 항은 상기 헤드 내의 0개 이상의 변수를 갖는 제5 쿼리 및 상기 보디 내의 제6 쿼리를 포함하는 컴퓨터 실행가능 방법.
- 제37항에 있어서,쿼리 항은 쿼리 항에 대해 작용하는 판독 연산자(read operator)를 포함하는 컴퓨터 실행가능 방법.
- 제37항에 있어서,쿼리 항은 쿼리 항에 대해 작용하는 복사 연산자(copy operator)를 포함하는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 비활성 연산자(inactivity operator)를 포함하며,상기 비활성 연산자는 상기 프로세스의 비활성이 표현될 수 있게 해주는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 일련의 프로세스를 합산하는 합산 연산자(summation operator)를 포함하며,상기 합산 연산자는 상기 프로세스가 상기 일련의 프로세스로부터 선택할 수 있는 선택 사항이 계속하여 표현될 수 있게 해주는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 new 연산자를 포함하며,상기 new 연산자는 상기 프로세스에 바인딩되어 있는 이름의 생성이 표현될 수 있게 해주는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 병렬 연산자(parallel operator)를 포함하며,상기 병렬 연산자는 병렬로 실행되는 2개의 프로세스가 표현될 수 있게 해주는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 복제 연산자(replication operator)를 포함하며,상기 복제 연산자는 상기 프로세스의 무한적 거동(infinite behavior)이 표현될 수 있게 해주는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분이 제2 큐, 제2의 큐 구분자 세트, 및 프로세스를 포함하는 컴퓨터 실행가능 방법.
- 제21항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 리프트된 쿼리(lifted query)를 포함하는 컴퓨터 실행가능 방법.
- 프로세스 기반 언어로 작성된 표현식을 컴파일하는 방법을 수행하는 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 저장 매체로서,상기 방법은,큐, 큐 구분자(queue delimiter) 세트, 쿼리, 시퀀스 구분자(sequence delimiter), 및 다른 동작을 표현하는 구문 요소를 획득하기 위해 상기 표현식을 파싱하는 단계, 및프로세서에서 상기 표현식을, 첫번째 동작이 상기 쿼리를 상기 큐에 또하나의 프로세스로서 전송하는 것이고 그 후에 다른 동작을 계속하는 프로세스로서 해석하는 단계를 포함하며,상기 쿼리는 데이터를 포함하고 또 데이터를 기술하는 커스터마이즈가능한 태그 기반 언어로부터 형성된 구성 방식을 포함하는 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 쿼리를 표현하는 상기 표현식의 일부분은 헤드와 보디를 포함하고,상기 헤드는 제1 및 제2 쿼리 헤드 구분자에 의해 구분되고,상기 보디는 제1 및 제2 쿼리 보디 구분자에 의해 구분되는 컴퓨터 판독가능 저장 매체.
- 제48항에 있어서,0개 이상의 쿼리 항이 상기 제1 및 제2 쿼리 헤드 구분자 사이에 포함되어 있는 컴퓨터 판독가능 저장 매체.
- 제48항에 있어서,0개 이상의 제약 조건이 상기 제1 및 제2 쿼리 보디 구분자 사이에 포함되어 있는 컴퓨터 판독가능 저장 매체.
- 제50항에 있어서,각각의 제약 조건은 하나의 쿼리 항과 또하나의 쿼리 항 사이의 관계를 정의하는 바인딩인 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 리터럴(literal)을 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 상보적 리터럴(complementary literal)을 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 디스카더(discarder)를 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 변수의 이름을 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 변수를 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 쿼리 항의 역(inversion)을 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 쿼리 항의 튜플(tuple)을 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 쿼리 항의 상보적 튜플을 포함하는 컴퓨터 판독가능 저장 매체.
- 제51항에 있어서,쿼리 항은 상기 헤드 내의 0개 이상의 변수를 갖는 제2 쿼리, 및 상기 보디 내의 콤마에 의해 분리된 제3 및 제4 쿼리를 포함하는 컴퓨터 판독가능 저장 매체.
- 제60항에 있어서,쿼리 항은 변수를 인수로서 받는 좌측 인젝터(left injector)를 포함하는 컴퓨터 판독가능 저장 매체.
- 제61항에 있어서,쿼리 항은 변수를 인수로서 받는 우측 인젝터(right injector)를 포함하는 컴퓨터 판독가능 저장 매체.
- 제61항에 있어서,쿼리 항은 상기 헤드 내의 0개 이상의 변수를 갖는 제5 쿼리 및 상기 보디 내의 제6 쿼리를 포함하는 컴퓨터 판독가능 저장 매체.
- 제63항에 있어서,쿼리 항은 쿼리 항에 대해 작용하는 판독 연산자(read operator)를 포함하는 컴퓨터 판독가능 저장 매체.
- 제63항에 있어서,쿼리 항은 쿼리 항에 대해 작용하는 복사 연산자(copy operator)를 포함하는 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 비활성 연산자(inactivity operator)를 포함하며,상기 비활성 연산자는 상기 프로세스의 비활성이 표현될 수 있게 해주는 것인 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 일련의 프로세스를 합산하는 합산 연산자(summation operator)를 포함하며,상기 합산 연산자는 상기 프로세스가 상기 일련의 프로세스로부터 선택할 수 있는 선택 사항이 계속하여 표현될 수 있게 해주는 것인 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 new 연산자를 포함하며,상기 new 연산자는 상기 프로세스에 바인딩되어 있는 이름의 생성이 표현될 수 있게 해주는 것인 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 병렬 연산자(parallel operator)를 포함하며,상기 병렬 연산자는 병렬로 실행되는 2개의 프로세스가 표현될 수 있게 해주는 것인 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 복제 연산자(replication operator)를 포함하며,상기 복제 연산자는 상기 프로세스의 무한적 거동(infinite behavior)이 표현될 수 있게 해주는 것인 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분이 제2 큐, 제2의 큐 구분자 세트, 및 프로세스를 포함하는 컴퓨터 판독가능 저장 매체.
- 제47항에 있어서,상기 프로세스를 표현하는 상기 표현식의 일부분은 리프트된 쿼리(lifted query)를 포함하는 컴퓨터 판독가능 저장 매체.
- 프로세스 기반 언어로 작성된 표현식의 구조적 등가(structural equivalence)를 규율하는 일련의 등식 법칙을 실행하는 컴퓨터 실행가능 방법으로서,쿼리가 프로세스와 병렬로 실행되고 있음을 기술하는 제1 표현식을 파싱하는 단계 -상기 쿼리는 헤드와 보디를 가지며, 상기 헤드는 비어있고 상기 보디는 제2 이름에 바인딩되어 있는 제1 이름을 포함함- 와,상기 제1 표현식을 제2 표현식에 구조적 등가인 것으로 해석하는 단계를 포함하되,상기 제2 표현식은, 상기 쿼리의 보디 내의 제약 모두가 축약불가(irreducible)이고 상기 쿼리가 실패가 아닌 경우, 상기 쿼리가 상기 프로세스와 병렬로 실행되고 있음을 기술하며, 상기 프로세스에서의 상기 제1 이름의 각각의 발생은 상기 제2 이름으로 대체가능한 것인 컴퓨터 실행가능 방법.
- 삭제
- 제73항에 있어서,제약은 상기 쿼리가 제2 쿼리로 축약되는 때 상기 제약이 상기 제2 쿼리의 요소가 되도록 하는 상기 제2 쿼리가 존재하는 경우에만 상기 쿼리에서 축약불가인 것인 컴퓨터 실행가능 방법.
- 제73항에 있어서,상기 쿼리는 상기 쿼리가 제2 쿼리로 축약가능하고 상기 제2 쿼리가 실패를 포함하는 경우에만 실패인 것인 컴퓨터 실행가능 방법.
- 제76항에 있어서,제약은 상기 제약이 제2 리터럴에 바인딩되어 있는 제1 리터럴로서 정의되고 또 상기 제1 리터럴이 상기 제2 리터럴의 보수(complement)가 아닌 경우에 실패인 것인 컴퓨터 실행가능 방법.
- 프로세스 기반 언어로 작성된 표현식의 구조적 등가(structural equivalence)를 규율하는 일련의 등식 법칙을 실행하는 방법을 수행하는 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 저장 매체로서,상기 방법은,쿼리가 프로세스와 병렬로 실행되고 있음을 기술하는 제1 표현식을 파싱하는 단계 -상기 쿼리는 헤드와 보디를 가지며, 상기 헤드는 비어있고 상기 보디는 제2 이름에 바인딩되어 있는 제1 이름을 포함함- 와,상기 제1 표현식을 제2 표현식에 구조적 등가인 것으로 해석하는 단계를 포함하되,상기 제2 표현식은, 상기 쿼리의 보디 내의 제약 모두가 축약불가(irreducible)이고 상기 쿼리가 실패가 아닌 경우, 상기 쿼리가 상기 프로세스와 병렬로 실행되고 있음을 기술하며, 상기 프로세스에서의 상기 제1 이름의 각각의 발생은 상기 제2 이름으로 대체가능한 것인 컴퓨터 판독가능 저장 매체.
- 삭제
- 제78항에 있어서,제약은 상기 쿼리가 제2 쿼리로 축약되는 때 상기 제약이 상기 제2 쿼리의 요소가 되도록 하는 상기 제2 쿼리가 존재하는 경우에만 상기 쿼리에서 축약불가인 것인 컴퓨터 판독가능 저장 매체.
- 제78항에 있어서,상기 쿼리는 상기 쿼리가 제2 쿼리로 축약가능하고 상기 제2 쿼리가 실패를 포함하는 경우에만 실패인 것인 컴퓨터 판독가능 저장 매체.
- 제81항에 있어서,제약은 상기 제약이 제2 리터럴에 바인딩되어 있는 제1 리터럴로서 정의되고 또 상기 제1 리터럴이 상기 제2 리터럴의 보수(complement)가 아닌 경우에 실패인 것인 컴퓨터 판독가능 저장 매체.
- 프로세스 기반 언어로 작성된 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙(operational semantics rule)을 실행하는 컴퓨터 실행가능 방법으로서,프로세스가 2개의 프로세스 중 선택 사항임을 기술하는 제1 표현식을 파싱하는 단계 -상기 2개의 프로세스 중 제1 프로세스는 제1 쿼리가 큐로 전송되고 그 후에 상기 제1 프로세스가 제1의 일련의 동작을 계속함을 표현하고 상기 2개의 프로세스 중 제2 프로세스는 제2 쿼리가 상기 큐로 전송되고 그 후에 상기 제2 프로세스가 제2의 일련의 동작을 계속함을 표현함- 와,상기 제1 표현식을 제2 표현식으로 축약하는 단계를 포함하되,상기 제2 표현식은, 제3 쿼리의 보디 내의 제약 모두가 축약불가(irreducible)이고 상기 제3 쿼리가 실패가 아닌 경우, 상기 제3 쿼리가 상기 큐로 전송되고 그 후에 상기 제1 프로세스가 상기 제2 프로세스와 병렬로 실행됨을 기술하는 컴퓨터 실행가능 방법.
- 제83항에 있어서,상기 제3 쿼리는 2개의 조건의 바인딩의 축약이고,2개의 조건 중 제1 조건은 제1 순열 함수의 상기 제1 쿼리에의 적용을 포함하고,제2 조건은 제2 순열의 상기 제2 쿼리에의 적용을 포함하는 컴퓨터 실행가능 방법.
- 삭제
- 제83항에 있어서,제약은 상기 제3 쿼리가 제4 쿼리로 축약되는 때 상기 제약이 상기 제4 쿼리의 요소가 되도록 하는 상기 제4 쿼리가 존재하는 경우에만 상기 제3 쿼리에서 축약불가인 것인 컴퓨터 실행가능 방법.
- 제83항에 있어서,상기 제3 쿼리는 상기 제3 쿼리가 제4 쿼리로 축약가능하고 상기 제4 쿼리가 실패를 포함하는 경우에만 실패인 것인 컴퓨터 실행가능 방법.
- 제87항에 있어서,제약은 상기 제약이 제2 리터럴에 바인딩되어 있는 제1 리터럴로서 정의되고 또 상기 제1 리터럴이 상기 제2 리터럴의 보수(complement)가 아닌 경우에 실패인 것인 컴퓨터 실행가능 방법.
- 프로세스 기반 언어로 작성된 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙(operational semantics rule)을 실행하는 방법을 수행하는 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 저장 매체로서,상기 방법은,프로세스가 2개의 프로세스 중 선택 사항임을 기술하는 제1 표현식을 파싱하는 단계 -상기 2개의 프로세스 중 제1 프로세스는 제1 쿼리가 큐로 전송되고 그 후에 상기 제1 프로세스가 제1의 일련의 동작을 계속함을 표현하고 상기 2개의 프로세스 중 제2 프로세스는 제2 쿼리가 상기 큐로 전송되고 그 후에 상기 제2 프로세스가 제2의 일련의 동작을 계속함을 표현함- 와,상기 제1 표현식을 제2 표현식으로 축약하는 단계를 포함하되,상기 제2 표현식은, 제3 쿼리의 보디 내의 제약 모두가 축약불가(irreducible)이고 상기 제3 쿼리가 실패가 아닌 경우, 상기 제3 쿼리가 상기 큐로 전송되고 그 후에 상기 제1 프로세스가 상기 제2 프로세스와 병렬로 실행됨을 기술하는 컴퓨터 판독가능 저장 매체.
- 제89항에 있어서,상기 제3 쿼리는 2개의 조건의 바인딩의 축약이고,2개의 조건 중 제1 조건은 제1 순열 함수의 상기 제1 쿼리에의 적용을 포함하고,제2 조건은 제2 순열의 상기 제2 쿼리에의 적용을 포함하는 컴퓨터 판독가능 저장 매체.
- 삭제
- 제89항에 있어서,제약은 상기 제3 쿼리가 제4 쿼리로 축약되는 때 상기 제약이 상기 제4 쿼리의 요소가 되도록 하는 상기 제4 쿼리가 존재하는 경우에만 상기 제3 쿼리에서 축약불가인 것인 컴퓨터 판독가능 저장 매체.
- 제89항에 있어서,상기 제3 쿼리는 상기 제3 쿼리가 제4 쿼리로 축약가능하고 상기 제4 쿼리가 실패를 포함하는 경우에만 실패인 것인 컴퓨터 판독가능 저장 매체.
- 제93항에 있어서,제약은 상기 제약이 제2 리터럴에 바인딩되어 있는 제1 리터럴로서 정의되고 또 상기 제1 리터럴이 상기 제2 리터럴의 보수(complement)가 아닌 경우에 실패인 것인 컴퓨터 판독가능 저장 매체.
- 프로세스 기반 언어로 작성된 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙을 실행하는 컴퓨터 실행가능 방법으로서,제1 표현식을 파싱하는 단계 -상기 제1 표현식은 제1 프로세스를 기술하고 이 제1 프로세스의 제1 동작은 제1 쿼리를 큐로 전송하는 것으로서 그 후에 상기 제1 프로세스는 제2 프로세스를 계속함- 와,상기 제1 표현식을 제2 표현식으로 축약하는 단계를 포함하되,상기 제2 표현식은, 상기 제1 쿼리의 보디 내의 제약 모두가 축약불가이고 상기 제1 쿼리가 실패가 아닌 경우, 리프트된 쿼리가 상기 제2 프로세스와 병렬로 실행되는 컴퓨터 실행가능 방법.
- 제95항에 있어서,상기 제1 쿼리는 비어있는 헤드 및 제약의 리스트인 보디를 갖는 또하나의 쿼리에 구조적 등가인 것인 컴퓨터 실행가능 방법.
- 제96항에 있어서,상기 제약의 리스트 내의 각각의 제약은 2개의 이름 사이의 바인딩인 것인 컴퓨터 실행가능 방법.
- 삭제
- 제95항에 있어서,제약은 상기 제1 쿼리가 제2 쿼리로 축약되는 때 상기 제약이 상기 제2 쿼리의 요소가 되도록 하는 상기 제2 쿼리가 존재하는 경우에만 상기 제1 쿼리에서 축약불가인 것인 컴퓨터 실행가능 방법.
- 제95항에 있어서,상기 제1 쿼리는 상기 제1 쿼리가 제2 쿼리로 축약가능하고 상기 제2 쿼리가 실패를 포함하는 경우에만 실패인 것인 컴퓨터 실행가능 방법.
- 제100항에 있어서,제약은 상기 제약이 제2 리터럴에 바인딩되어 있는 제1 리터럴로서 정의되고 또 상기 제1 리터럴이 상기 제2 리터럴의 보수(complement)가 아닌 경우에 실패인 것인 컴퓨터 실행가능 방법.
- 프로세스 기반 언어로 작성된 표현식의 의미를 규율하는 일련의 동작적 의미론 규칙을 실행하는 방법을 수행하는 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 저장 매체로서,상기 방법은,제1 표현식을 파싱하는 단계 -상기 제1 표현식은 제1 프로세스를 기술하고 이 제1 프로세스의 제1 동작은 쿼리를 큐로 전송하는 것으로서 그 후에 상기 제1 프로세스는 제2 프로세스를 계속함- 와,상기 제1 표현식을 제2 표현식으로 축약하는 단계를 포함하되,상기 제2 표현식은, 상기 제1 쿼리의 보디 내의 제약 모두가 축약불가이고 상기 제1 쿼리가 실패가 아닌 경우, 리프트된 쿼리가 상기 제2 프로세스와 병렬로 실행됨을 기술하는 컴퓨터 판독가능 저장 매체.
- 제102항에 있어서,상기 제1 쿼리는 비어있는 헤드 및 제약의 리스트인 보디를 갖는 또하나의 쿼리에 구조적 등가인 것인 컴퓨터 판독가능 저장 매체.
- 제103항에 있어서,상기 제약의 리스트 내의 각각의 제약은 2개의 이름 사이의 바인딩인 것인 컴퓨터 판독가능 저장 매체.
- 삭제
- 제102항에 있어서,제약은 상기 제1 쿼리가 제2 쿼리로 축약되는 때 상기 제약이 상기 제2 쿼리의 요소가 되도록 하는 상기 제2 쿼리가 존재하는 경우에만 상기 제1 쿼리에서 축약불가인 것인 컴퓨터 판독가능 저장 매체.
- 제102항에 있어서,상기 제1 쿼리는 상기 제1 쿼리가 제2 쿼리로 축약가능하고 상기 제2 쿼리가 실패를 포함하는 경우에만 실패인 것인 컴퓨터 판독가능 저장 매체.
- 제107항에 있어서,제약은 상기 제약이 제2 리터럴에 바인딩되어 있는 제1 리터럴로서 정의되고 또 상기 제1 리터럴이 상기 제2 리터럴의 보수(complement)가 아닌 경우에 실패인 것인 컴퓨터 판독가능 저장 매체.
Applications Claiming Priority (11)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US37986402P | 2002-05-10 | 2002-05-10 | |
US60/379,864 | 2002-05-10 | ||
US10/303,343 | 2002-11-22 | ||
US10/303,379 | 2002-11-22 | ||
US10/303,445 | 2002-11-22 | ||
US10/303,407 US20030212761A1 (en) | 2002-05-10 | 2002-11-22 | Process kernel |
US10/303,379 US7117487B2 (en) | 2002-05-10 | 2002-11-22 | Structural equivalence of expressions containing processes and queries |
US10/303,445 US7055142B2 (en) | 2002-05-10 | 2002-11-22 | Permutation nuances of the integration of processes and queries as processes at queues |
US10/303,343 US7216335B2 (en) | 2002-05-10 | 2002-11-22 | Operational semantics rules for governing evolution of processes and queries as processes |
US10/303,407 | 2002-11-22 | ||
PCT/US2003/014440 WO2003096209A1 (en) | 2002-05-10 | 2003-05-09 | Cooperation of concurrent, distributed networks of resources |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20050003430A KR20050003430A (ko) | 2005-01-10 |
KR101187486B1 true KR101187486B1 (ko) | 2012-11-15 |
Family
ID=29424849
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020047018145A KR101187486B1 (ko) | 2002-05-10 | 2003-05-09 | 병행 분산 자원 네트워크의 협동을 위한 컴퓨터 실행가능 방법, 및 컴퓨터 판독가능 저장 매체 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1504362A4 (ko) |
JP (1) | JP4276168B2 (ko) |
KR (1) | KR101187486B1 (ko) |
CN (1) | CN100342367C (ko) |
AU (1) | AU2003241394A1 (ko) |
WO (1) | WO2003096209A1 (ko) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7024662B2 (en) | 2001-03-14 | 2006-04-04 | Microsoft Corporation | Executing dynamically assigned functions while providing services |
US7302634B2 (en) | 2001-03-14 | 2007-11-27 | Microsoft Corporation | Schema-based services for identity-based data access |
US9886309B2 (en) | 2002-06-28 | 2018-02-06 | Microsoft Technology Licensing, Llc | Identity-based distributed computing for device resources |
US8156472B2 (en) | 2004-02-12 | 2012-04-10 | Microsoft Corporation | Process language for microprocessors with finite resources |
EP1645974B1 (en) * | 2004-10-05 | 2014-01-01 | Sony Europe Limited | Self-organisation approach to semantic interoperability in peer-to-peer information exchange |
US20060095724A1 (en) * | 2004-10-28 | 2006-05-04 | Microsoft Corporation | Message-passing processor |
CN101276371B (zh) * | 2008-04-18 | 2012-12-05 | 浙江大学 | 基于操作流的异步交互式数据挖掘系统及方法 |
US9600255B2 (en) | 2010-10-08 | 2017-03-21 | Microsoft Technology Licensing, Llc | Dynamic data and compute resource elasticity |
US9658890B2 (en) * | 2010-10-08 | 2017-05-23 | Microsoft Technology Licensing, Llc | Runtime agnostic representation of user code for execution with selected execution runtime |
US9600250B2 (en) | 2010-10-08 | 2017-03-21 | Microsoft Technology Licensing, Llc | Declarative programming model with a native programming language |
US9760348B2 (en) | 2010-11-29 | 2017-09-12 | Microsoft Technology Licensing, Llc | Verification of a dataflow representation of a program through static type-checking |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2077273C (en) * | 1991-12-12 | 1996-12-03 | Mike H. Conner | Language neutral objects |
SE515179C2 (sv) * | 1994-10-24 | 2001-06-25 | Ericsson Telefon Ab L M | Sätt för internkommunikaton i telekommunikationssystem |
US6163856A (en) * | 1998-05-29 | 2000-12-19 | Sun Microsystems, Inc. | Method and apparatus for file system disaster recovery |
US6144999A (en) * | 1998-05-29 | 2000-11-07 | Sun Microsystems, Incorporated | Method and apparatus for file system disaster recovery |
DE10000960C1 (de) * | 2000-01-12 | 2001-12-20 | Infineon Technologies Ag | Datenverarbeitungsvorrichtung |
-
2003
- 2003-05-09 JP JP2004504130A patent/JP4276168B2/ja not_active Expired - Fee Related
- 2003-05-09 CN CNB038103729A patent/CN100342367C/zh not_active Expired - Fee Related
- 2003-05-09 AU AU2003241394A patent/AU2003241394A1/en not_active Abandoned
- 2003-05-09 KR KR1020047018145A patent/KR101187486B1/ko not_active IP Right Cessation
- 2003-05-09 EP EP03731128A patent/EP1504362A4/en not_active Withdrawn
- 2003-05-09 WO PCT/US2003/014440 patent/WO2003096209A1/en active Application Filing
Non-Patent Citations (2)
Title |
---|
Stanley M. Sutton.Jr. et al The design of a next-generation process language, proc. of the 6th European Software Engineering conference held jointly with the 5th ACM SIGSOFT, 1997, pp.142-158 |
Teslaer,L.G, et al A language design for concurrent processes Proc. of the April 30-may 2 1968 spring joint Computer Conference pp.403-408 ACM(1968.04.30.) |
Also Published As
Publication number | Publication date |
---|---|
EP1504362A4 (en) | 2007-10-31 |
AU2003241394A1 (en) | 2003-11-11 |
CN100342367C (zh) | 2007-10-10 |
WO2003096209A1 (en) | 2003-11-20 |
CN1653439A (zh) | 2005-08-10 |
EP1504362A1 (en) | 2005-02-09 |
KR20050003430A (ko) | 2005-01-10 |
JP4276168B2 (ja) | 2009-06-10 |
JP2005525640A (ja) | 2005-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7055142B2 (en) | Permutation nuances of the integration of processes and queries as processes at queues | |
Wielemaker et al. | SWI-Prolog and the web | |
US7627541B2 (en) | Transformation of modular finite state transducers | |
US7624075B2 (en) | Transformation of modular finite state transducers | |
US6055370A (en) | Apparatus which allows data sharing amongst computer programs from different program environments | |
US7526755B2 (en) | Plug-in pre- and postconditions for static program analysis | |
Bergel et al. | Deep Into Pharo | |
US7117487B2 (en) | Structural equivalence of expressions containing processes and queries | |
US7216335B2 (en) | Operational semantics rules for governing evolution of processes and queries as processes | |
US20210373860A1 (en) | Intent compiler | |
KR101187486B1 (ko) | 병행 분산 자원 네트워크의 협동을 위한 컴퓨터 실행가능 방법, 및 컴퓨터 판독가능 저장 매체 | |
Bloom et al. | Thorn: robust, concurrent, extensible scripting on the JVM | |
Petricek | Context-aware programming languages | |
US20030212761A1 (en) | Process kernel | |
Alberda et al. | Using formal methods to cultivate trust in smart card operating systems | |
Scherer | Description languages for REST APIs-state of the art, comparison, and transformation | |
Kozlenkov et al. | Version 2.0 User’s Guide | |
Hall | CONTEXT-AWARE PROGRAMMING LANGUAGES | |
Hunger et al. | Spring Data Neo4j-Reference Documentation | |
Bezuidenhout | Automated program generation | |
Brabrand | Domain Specific Languages for Interactive Web Services | |
Wang et al. | An Evaluation of Multiple Approaches For Database Federation in Life Science | |
Bezuidenhout | Automated program generation: bridging the gap between model and implementation | |
Mora Bernabé | Development of web services for the PABRE system | |
Brien | AutoMed in a Nutshell |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20150827 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20160831 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |