Shik: 터미널 파이프라인과 REPL을 위한 미니멀 언어
파일에서 문자열 검색이나 프로젝트 라인 수 세기 같은 작업은 API가 일관되지 않은 유틸리티들을 연결해야 합니다. Bash에서는 [ -f ] vs [[ -f ]], grep -q vs grep -l, 파일명 공백 처리 인용부 따위로 골치 아픕니다. Python은 os, shutil, pathlib에 파일 작업이 흩어져 있습니다. Nushell 같은 쉘은 구조화된 데이터에 초점을 맞추지만 간결한 스크립팅에서는 부족합니다.
Shik은 Lisp/Haskell에서 영감을 받은 언어로, REPL과 자동화에 최적화되었습니다. 공백으로 함수 적용, $>로 파이프라인, #>로 조합을 중심으로 한 구문입니다.
예제: Bash에서 Shik으로
"- links"가 포함된 파일을 찾아 topics/로 이동:
Bash: grep 플래그 함정과 인용부 골칫거리로 5줄.
Shik:```
file.glob :./* $>
list.filter file.is-file $>
list.filter (fn [f] file.read f $> string.has "- links") $>
list.iterate (file.move :topics)
네 단계 파이프라인, import 없음, 외부 명령어 없음.
`.rs` 파일 라인 수 세기:
file.glob :./src/*/.rs $>
list.map (file.read #> string.lines #> list.len) $>
list.sum $>
파이프라인은 데이터를 왼쪽에서 오른쪽으로 흘러가며, 부분 적용을 쉽게 하는 커링(currying)이 핵심입니다.
## 핵심 설계: Lisp와 Haskell의 만남
모든 것이 함수입니다. `+ 1 2`, `list.map`, `file.glob` — 모두 동일하게 호출. 공백으로 함수 적용, 단일 인수면 괄호 불필요.
네 가지 핵심 연산자:
1. 공백: `f x`
2. `#>`: 조합 `f #> g` → `fn [x] g (f x)`
3. `$`: 낮은 우선순위 적용 `print $ + 1 2`
4. `$>`: 파이프라인 `x $> f`
자동 커링: `(+ 1)`은 "1을 더하는 함수"가 됩니다. 인수 순서: 첫 번째가 고정 수정자.
let lst [1 2 3 4]
lst $> list.map (+ 1) ; [2 3 4 5]
lst $> list.map (* 2) ; [2 4 6 8]
통일된 산술 연산, `flip` 불필요.
## 구문 치트시트: 5분 만에 마스터
**리터럴:**```
42 ; 숫자
"hello" ; 문자열
:hello ; 심볼 (공백 없음)
[1 2 3] ; 리스트
{:name :Alice} ; 객체
fn [arg] body ; 함수
변수:```
let name :Alice
let greet fn [name] "Hello, {name}!"
print $ greet name
set x (+ x 5) ; 변경
문자열 보간 `{expr}` 사용. 점은 이름 일부: `string.+`, `file.read`.
**내장 함수:** `file.`, `list.`, `string.`, `shell.` 즉시 사용 가능. `help list.map`으로 REPL에서 도움말 확인.
## 터미널 편의성
문장문 vs 표현식 구분 없음 — 모든 게 표현식. 데이터와 전역 함수만, 클래스/메서드 없음. 순수 REPL에서 테스트, 화살표 키 불필요.
파이프라인 `$>`로 중첩 제거:
**파이프라인 없이:** `print (list.sum (list.map ...))` — 엉망.
**파이프라인과 함께:** 데이터가 왼쪽에서 오른쪽으로 선형적으로 흐름.
`let`으로 커링 예제:
let add-one (+ 1)
let files-with-links (fn [dir] file.glob dir $> list.filter (file.read #> string.has "- links"))
## 주요 기능
- 통합 함수 적용으로 구문 학습 최소화.
- 파이프라인 `$>`와 커링으로 중첩 없는 데이터 체인.
- 내장 `file.`, `list.`, `string.` — import 불필요.
- REPL 우선: `help`, 심볼 `:`, 보간 `{}`.
- 인수 순서: 첫 번째가 수정자로 부분 적용 쉬움.
— Editorial Team
아직 댓글이 없습니다.