Oz(프로그래밍 언어)

Oz (programming language)
오즈
패러다임멀티패키지: 논리, 기능, 명령, 객체 지향, 제약, 분산, 동시
설계자게르트 스몰카, 그의 제자
개발자모차르트 컨소시엄
처음 등장한1991년; 31년 전(1991년)
안정된 릴리스
Oz 1.4.0 (최종), Mozart 2.0.1 / 2018년 9월 5일; 3년 전 (2018-09-05)
타이핑 분야역학
면허증.MIT X11[1]
웹 사이트mozart.github.이오
주요 구현
모차르트 프로그래밍 시스템
사투리
오즈, 모차르트
영향을 받다
얼랑, 리스프, 프롤로그
영향받은
앨리스, 스칼라

Oz는 언어 교육을 프로그래밍하기 위해 University catholique de Louvain의 Programming Systems Lab에서 개발된 다중 문자 프로그래밍 언어입니다.표준 교재가 있습니다.컴퓨터 프로그래밍의 개념, 기술 모델.

오즈는 1991년에 Gert Smolka와 그의 학생들에 의해 처음 디자인되었다.1996년에는 스웨덴 컴퓨터과학연구소의 세이프 하리디, 피터 반 로이의 연구 그룹과 협력해 오즈의 개발을 계속했다.1999년 이후, 오즈는 모차르트 컨소시엄이라는 국제적인 그룹에 의해 지속적으로 개발되어 왔으며, 모차르트 컨소시엄은 원래 자르랜드 대학, 스웨덴 컴퓨터 과학 연구소, 그리고 루뱅 대학교로 구성되어 있었다.2005년, 모차르트 개발을 더 큰 공동체에 개방한다는 명확한 목적을 가지고, 모차르트 개발을 관리하는 책임이 핵심 그룹인 모차르트 이사회로 넘어갔다.

모차르트 프로그래밍 시스템은 오즈의 주요 구현체이다.그것은 모차르트 컨소시엄에 의해 오픈 소스 라이선스로 출시된다.Mozart는 Unix, FreeBSD, Linux, WindowsmacOS이식되었습니다.

언어 기능

Oz는[2] 논리, 함수(느린 평가와 열성 평가 모두), 명령형, 객체 지향형, 제약, 분산형 및 동시 프로그래밍을 포함한 주요 프로그래밍 패러다임의 대부분을 포함합니다.Oz는 단순한 형식적 의미론(아래에 언급된 책의 13장 참조)과 효율적인 [citation needed]구현을 모두 가지고 있습니다.오즈는 얼랑어의 주요 디자이너인 조 암스트롱이 이 용어를 도입했기 때문에 동시성 지향 언어이다.동시성 지향 언어는 동시성을 사용하기 쉽고 효율적으로 만듭니다.Oz는 표준 그래픽 사용자 인터페이스(GUI) 언어 QTk를 [3]지원합니다.

멀티패러다임 프로그래밍과 더불어 Oz의 주요 강점은 제약 프로그래밍분산 프로그래밍입니다.Oz는 그 요소적인 디자인 덕분에 네트워크 투과형 분산 프로그래밍 모델을 성공적으로 구현할 수 있었습니다.이 모델을 사용하면 언어 내에서 개방적이고 폴트 톨러런스한 애플리케이션을 쉽게 프로그래밍할 수 있습니다.제약 조건 프로그래밍을 위해 Oz는 제약 조건 영역에 직교하는 사용자 정의 검색 및 배포 전략을 허용하는 계산 공간의 개념을 도입합니다.

언어의 개요

데이터 구조

오즈는 통사적인 설탕을 통해 보다 실용적인 언어로 확장될 수 있는 데이터형이 거의 없는 핵심 언어에 기초하고 있습니다.

기본 데이터 구조:

  • 숫자: 부동소수점 또는 정수(실제 정수)
  • 레코드: 데이터 그룹화: circle(x:0 y:1 radius:3 color:blue style:dots)여기서 x, y, radius 등의 용어를 features라고 하며, features와 관련된 데이터(이 경우 0,1,3 등)가 값입니다.
  • 튜플: 정수 피쳐가 오름차순으로 있는 레코드: circle(1:0 2:1 3:3 4:blue 5:dots) .
  • 목록: 단순한 선형 구조
' '(2 ' '(4 ' '(6 ' '(8 제로)))) 레코드로서 %. 2(4(6(8 제로))) 통사당 % 2 4 6 8 제로 통사당 % 증가 [2 4 6 8] 더 많은 통사당 % 

이러한 데이터 구조는 값(상수), 퍼스트 클래스 및 동적으로 검사된 유형입니다.Oz에서 변수 이름은 대문자로 시작하여 항상 소문자로 시작하는[4] 리터럴과 구분합니다.

기능들

함수는[5] 퍼스트 클래스 값이며, 고차 함수 프로그래밍이 가능합니다.

