Ruby 3.4.0 릴리스

Ruby 3.4.0 Released

작성자
Ruby on Rails 소식지
발행일
2024년 12월 25일

핵심 요약

  • 1 Ruby 3.4.0이 공식 릴리스되었으며, 새로운 기능과 성능 개선이 대거 포함되었습니다.
  • 2 `it` 블록 파라미터 참조 도입, Prism 파서의 기본 채택, Happy Eyeballs Version 2 지원이 주요 특징입니다.
  • 3 YJIT 성능 향상 및 Modular GC 도입을 통해 실행 속도와 메모리 효율성이 크게 개선되었습니다.

도입

2024년 12월 25일, Ruby 프로그래밍 언어의 최신 버전인 Ruby 3.4.0이 공식적으로 릴리스되었습니다. 이번 릴리스는 개발자 경험을 향상시키고, 애플리케이션의 성능 및 안정성을 강화하기 위한 다양한 혁신적인 기능과 개선 사항을 포함하고 있습니다. 특히 새로운 `it` 블록 파라미터 참조, 기본 파서로의 Prism 전환, 소켓 라이브러리의 Happy Eyeballs Version 2 지원, 그리고 YJIT 및 Modular GC의 중대한 개선은 Ruby 생태계에 중요한 변화를 가져올 것으로 예상됩니다. Ruby 3.4.0은 더욱 효율적이고 강력한 개발 환경을 제공하기 위한 Ruby 커뮤니티의 지속적인 노력을 반영합니다.

주요 기능 및 개선 사항

  • it 블록 파라미터 참조 도입: Ruby 3.4.0에서는 변수 이름을 명시하지 않고 블록 파라미터를 참조할 수 있는 it 키워드가 새롭게 추가되었습니다(Feature #18980). 이는 _1과 유사하게 동작하지만, 특히 단일 파라미터를 사용하는 간단한 블록에서 코드의 가독성을 크게 향상시킵니다.

  • Prism 파서 기본 채택: 기존 parse.y 대신 Prism이 Ruby의 기본 파서로 채택되었습니다(Feature #20564). 이는 주로 내부적인 개선 사항으로, 사용자에게 직접적인 큰 변화는 없지만, 잠재적인 호환성 문제 발생 시 보고를 요청하고 있습니다. 기존 파서를 사용하려면 --parser=parse.y 명령줄 인수를 사용할 수 있습니다.

  • Happy Eyeballs Version 2 (RFC 8305) 지원: 소켓 라이브러리에 Happy Eyeballs Version 2가 도입되어 TCPSocket.newSocket.tcp 메서드의 네트워크 연결 안정성과 효율성이 개선되었습니다. 이 알고리즘은 IPv6와 IPv4 이름 해결을 동시에 수행하고, IPv6를 우선하여 연결을 시도하며, 250ms 간격으로 병렬 연결 시도를 staggered 방식으로 진행하여 최적의 연결을 빠르게 설정합니다. 이는 현대 인터넷 환경에서 연결 지연을 최소화하는 데 기여합니다.

  • YJIT 성능 향상: Ruby 3.4.0의 YJIT(Just-In-Time) 컴파일러는 x86-64 및 arm64 플랫폼 모두에서 전반적인 성능 향상을 이루었습니다. 압축된 메타데이터와 통합 메모리 제한(--yjit-mem-size)을 통해 메모리 사용량이 감소했으며, Array#each, Array#select, Array#map과 같은 핵심 메서드들이 Ruby로 재작성되어 성능이 더욱 최적화되었습니다(Feature #20182). 또한, 비어있는 메서드나 상수를 반환하는 메서드와 같은 작고 사소한 메서드의 인라인화 기능이 추가되어 실행 효율성이 증대되었습니다.

  • Modular GC 도입: 모듈형 가비지 컬렉터(GC) 기능이 추가되어, 빌드 시 --with-modular-gc 옵션을 통해 동적으로 다른 GC 구현을 로드할 수 있게 되었습니다(Feature #20351). Ruby의 내장 GC 또한 별도의 파일로 분리되어 모듈형 라이브러리로 빌드될 수 있으며(Feature #20470), MMTk 기반의 실험적인 GC 라이브러리도 제공됩니다(Feature #20860). 이는 향후 다양한 GC 전략을 유연하게 적용할 수 있는 기반을 마련합니다.

언어 및 라이브러리 변경 사항

  • 언어 변경: frozen_string_literal 주석이 없는 파일에서 문자열 리터럴이 변경될 때 Deprecation 경고가 발생하며(Feature #20205), 메서드 호출 시 키워드 스플래팅 nil이 지원됩니다(Bug #20064). 또한, 인덱스에서 블록 전달 및 키워드 인수가 더 이상 허용되지 않습니다(Bug #19918, #20218).

  • 코어 클래스 업데이트: Exception#set_backtraceThread::Backtrace::Location 배열을 허용하고, GC.configGC.rgengc_allow_full_mark와 같은 GC 설정 기능이 추가되었습니다. Ractor에는 require 허용, Ractor.main?, Ractor.[], Ractor.store_if_absent 등 다양한 기능이 보강되었습니다.

  • 표준 라이브러리 업데이트: RubyGems, Bundler, JSON, Tempfile 등의 표준 라이브러리도 업데이트되었습니다. 특히 JSON.parse의 성능이 약 1.5배 향상되었습니다.

호환성 및 기타 변경 사항

오류 메시지 및 백트레이스 표시 방식, Hash#inspect 렌더링 방식에 변경이 있으며, Kernel#Float()String#to_f의 동작도 일부 수정되었습니다. C API에서는 rb_newobjrb_gc_force_recycle 함수가 제거되었습니다. 또한, 사용되지 않는 블록을 메서드에 전달할 때 경고가 표시되고, 특정 코어 메서드를 재정의할 때 성능 경고가 발생합니다.

Ruby 3.3.0 이후로 총 4942개의 파일이 변경되었으며, 202244줄이 추가되고 255528줄이 삭제되는 등 방대한 변화가 있었습니다.

결론

Ruby 3.4.0 릴리스는 `it` 블록 파라미터, Prism 파서의 기본 채택, Happy Eyeballs Version 2 지원과 같은 언어 및 네트워크 기능의 개선을 통해 개발 편의성을 높이고 연결 안정성을 강화했습니다. 특히 YJIT의 지속적인 성능 향상과 Modular GC의 도입은 Ruby 애플리케이션의 실행 속도와 메모리 효율성을 크게 개선하며, 미래의 다양한 가비지 컬렉터 구현을 위한 견고한 기반을 마련했습니다. 이러한 광범위한 업데이트는 Ruby가 현대적인 개발 요구사항에 발맞춰 지속적으로 발전하고 있음을 보여주며, 개발자들에게 더욱 강력하고 유연하며 안정적인 개발 환경을 제공할 것입니다. Ruby 3.4.0은 Ruby 생태계의 활발한 발전을 상징하는 중요한 이정표가 될 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

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