홈으로 돌아가기

REPL 파이프라인을 위한 Shik 언어

Shik — 터미널에서 REPL 및 작업 자동화를 위한 미니멀리스트 언어. Lisp/Haskell 기반 구문에 파이프와 커링이 파일 및 데이터 처리를 단순화합니다. bash, Python, Fish와의 비교.

Shik: 터미널 스크립팅을 위한 새로운 언어의 이유
Advertisement 728x90

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/로 이동:

Google AdInline article slot

Bash: grep 플래그 함정과 인용부 골칫거리로 5줄.

Shik:```

file.glob :./* $>

Google AdInline article slot

list.filter file.is-file $>

list.filter (fn [f] file.read f $> string.has "- links") $>

list.iterate (file.move :topics)

Google AdInline article slot
네 단계 파이프라인, import 없음, 외부 명령어 없음.

`.rs` 파일 라인 수 세기:

file.glob :./src/*/.rs $>

list.map (file.read #> string.lines #> list.len) $>

list.sum $>

print

파이프라인은 데이터를 왼쪽에서 오른쪽으로 흘러가며, 부분 적용을 쉽게 하는 커링(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

Advertisement 728x90

다음 읽기