재밌어요 {사실 N}    한다면 N =< 0 그리고나서 1 또 다른 N*{사실 N-1} 끝. 끝. 
재밌어요 { N K}    {사실 N} 나누다 ({사실 K} * {사실 N-K}) Oz에서 오버플로할 수 없는 정수 비율(메모리가 남아 있지 않은 경우) 끝.  재밌어요 {Sum List(총량 리스트) 목록.}    사례. 목록.  제로 그리고나서 0    [] H T 그리고나서 H+{Sum List(총량 리스트) T} 리스트의 패턴 일치율(%)    끝. 끝. 

함수는 자유 변수와 결합 변수 모두에 사용할 수 있습니다.자유 변수 값은 정적 어휘 [6]범위 지정을 사용하여 찾을 수 있습니다.

고차 프로그래밍

기능은 다른 Oz 물체와 같습니다.함수는 다른 함수의 속성으로 전달될 수도 있고 함수로 반환될 수도 있습니다.

재밌어요 {광장 N}  % A 일반 함수    N*N 끝.  재밌어요 {지도 F Xs}  % F는 여기서의 함수입니다 - 고차 프로그래밍    사례. Xs        제로 그리고나서 제로       [] X Xr 그리고나서 {F X} {지도 F Xr}    끝. 끝.  %parames(%pause) {둘러보다 {지도 광장 [1 2 3]}}  %브라우징 [1 4 9] 

익명 함수

다른 많은 함수 언어들과 마찬가지로, Oz는 고차 프로그래밍으로 익명 함수(즉, 이름이 없는 함수)의 사용을 지원합니다.기호 $는 이를 나타내기 위해 사용됩니다.

다음 예제에서는 제곱함수가 익명으로 정의되어 전달되며, 이로 인해[1 4 9]열람할 수 있습니다.

{둘러보다 {지도 재밌어요 {$N} N*N 끝. [1 2 3]}} 

익명 함수에는 이름이 없으므로 재귀 익명 함수를 정의할 수 없습니다.

절차들

Oz의 함수는 함수 실행 중 함수 본문에서 마지막으로 발견된 문장에서 값을 반환하도록 되어 있습니다.다음 예제에서는 X > 0이면 Ret 함수가 5, 그렇지 않으면 -5를 반환합니다.

선언하다 재밌어요 {리트 X}    한다면 X > 0 그리고나서 5 또 다른 ~5 끝. 끝. 

그러나 Oz는 함수가 값을 반환하지 않아야 하는 경우에 대비한 설비도 제공합니다.이러한 기능을 [7]프로시저라고 합니다.절차는 다음과 같이 구성 "proc"를 사용하여 정의됩니다.

선언하다 프로세서 {리트 X}    한다면 X > 0 그리고나서 {둘러보다 5} 또 다른 {둘러보다 ~5} 끝. 끝. 

위의 예에서는 값이 반환되지 않고 X 기호에 따라 Oz 브라우저에서 5 또는 -5만 출력됩니다.

데이터 흐름 변수 및 선언적 동시성

프로그램이 바인딩되지 않은 변수를 발견하면 값을 기다립니다.예를 들어, 아래의 스레드는 X와 Y가 모두 값에 바인딩될 때까지 기다렸다가 Z 값을 표시합니다.

     Z = X+Y    {둘러보다 Z} 끝.  X = 40 끝.  Y = 2 끝. 

데이터 흐름 변수의 값은 바인딩된 후에는 변경할 수 없습니다.

X = 1 X = 2 % 오류 

데이터 흐름 변수를 사용하면 동시 스트림 에이전트를 쉽게 만들 수 있습니다.

재밌어요 {인츠 N 맥스.}    한다면 N == 맥스. 그리고나서 제로    또 다른        {지연 1000}       N{인츠 N+1 맥스.}    끝. 끝.  재밌어요 { S 개울.}    사례. 개울.        제로 그리고나서 S       [] H T 그리고나서 S{ H+S T}    끝. 끝.  현지의 X Y      X = {인츠 0 1000} 끝.     Y = { 0 X} 끝.    {둘러보다 Y} 끝. 

데이터 흐름 변수가 작동하는 방식 때문에 프로그램의 모든 위치에 스레드를 배치할 수 있으며 동일한 결과를 얻을 수 있습니다.이로 인해 동시 프로그래밍이 매우 쉬워집니다.스레드는 매우 저렴합니다.한 [8]번에 100,000개의 스레드를 실행할 수 있습니다.

예:시험분할체

다음 예제에서는 prime 이외의 번호를 필터링하는 동시 스트림에이전트를 재귀적으로 생성하여 트라이얼 분할 알고리즘을 사용하여 소수 스트림을 계산합니다.

재밌어요 { Xs}    사례. Xs  제로 그리고나서 제로    [] X Xr 그리고나서 YS         YS = {필터 Xr 재밌어요 {$Y} Y 모드 X \= 0 끝.} 끝.       X{ YS}    끝. 끝. 

게으름

오즈는 기본적으로 열렬한 평가사용하지만 게으른 평가[9] 가능하다.아래에서는 Y의 값을 계산하기 위해 X의 값이 필요한 경우에만 팩트가 계산됩니다.

