Nim은 Python 같은 문법에 C 수준 성능, 강력한 메타프로그래밍을 결합한 정적 타입 컴파일 언어다. C/C++/JavaScript로 트랜스파일된다.
기본 문법
nim
# Python과 유사한 들여쓰기 기반 문법
import strformat, sequtils
proc greet(name: string): string =
fmt"Hello, {name}!"
# 제네릭
proc max[T](a, b: T): T =
if a > b: a else: b
echo max(3, 5) # 5
echo max(3.0, 5.0) # 5.0
# 시퀀스 (동적 배열)
var nums = @[1, 2, 3, 4, 5]
let evens = nums.filter(x => x mod 2 == 0)
let squared = evens.map(x => x * x)
echo squared # @[4, 16]
# 이터레이터
iterator fibonacci(): int =
var a, b = 0, 1
while true:
yield a
(a, b) = (b, a + b)
for i, n in enumerate(fibonacci()):
if i >= 10: break
echo n
매크로 시스템
nim
import macros
# 컴파일 타임 코드 생성
macro twice(code: untyped): untyped =
result = quote do:
`code`
`code`
twice:
echo "Hello!"
# 컴파일 시 두 번 실행되는 코드로 변환
# 도메인 특화 언어 (DSL) 만들기
macro html(body: untyped): string =
# HTML 생성 DSL
discard
메모리 관리 옵션
| 모드 | 방식 | 사용 시기 |
|---|
| refc | 참조 계산 + 사이클 GC | 기본, 일반 앱 |
| arc | 자동 참조 계산 (Rust-like) | 성능 중요 |
| orc | arc + 사이클 수집 | 기본 권장 (1.4+) |
| none | 수동 관리 | 임베디드 |
관련 문서