본문으로 건너뛰기

T-Ruby 소개

Ruby를 위한 TypeScript 스타일 정적 타입 시스템, T-Ruby를 소개합니다.

T-Ruby는 TypeScript 개발자에게 익숙한 개발 경험을 Ruby 개발자에게 제공하여, 코드에 직접 타입 어노테이션을 추가하고 런타임 전에 타입 오류를 감지할 수 있게 합니다.

주요 기능

  • TypeScript 스타일 문법: TypeScript 개발자에게 익숙한 타입 어노테이션 문법
  • 점진적 타이핑: 기존 Ruby 코드베이스에 점진적으로 타입 추가 가능
  • RBS 생성: .rbs 시그니처 파일 자동 생성
  • 제로 런타임 오버헤드: 컴파일 시 타입이 제거됨

시작하기

T-Ruby를 설치하고 Ruby 코드에 타입을 추가해보세요:

gem install t-ruby

첫 번째 .trb 파일을 작성합니다:

def greet(name: String): String
"Hello, #{name}!"
end

Ruby로 컴파일:

trc greet.trb

더 자세한 내용은 문서를 확인하세요!

타입 추론: 적게 쓰고, 더 많이 타이핑하세요

T-Ruby가 이제 코드에서 반환 타입을 자동으로 추론합니다. 명백한 타입에 대해 더 이상 명시적 어노테이션이 필요 없습니다!

새로운 기능

이전에는 이렇게 작성해야 했습니다:

def greet(name: String): String
"Hello, #{name}!"
end

이제 반환 타입은 선택사항입니다:

def greet(name: String)
"Hello, #{name}!"
end

T-Ruby가 greetString을 반환한다고 추론하고 올바른 RBS를 생성합니다:

def greet: (name: String) -> String

동작 원리

새로운 타입 추론 엔진은 메서드 본문을 분석하여 반환 타입을 결정합니다:

  • 리터럴 추론: "hello"String, 42Integer
  • 메서드 호출 추적: str.upcaseString
  • 암묵적 반환: Ruby의 마지막 표현식이 반환 타입이 됨
  • 조건문 처리: if/else 분기에서 유니온 타입

예제

간단한 메서드

class Calculator
def double(n: Integer)
n * 2
end

def is_positive?(n: Integer)
n > 0
end
end

생성된 RBS:

class Calculator
def double: (n: Integer) -> Integer
def is_positive?: (n: Integer) -> bool
end

인스턴스 변수

class User
def initialize(name: String)
@name = name
end

def greeting
"Hello, #{@name}!"
end
end

생성된 RBS:

class User
@name: String

def initialize: (name: String) -> void
def greeting: () -> String
end

기술적 세부사항

추론 시스템은 TypeScript의 접근 방식에서 영감을 받았습니다:

  • BodyParser: T-Ruby 메서드 본문을 IR 노드로 파싱
  • TypeEnv: 변수 타입 추적을 위한 스코프 체인 관리
  • ASTTypeInferrer: 지연 평가와 캐싱으로 IR 순회

구현에 대한 심층 분석은 기술 블로그 포스트를 확인하세요.

지금 사용해보세요

최신 T-Ruby로 업데이트하고 자동 타입 추론을 즐기세요:

gem update t-ruby

기존 코드는 이전과 동일하게 동작합니다 - 명시적 타입이 여전히 우선됩니다. 추론은 반환 타입이 생략된 경우에만 작동합니다.

피드백

타입 추론 사용 경험을 듣고 싶습니다. 엣지 케이스를 발견하셨나요? 제안이 있으신가요? GitHub에서 이슈를 열어주세요.

즐거운 타이핑 되세요!