Crystal은 Ruby 문법에 정적 타입과 C 수준 성능을 결합한 컴파일 언어다. 타입 추론으로 동적 언어처럼 작성하고, 컴파일 시 타입 검사와 최적화가 이루어진다.
기본 문법 (Ruby와 유사)
crystal
# Ruby와 거의 동일한 문법
def factorial(n : Int32) : Int32
return 1 if n <= 1
n * factorial(n - 1)
end
puts factorial(10) # 3628800
# 타입 추론
x = 42 # Int32 자동 추론
y = "hello" # String 자동 추론
z = [1, 2, 3] # Array(Int32) 자동 추론
# 제네릭
class Stack(T)
def initialize
@data = [] of T
end
def push(item : T)
@data << item
end
def pop : T?
@data.pop?
end
end
stack = Stack(Int32).new
stack.push(1)
stack.push(2)
동시성 (Fiber와 Channel)
crystal
# Fiber: 경량 코루틴
ch = Channel(Int32).new(10)
# 생산자 Fiber
spawn do
10.times do |i|
ch.send(i * i)
end
ch.close
end
# 소비자
while value = ch.receive?
puts value
end
# select (다중 채널)
select
when val = ch1.receive
puts "ch1: #{val}"
when val = ch2.receive
puts "ch2: #{val}"
when timeout(1.second)
puts "timeout"
end
Ruby vs Crystal 비교
| 항목 | Ruby | Crystal |
|---|
| 타입 | 동적 | 정적 (추론) |
| 성능 | 느림 | C 수준 |
| GC | MRI GC | Boehm GC |
| 바이너리 | 인터프리터 필요 | 독립 실행 파일 |
| 호환성 | - | Ruby와 유사 (완전 호환 X) |
관련 문서