카멜레온 언어: 매크로 프로그래밍을 위한 확장 페트리 넷 기반 실행 모델
초록
카멜레온 언어는 마이크로‑프로그래밍과 매크로‑프로그래밍을 동시에 지원하는 그래픽 데이터플로우 언어이다. C++ 라이브러리를 손쉽게 통합할 수 있도록 설계되었으며, 실행 메커니즘을 기존 페트리 넷에 토큰 상태(새로움, 오래됨, 비어있음)를 추가한 확장 모델로 정의한다. 논문은 이 모델의 구조와 연산자(조건, 반복 등)의 구현 방식을 상세히 제시한다.
상세 분석
본 논문은 현대 소프트웨어 개발이 점점 복합화·다양화됨에 따라 “마이크로‑프로그래밍”(명령형, 단계별)과 “매크로‑프로그래밍”(데이터플로우, 현상학적) 두 축을 동시에 활용할 필요성을 제시한다. 기존 LabVIEW·Simulink 등은 그래픽 데이터플로우를 제공하지만, 네이티브 데이터 구조의 이식성이 낮아 C++ 등 외부 라이브러리와의 연동이 번거롭다. 카멜레온 언어는 데이터·연산자 사전을 통해 C++ 라이브러리를 ‘업스케일’하는 메커니즘을 제공함으로써, 개발자가 마이크로‑스케일에서 알고리즘을 구현하고 매크로‑스케일에서 이를 블랙박스 연산자로 끌어와 조합할 수 있게 한다.
핵심 기술은 기존 페트리 넷에 네 가지 요소(데이터 집합 D, 연산자 집합 Op, 입력 함수 I, 출력 함수 O)를 정의하고, 토큰 상태를 0(비어있음), 1(오래된 토큰), 2(새 토큰)로 확장한 ‘마킹 함수 µₜ’를 도입한 점이다. 이로써 연산자 실행 조건(eₒₚ)은 “모든 입력에 토큰 존재, 최소 하나는 새 토큰, 모든 출력에 새 토큰이 없어야 함”이라는 논리식으로 명시된다. 실행 후에는 입력 토큰을 ‘오래된’으로, 출력 토큰을 ‘새’로 전환하는 업데이트 함수(uₒₚ)가 적용되어, 토큰 흐름을 명확히 추적한다.
연산자 정의는 ‘if/else’, ‘merge’, ‘synchrone’, ‘increment’, ‘<’ 등 기본 제어 구조를 포함한다. 각 연산자는 입력·출력 토큰 상태와 데이터 값을 기반으로 실행 여부와 처리 로직을 정의한다. 예를 들어 if/else 연산자는 부울 입력에 따라 두 개의 출력 중 하나에 데이터를 복사하고, 선택된 출력에 새 토큰을 부여한다.
프로세서는 매 시점 실행 가능한 연산자 집합을 선정하고, 가장 오래 대기한 연산자를 우선 선택한다. 동시 실행을 허용하되, 인접 연산자(입출력이 겹치는 경우)의 동시 실행을 금지해 경쟁 조건을 방지한다. 이는 연산자 간 데이터 의존성을 그래프 구조로 표현하고, 토큰 충돌을 검사함으로써 구현된다.
전체적으로 카멜레온 언어는 데이터플로우 모델에 명시적 토큰 상태와 실행 규칙을 부여함으로써, 전통적인 페트리 넷이 갖는 복잡한 루프·조건 구현의 비효율성을 해소한다. 또한 C++ 라이브러리와의 원활한 연동을 통해 실용성을 높였으며, 그래픽 인터페이스 기반의 매크로 프로그래밍을 비전문가에게도 접근 가능하게 만든다. 다만 토큰 상태 관리와 연산자 스케줄링이 복잡해질 경우, 실행 엔진의 성능 최적화와 메모리 사용량에 대한 추가 연구가 필요하다.
댓글 및 학술 토론
Loading comments...
의견 남기기