주요 기능 및 개선 사항
-
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.new
및Socket.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_backtrace
가Thread::Backtrace::Location
배열을 허용하고,GC.config
및GC.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_newobj
및 rb_gc_force_recycle
함수가 제거되었습니다. 또한, 사용되지 않는 블록을 메서드에 전달할 때 경고가 표시되고, 특정 코어 메서드를 재정의할 때 성능 경고가 발생합니다.
Ruby 3.3.0 이후로 총 4942개의 파일이 변경되었으며, 202244줄이 추가되고 255528줄이 삭제되는 등 방대한 변화가 있었습니다.