조이스(프로그래밍 언어)

Joyce (programming language)
조이스
패러다임동시, 필수, 구조화
가족워스 파스칼
설계자페르 브린치 한센
처음 등장한1987년, 35년(연장)
안정된 릴리스
1987년 1월, 35년(최종)
타이핑 분야강한.
영향을 받다
순차 프로세스 커뮤니케이션, Pascal, 동시 Pascal
영향받은
슈퍼 파스칼

Joyce는 1980년대에 [1]Per Brinch Hansen에 의해 설계된 동시 컴퓨팅용 안전한 프로그래밍 언어입니다.이것은 순차 언어 Pascal과 순차 프로세스(CSP)의 통신 원리를 기반으로 합니다.이는 프로그래밍 언어로 적용되는 CSP의 단점을 해결하고 분산 컴퓨팅 시스템 구현을 위한 주로 교육용 도구를 제공하기 위해 만들어졌습니다.

이 언어는 에이전트 개념을 기반으로 합니다.이 개념은 채널과 메시지 전달을 통해서만 통신하는 동시에 실행되는 프로세스입니다.에이전트는 서브에이전트를 동적으로 재귀적으로 활성화할 수 있습니다.조이스의 발전은 1993년경 한센인에 의해 개발된 SuperPascal 언어의 기초를 형성했다.

특징들

Joyce는 [2]Pascal의 작은 서브셋을 기반으로 하며 동시성을 위해 CSP에서 영감을 받은 기능을 확장했습니다.다음 섹션에서는 도입된 새로운 기능에 대해 설명합니다.

에이전트

에이전트는 일련의 문장과 다른 에이전트의 중첩된 정의로 구성된 절차입니다.에이전트는 작성자와 동시에 실행되는 하위 에이전트를 동적으로 활성화할 수 있습니다.에이전트는 모든 하위 에이전트도 종료된 경우에만 종료할 수 있습니다.예를 들어 에이전트process2액티브하게 하다process1:

대리인 프로세스 1(x, y: 정수); 시작한다.     ... 끝.;  대리인 프로세스 2(); 사용하다 프로세스 1; 시작한다.     프로세스 1(9, 17); 끝.; 

에이전트를 활성화하면 모든 로컬 변수의 새 인스턴스가 생성되고 각 형식 매개 변수의 값이 로컬 변수에 복사됩니다.따라서 에이전트는 다른 에이전트의 변수에 액세스할 수 없으며 채널을 사용한 통신만 허용됩니다.이 제한은 경주 조건과 같은 공유 변수 사용과 관련된 문제를 방지합니다.

의사소통

에이전트는 채널이라는 엔티티를 통해 통신합니다.채널에는 전송할 수 있는 기호 집합을 정의하는 알파벳이 있습니다.채널은 포트 변수를 사용하여 동적으로 생성되고 액세스됩니다.포트 타입은 알파벳을 구성하는 고유한 기호 세트로 정의됩니다.값이 여러 개인 기호는 특정 유형으로 정의됩니다.예를 들어 다음과 같습니다.

개울. = [인트(정수), 이오스]; 

기호int(integer)라고 하는 메시지 기호를 나타냅니다.int모든 정수 값.두 번째 유형 없는 기호 선언eos(스트림의 끝)은 신호라고 불립니다.포트 유형이 정의되면 해당 유형의 포트 변수를 선언할 수 있습니다.

out : 스트림 인 : 스트림

다음으로 채널엔티티를 작성하는 에이전트 내부의 채널엔티티를 다음과 같이 활성화할 수 있습니다.

+out;

그런 다음 CSP 스타일의 입력 및 출력 연산자를 사용하여 채널에서 기호를 송수신할 수 있습니다.?그리고.!각각 다음과 같다.통신은, 송신측 에이전트와 일치하는 수신 에이전트가 있는 경우에만 행해집니다.수신 에이전트는 전송되는 기호 유형을 수신할 것으로 예상해야 합니다.예를 들어 값 9에 이어eos기호가 포트로 전송됩니다.out:

나가. ! 인트(9) 나가. ! 이오스 

그리고 정수 메시지가 일치하는 유형의 변수로 수신되고 이어서eos:

받았다 : 정수  ? 인트(받았다)  ? 이오스 

폴링 스테이트먼트

