루시드 (프로그래밍 언어)

루시드
Lucid
패러다임데이터플로
설계자에드워드 A. 애시크로프트
윌리엄 W. 웨지
발표일1976년
자료형 체계타입 없음 (Typeless)
주요 구현체
pLucid
방언
GIPSY, Granular Lucid
영향을 받은 언어
ISWIM
영향을 준 언어
SISAL, 퓨어데이터, Lustre

루시드(Lucid)는 폰 노이만 구조를 따르지 않는 프로그래밍 모델을 갖춘 실험적으로 설계된 데이터플로 프로그래밍 언어이다. 빌 웨지(Bill Wadge)와 에드 애시크로프트(Ed Ashcroft)에 의해 설계되었으며 1985년 책 "데이터플로 프로그래밍 언어, 루시드"(Lucid, the Dataflow Programming Language)에 기술되었다.[1]

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

각주

  1. Wadge, William W.; Ashcroft, Edward A. (1985). 《Lucid, the Dataflow Programming Language》. Academic Press. ISBN 0-12-729650-6. 2015년 1월 8일에 확인함. 

외부 링크

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!