루시드 (프로그래밍 언어)
루시드(Lucid)는 폰 노이만 구조를 따르지 않는 프로그래밍 모델을 갖춘 실험적으로 설계된 데이터플로 프로그래밍 언어이다. 빌 웨지(Bill Wadge)와 에드 애시크로프트(Ed Ashcroft)에 의해 설계되었으며 1985년 책 "데이터플로 프로그래밍 언어, 루시드"(Lucid, the Dataflow Programming Language)에 기술되었다.[1] pLucid는 루시드를 위한 최초의 인터프리터이다. 모델루시드는 데이터 계산을 위해 수요 기반 모델을 사용한다. 각 문장은 프로세서 네트워크와 데이터가 흐르는 프로세서 간의 통신 라인을 정의하는 방정식으로 이해될 수 있다. 각 변수는 무한한 값의 스트림이며 모든 함수는 필터 또는 변환기이다. 반복문은 '현재' 값과 스트림 구성을 허용하는 'fby'(followed by의 약어) 연산자를 통해 시뮬레이션된다. 루시드는 이력의 대수학을 기반으로 하며, 이력은 무한한 데이터 항목 시퀀스이다. 운영적으로 이력은 변수의 변경되는 값에 대한 기록으로 생각할 수 있으며, first 및 next와 같은 이력 연산은 그 이름이 시사하는 방식으로 이해할 수 있다. 루시드는 원래 검증이 단순화될 수 있는 규율적이고 수학적으로 순수한 단일 할당 언어로 구상되었다. 그러나 데이터 흐름 해석은 루시드가 진화한 방향에 중요한 영향을 미쳤다.[2] 세부 사항루시드(및 다른 데이터 흐름 언어)에서 아직 바인딩되지 않은 변수를 포함하는 표현식은 해당 변수가 바인딩될 때까지 기다렸다가 진행한다. 루시드의 각 변수는 값의 스트림이다.
계산은 이러한 시간 변화하는 데이터 스트림에 작용하는 필터 또는 변환 함수를 정의함으로써 수행된다. 예시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 각주
외부 링크
|
Portal di Ensiklopedia Dunia