폴링 스테이트먼트는 CSP의 보호대상 개념에 기초하고 있습니다.폴링 스테이트먼트는 입력 채널 스테이트먼트에 의해 보호되는 스테이트먼트 세트로 구성됩니다.송신 에이전트와 가드간의 통신이 일치하면, 가드가 실행되어 대응하는 스테이트먼트가 계속 됩니다.예를 들어 다음과 같습니다.

? X -> x : = x + 1 in ?Y -> y : = y + 1 끝의 폴링

포트 위치in신호를 감시하고 있습니다.X또는Y일치하는 통신에서는 대응하는 변수가x또는y증가합니다.

보안.

조이스는 컴파일러가 모든 언어 규칙 위반을 탐지할 수 있다는 의미에서 안전한 언어가 되도록 고안되었습니다.

프로그램 예시

다음은 Joyce 프로그래밍 [1]언어를 소개하는 원본 논문에서 가져온 완전한 예제 프로그램이며, 소수 생성을 위한 체 기술에 기초한 소수를 생성하는 알고리즘을 구현합니다.asieve에이전트는 이전 에이전트로부터 정수 스트림을 전송합니다.첫 번째는 소수입니다.스트림에서 이 프라임의 배수를 모두 삭제하고 후속 값을 활성화합니다.이 작업은 다음 시간까지 계속됩니다.eos신호는 체 세트를 따라 전파됩니다.

대리인 체에 밭치다(입력, 나가.: 개울.); 변화하다 : 부울; x, y: 정수;   성공하다: 개울.; 시작한다.     여론 조사         입력?인트(x) -> +성공하다;              체에 밭치다(성공하다, 나가.);  := 진실의           입력?이오스    -> 나가.!이오스;  := 거짓의     끝.;     하는 동안에  하다         여론 조사             입력?인트(y) ->                 한다면 y 모드 x << 고객명 >>님 0 그리고나서 성공하다!인트(y)               입력?이오스    -> 나가.!인트(x);                 성공하다!이오스;  := 거짓의         끝.; 끝.; 

다음 에이전트는 체 에이전트 세트를 초기화하고 3에서 9999 사이의 정수 스트림을 입력합니다.

대리인 소수점; 사용하다 생성하다, 체에 밭치다, 인쇄물; 변화하다 a, b: 개울.; 시작한다.     +a; +b; 생성하다(a, 3, 2, 4999);     체에 밭치다(a, b); 인쇄물(b) 끝.; 

실행

스택 할당

에이전트 프로시저가 동시에 실행되기 때문에 에이전트콜의 액티베이션레코드가 라스트인 선출 패턴에 따르지 않기 때문에 기존의 시퀀셜스택 할당 방식을 사용할 수 없습니다.대신 작성자와 서브에이전트의 관계는 트리 구조화된 스택을 형성합니다.이 동작을 구현하기 위해 간단한 스킴이 사용됩니다.이 동작은 스택의 맨 위에 새로운 액티베이션레코드를 할당하고 서브에이전트의 액티베이션레코드를 작성자의 레코드에 링크함으로써 동작합니다.이러한 레코드는 에이전트가 종료되고 스택의 [3]맨 위에 있는 경우에만 해방됩니다.이 스킴의 유효성은 프로그램의 구조와 동작에 따라 다르며, 경우에 따라 메모리 사용이 저하될 수 있습니다.더 효과적인 계획은 한센인의 언어인 SuperPascal로 구현되었다.

레퍼런스

  1. ^ a b Hansen, Brinch (2002). "Joyce: A programming language for distributed systems". In Hansen, Per Brinch (ed.). The Origin of Concurrent Programming: From Semaphores to Remote Procedure Calls. New York, New York: Springer. pp. 464–492. doi:10.1007/978-1-4757-3472-0. ISBN 978-1-4419-2986-0. S2CID 44909506.
  2. ^ Hansen, Brinch (June 1989). "The Joyce language report". Software: Practice and Experience. John Wiley & Sons. 19 (6): 553–578. doi:10.1002/spe.4380190606.
  3. ^ Hansen, Brinch (June 1989). "A multiprocessor implementation of Joyce". Software: Practice and Experience. John Wiley & Sons. 19 (6): 579–592. doi:10.1002/spe.4380190606.

외부 링크

공식 웹사이트, 브린치 한센 아카이브, 그의 논문 세트