Ruby 4.0: 새로운 기능과 주요 변경 사항

What's New in Ruby 4.0

작성자
HackerNews
발행일
2025년 05월 14일

핵심 요약

  • 1 Ruby 4.0은 30주년 기념 메이저 버전으로, Ruby::Box, Ractor API 재설계, ZJIT 도입 등 다양한 개선 사항을 포함합니다.
  • 2 실험적인 네임스페이스 기능인 Ruby::Box와 Ractor::Port를 통한 Ractor 간 통신 방식 변경이 핵심입니다.
  • 3 새로운 JIT 컴파일러 ZJIT 도입, Array#rfind 및 instance_variables_to_inspect 추가, Set, Pathname 자동 로딩 등 개발 편의성이 향상되었습니다.

도입

Ruby 4.0이 다음 주 크리스마스에 릴리스될 예정입니다. 이번 메이저 버전 업그레이드는 Ruby의 첫 공개 릴리스 30주년을 기념하며, 심각한 호환성 파괴 없이 새로운 JIT 컴파일러, Ractor 개선, Ruby::Box 네임스페이스 메커니즘 등 다채로운 변화를 가져옵니다. 본 글에서는 Ruby 4.0에 도입되는 주요 기능과 개선 사항들을 상세히 살펴봅니다.

Ruby 4.0은 개발 효율성과 성능 향상을 위한 여러 중요한 업데이트를 포함하고 있습니다.

Ruby::Box

  • Ruby::Box는 Ruby에 격리된 네임스페이스를 제공하는 실험적인 기능입니다.

  • RUBY_BOX=1 환경 변수를 설정하여 활성화할 수 있습니다.

  • 이를 통해 Ruby::Box.new 인스턴스를 생성하고 require하여 동일한 라이브러리의 다른 버전을 동시에 로드하는 것이 가능해집니다.

  • 예시: v1::Foo.new.hellov2::Foo.new.hello가 각각 다른 버전의 Foo 클래스를 참조합니다.

Ractor

  • Ractor의 API가 Ractor::Port를 통한 통신 방식으로 재설계되었습니다.

  • 기존의 Ractor.yield와 `Ractor

take` 메서드는 제거되었습니다.

  • 새로운 방식은 Ractor::Port.new를 생성하고 p << "value"로 값을 보내고 port.receive로 값을 받는 형태입니다.

ZJIT

  • 새로운 JIT 컴파일러인 ZJIT가 Ruby에 병합되었습니다.

  • YJIT가 사용하는 지연 기본 블록 버전 컴파일러와 달리, 메서드 기반 JIT 컴파일러를 구현합니다.

  • 해석된 코드보다는 빠르지만, 아직 YJIT만큼 빠르지는 않아 프로덕션 환경에서는 YJIT가 여전히 권장됩니다.

기타 주요 변경 사항

  • 논리 연산자 줄바꿈 허용: if condition1? && condition2?와 같이 논리 연산자(and, or, &&, ||)를 다음 줄에 배치하는 문법이 허용됩니다.

  • Ruby 최상위 모듈: Ruby 모듈에 Ruby::VERSION, Ruby::DESCRIPTION 등 여러 상수가 정의되었습니다.

  • instance_variables_to_inspect: 객체의 inspect 출력 시 특정 인스턴스 변수만 포함하도록 private def instance_variables_to_inspect = [:@variable]와 같이 정의할 수 있게 되어 출력의 노이즈를 줄입니다.

  • **`Array

rfind**: 조건에 맞는 마지막 요소를 찾는 효율적인 메서드가 추가되었습니다. reverse_each.find보다 배열 할당을 피하여 효율적입니다. Array

find`도 효율적인 구현으로 추가되었습니다.

  • 새로운 코어 클래스: SetPathname 같은 유용한 클래스들이 이제 require 없이 자동 로드됩니다.

  • 성능 개선: 객체 할당이 JIT 없이 2배, JIT 활성화 시 거의 4배 빨라졌습니다. RJIT는 별도 Gem으로 분리되었고, CGI 라이브러리는 기본 Gem에서 제거되었으나 cgi/escape를 통해 일부 기능은 유지됩니다.

결론

Ruby 4.0은 Ruby의 30주년을 기념하는 중요한 릴리스로, 성능 개선뿐만 아니라 개발 편의성을 높이는 다양한 실험적 기능과 API 변경을 포함합니다. 특히 `Ruby::Box`와 `Ractor::Port`의 도입은 Ruby의 동시성 및 모듈화 전략에 있어 중요한 진전을 의미합니다. `ZJIT`의 병합은 장기적인 성능 향상을 위한 기반을 마련했으며, `instance_variables_to_inspect`나 `Array#rfind`와 같은 작은 개선 사항들도 개발자의 일상적인 작업을 더욱 효율적으로 만들 것입니다. 이 버전은 Ruby 생태계에 새로운 활력을 불어넣을 것으로 기대됩니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!