루시드 (프로그래밍 언어)
데이터플로 프로그래밍 언어
루시드(Lucid)는 폰 노이만 구조를 따르지 않는 프로그래밍 모델을 갖춘 실험적으로 설계된 데이터플로 프로그래밍 언어이다. 빌 웨지(Bill Wadge)와 에드 애시크로프트(Ed Ashcroft)에 의해 설계되었으며 1985년 책 "데이터플로 프로그래밍 언어, 루시드"(Lucid, the Dataflow Programming Language)에 기술되었다.[1]
패러다임 | 데이터플로 |
---|---|
설계자 | 에드워드 A. 애시크로프트 윌리엄 W. 웨지 |
발표일 | 1976년 |
자료형 체계 | 타입 없음 (Typeless) |
주요 구현체 | |
pLucid | |
방언 | |
GIPSY, Granular Lucid | |
영향을 받은 언어 | |
ISWIM | |
영향을 준 언어 | |
SISAL, 퓨어데이터, Lustre |
pLucid는 루시드를 위한 최초의 인터프리터이다.
모델
편집루시드는 데이터 계산을 위해 수요 중심 모델을 사용한다. 각 진술은 프로세서 네트워크와 데이터가 흐르는 통신 회선을 정의하는 방정식으로 이해될 수 있다. 각 변수는 값의 무한한 흐름이며 모든 함수는 필터 또는 변환기(transformer)이다. 반복문은 스트림 구성을 허용하는 '현재' 값과 'fby'('followed by'로 읽음) 연산자로 시뮬레이션된다.
예시
편집fac where n = 0 fby (n + 1); fac = 1 fby ( fac * (n + 1) ); end
fib where fib = 0 fby ( 1 fby fib + next fib ); end
prime where prime = 2 fby (n whenever isprime(n)); n = 3 fby n+1; isprime(n) = not(divs) asa divs or prime*prime > N where N is current n; divs = N mod prime eq 0; end; end
qsort(a) = if eof(first a) then a else follow(qsort(b0),qsort(b1)) fi where p = first a < a; b0 = a whenever p; b1 = a whenever not p; follow(x,y) = if xdone then y upon xdone else x fi where xdone = iseod x fby xdone or iseod x; end end
데이터 흐름도
편집--------> whenever -----> qsort --------- | ^ | | | | | not | | ^ | |---> first | | | | | | | V | | |---> less --- | | | | | V V ---+--------> whenever -----> qsort -----> conc -------> ifthenelse -----> | ^ ^ | | | --------> next ----> first ------> iseod -------------- | | | -----------------------------------------------------------
sqroot(avg(square(a))) where square(x) = x*x; avg(y) = mean where n = 1 fby n+1; mean = first y fby mean + d; d = (next y - mean)/(n+1); end; sqroot(z) = approx asa err < 0.0001 where Z is current z; approx = Z/2 fby (approx + Z/approx)/2; err = abs(square(approx)-Z); end; end
각주
편집- ↑ Wadge, William W.; Ashcroft, Edward A. (1985). 《Lucid, the Dataflow Programming Language》. Academic Press. ISBN 0-12-729650-6. 2015년 1월 8일에 확인함.
외부 링크
편집- (영어) pLucid