재밌어요 게으른 {사실 N}    한다면 N =< 0 그리고나서 1 또 다른 N*{사실 N-1} 끝. 끝. 현지의 X Y    X = {사실 100}    Y = X + 1 끝. 

느긋한 평가를 통해 Oz에 무한대의 데이터 구조를 저장할 수 있습니다.느린 평가의 힘은 다음 코드 샘플에서 확인할 수 있습니다.

선언하다 재밌어요 게으른 {머지 Xs YS}    사례. Xs#YS     (X Xr)#(Y ) 그리고나서       한다면 X < > Y 그리고나서 X{머지 Xr YS}       그렇지 않으면 X>Y 그리고나서 Y{머지 Xs }       또 다른 X{머지 Xr }       끝.    끝. 끝.  재밌어요 게으른 {시대 N Xs}    사례. Xs     제로 그리고나서 제로    [] X Xr 그리고나서 N*X{시대 N Xr}    끝. 끝.  선언하다 H H = 1   {머지 {시대 2 H} {머지 {시대 3 H} {시대 5 H}}} {둘러보다 {목록..가지고 가다 H 6}} 

위의 코드는 무한 목록의 모든 정규 번호[10] 우아하게 계산합니다.실제 숫자는 필요할 때만 계산됩니다.

메시지 전달 동시성

선언적 동시 모델은 단순한 의미론을 통해 전달되는 메시지로 확장할 수 있습니다.

선언하다 현지의 개울. 항구     항구 = {뉴포트 개울.}    {보내세요 항구 1} % Stream is now 1 _ ('_'는 바인딩되지 않은 이름 없는 변수를 나타냅니다)    {보내세요 항구 2} 스트림은 현재 1 2 _    ...    {보내세요 항구 n} % 스트림은 현재 12 입니다.n _ 끝. 

포트와 스레드를 사용하여 비동기 에이전트를 정의할 수 있습니다.

재밌어요 {뉴에이전트 초기화 재밌어요}    메시지 나가.      {폴드L 메시지 재밌어요 초기화 나가.} 끝.    {뉴포트 메시지} 끝. 

상태 및 객체

선언적 모델을 확장하여 매우 단순한 의미론을 가진 상태 및 객체 지향 프로그래밍을 지원할 수 있습니다.Cells라고 하는 새로운 가변 데이터 구조를 작성하려면:

현지의 A X     A = {뉴셀 0}    A := 1  %는 A의 값을 1로 변경합니다.    X = @A  % @는 A의 값에 액세스하는 데 사용됩니다. 끝. 

이러한 단순한 의미 변경으로 객체 지향 패러다임 전체가 지원될 수 있습니다.약간의 통사설탕과 함께 OOP는 오즈에 잘 통합된다.

학급 계산대    특성     메트 초기화(가치)       :=가치    끝.    메트 둘러보다       {둘러보다 @}    끝.    메트 주식회사(가치)        :=@+가치    끝. 끝.  현지의 C     C = {신규 계산대 초기화(0)}    {C 주식회사(6)}    {C 둘러보다} 끝. 

실행 속도

모차르트 컴파일러(오즈 3을 구현한 버전 1.4.0)의 프로그램 실행 속도가 매우 느리다.2012년 벤치마크 세트에서는 C [11]언어의 GNU 컴파일러 컬렉션(GCC)보다 평균 약 50배 느립니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Mozart Oz License Info". 16 January 2014. Retrieved 16 January 2014.
  2. ^ Gert Smolka (1995). "The Oz Programming Model" (PDF). Lecture Notes in Computer Science. 1000: 324–343. doi:10.1007/BFb0015252. ISBN 978-3-540-60105-0.
  3. ^ "QTk". Archived from the original on 20 May 2013. Retrieved 6 April 2009.
  4. ^ "3 Basics".
  5. ^ Leif Grönqvist. "Higher Order Functions". Advanced Functional Programming in Oz. Archived from the original on 3 March 2016. Retrieved 3 November 2014.
  6. ^ Robert Gentleman; Ross Ihaka (September 2000). "Lexical Scope in Statistical Computing" (PDF). Journal of Computational and Graphical Statistics. 9 (3, Systems and Languages): 491–508.
  7. ^ "5 Basic Control Structures".
  8. ^ "Archived copy". Archived from the original on 24 February 2015. Retrieved 29 November 2008.{{cite web}}: CS1 maint: 제목으로 아카이브된 복사(링크)
  9. ^ Paul Hudak (1989). "Conception, evolution, and application of functional programming languages". ACM Computing Surveys. 21 (3): 359–411. doi:10.1145/72551.72554. S2CID 207637854.
  10. ^ Rao, AC & Varada Raju, D (1991). "Application of the Hamming number technique to detect isomorphism among kinematic chains and inversions". Mechanism and Machine Theory. 26 (1): 55–75. doi:10.1016/0094-114x(91)90022-v.
  11. ^ 컴퓨터 언어 벤치마크 게임

외부 링크