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