CuffScript v2.0.0

“As easy as a game, as light as a feather, and as fast as a flash.”

CuffScript는 특정 문법 하나를 잘 만드는 것보다, 프로그래밍이라는 경험 자체를 덜 무섭게 만드는 것을 목표로 만들어진 언어입니다. 설치도 설정도 없이, 이 페이지에서 바로 첫 줄을 실행해 볼 수 있습니다.

왜 CuffScript인가

처음 프로그래밍을 배우기 시작한 사람이 가장 먼저 마주하는 벽은 대개 논리가 아니라 낯선 기호와 엄격한 규칙입니다. 세미콜론을 하나 빠뜨렸다는 이유로 알 수 없는 에러 메시지와 마주하고 나면, 문제는 "내가 논리적으로 생각하지 못해서"가 아니라 "이 언어의 규칙을 아직 외우지 못해서"인데도 전자로 오해하기 쉽습니다.

CuffScript는 그 첫 벽을 낮추자는 생각에서 출발했습니다. set, change, do:, end처럼 사람이 실제로 쓰는 말에 가까운 키워드를 쓰고, 잘못된 부분이 있으면 어디가 왜 잘못됐는지 이야기해 주는 것 — 이런 선택 하나하나가 모여 "내가 지금 뭘 하고 있는지 이해할 수 있는" 경험을 만듭니다. 그렇다고 표현력을 희생하지는 않습니다. 함수, 비동기 실행, 정규식 기반 패턴 매칭까지 — 작은 자동화 스크립트나 게임 로직을 만들기에 부족함이 없는, 실제로 작동하는 언어입니다.

이름의 "Cuff"는 소맷단이라는 뜻입니다. 손목에 가볍게 채워 언제든 편하게 쓸 수 있는 도구처럼, 부담 없이 걸치고 바로 무언가를 만들어 볼 수 있는 언어이길 바라는 마음을 담았습니다. 정규식이 늘 무서웠던 사람, 프로젝트 세팅 없이 아이디어를 바로 실행해 보고 싶은 사람에게 특히 잘 맞습니다.

핵심 문법 한눈에

전체 문법은 가이드에서 차근차근 다루고, 여기서는 생김새만 빠르게 훑어봅니다.

개념 코드 설명
변수 set number x to 10 선언은 set, 재대입은 change ... to
불변 값 set constant list PRIMES to [2, 3, 5] 이름은 ALL-CAPS, 리스트도 튜플처럼 얼릴 수 있음
조건·반복 if x > 0 do: ... end 모든 블록은 do: ~ end로 감쌈
함수 set pure returnable async func f() do: ... end pure/returnable/async를 자유 조합
패턴 매칭 find "[num]+" from text \d 대신 [num]처럼 읽을 수 있는 이름
에러 복구 risky() or_else do: ... end 예외를 던지는 상황만 복구 — 게임의 재시작 버튼처럼
내장 라이브러리 use DLC:map math/string/time/random/list/map/convert/json/network 9종

예제 코드

재귀로 피보나치 수열을 구하는 예제입니다.

set returnable func fib(n) do:
    if n <= 1 do: return n end
    return fib(n - 1) + fib(n - 2)
end

print(f"fib(10) = {fib(10)}")

IDE에는 기초 문법부터 모듈까지 순서대로 따라갈 수 있는 예제 10개가 미리 준비돼 있습니다.

시작하기

설치 없이 바로 써보거나, 프로젝트에 엔진을 직접 가져다 쓸 수 있습니다.

1. 설치 없이 브라우저에서

이 사이트의 IDE는 CuffScript 엔진을 WebAssembly로 그대로 담고 있어, 아무것도 설치하지 않고 바로 실행해 볼 수 있습니다.

2. JS/TS 프로젝트에 임베드

cuffscript-wasm 패키지로 Node나 브라우저 어디서든 CuffScript를 실행할 수 있습니다.

npm install cuffscript-wasm

3. 네이티브 CLI 직접 빌드

C++17 컴파일러만 있으면 소스에서 바로 cuffc를 빌드할 수 있습니다. (아직 배포판 바이너리는 제공하지 않습니다.)

git clone https://github.com/cuffscript/cuffscript.git
cd cuffscript
make
./cuffc your_script.cuff

더 자세한 문법은 언어 가이드에서, 변경 이력은 CHANGELOG에서 확인할 수 있습니다.