JavaScript/Python과 유사하지만, 암묵적 동시성을 지원하는 CascadaScript

by DD
4주 전
조회수 8

CascadaScript는 별도의 await, promise 없이 암묵적으로 동시성을 지원하는 새로운 언어임

데이터 종속성(Data Dependency)을 기반으로 자동 동기화를 구현하여 개발 편의성을 높임

오류 처리(Error Handling)를 데이터 흐름에 통합하여, 부분적인 실패에도 유연하게 대처 가능

실용성(Practicality)에 대한 의문과 기존 async/await 방식과의 비교 등, 커뮤니티 내 다양한 의견이 존재함

암묵적 동시성 모델의 작동 방식

CascadaScript는 데이터 종속성(Data Dependency)을 기반으로 암묵적인 동시성을 구현한다. 즉, 한 연산이 다른 연산의 결과를 필요로 할 때 자동으로 대기하며, 그렇지 않은 연산들은 동시에 실행된다. fetchInput()과 transform(a)의 예시처럼, `transform()`은 `fetchInput()`의 결과가 나올 때까지 기다린다. 이러한 방식은 개발자가 별도의 동기화 코드를 작성할 필요 없이, 자연스럽게 동시성을 활용할 수 있게 해준다.

오류 처리(Error Handling) 메커니즘

CascadaScript는 전통적인 예외 처리 대신 오류 값(Error Value)을 사용한다. 오류가 발생하면 해당 오류는 다른 값과 마찬가지로 데이터 흐름을 따라 전파되며, 오류에 의존하는 연산만 영향을 받는다. 예를 들어, `fetchPosts()`가 실패하면 `postCount`는 오류 값을 가지게 되지만, `username`은 영향을 받지 않는다. 이러한 방식은 부분적인 실패(Partial Failure)에도 시스템의 안정성을 유지하는 데 기여한다.

순차적 실행 보장 방법

CascadaScript는 외부 함수나 객체에 대해 순차적 실행을 보장하기 위해 `!` 마커, `each` 루프, `sequence` 채널을 제공한다. `!` 마커는 특정 외부 객체에 대한 연산의 순서를 강제하며, `each` 루프는 반복 작업을 순차적으로 처리한다. `sequence` 채널은 외부 객체를 순차적으로 처리하도록 선언하여, 데이터베이스 연결과 같은 상태를 관리하는 데 유용하다. 이러한 기능들은 데이터 격리 아키텍처(Data Isolation Architecture)를 유지하면서도 필요한 경우 순차적 실행을 보장한다.

async/await 방식과의 비교

커뮤니티에서는 CascadaScript의 암묵적 동시성 모델이 async/await 방식보다 편리할 수 있다는 의견과, 예측 불가능한 동작(Undefined Behavior)을 야기할 수 있다는 우려가 공존한다. 특히, C 언어의 메모리 정렬(Memory Ordering)과 유사한 문제 발생 가능성에 대한 지적이 있었다. async/await는 코드의 실행 흐름을 명확하게 파악할 수 있게 해주는 반면, CascadaScript는 암묵적인 동작으로 인해 디버깅이 어려울 수 있다는 단점이 존재한다.

Simple and safe implicit async programming model for imperative (JS/Python-like) languages