Ruby 3.5의 주요 변경 사항은 다음과 같습니다:
-
Set 클래스 코어 승격:
Set
이 C로 구현된 코어 클래스로 승격되어 성능과 메모리 효율성(약 33% 감소)이 크게 향상되었습니다. 이는 내부적으로Hash
대신Set
연산에 최적화된 커스텀 해시 테이블을 사용하기 때문입니다. -
Ractor 업데이트 및
Ractor::Port
도입:Ractor
간 통신을 위한Ractor::Port
가 도입되었으며, 기존Ractor.yield
,Ractor#take
,Ractor.select
등 여러 메서드가 제거되었습니다. 개발자는port.send
및port.recv
를 사용하여 코드를 업데이트해야 합니다. -
nil
스플랫 동작 단순화: 스플랫 연산자(*
)가nil
과 함께 사용될 때[]
를 반환하도록 일관성이 강화되었습니다. 이는 더블 스플랫(**
)의 기존 동작과도 일치합니다. -
IO.select
Float::INFINITY
지원:IO.select
가 무기한 대기를 위해Float::INFINITY
를 타임아아웃 인수로 허용합니다. -
넘버링 파라미터 바인딩 변경:
_1
,_2
등 넘버링 파라미터가binding
인트로스펙션에서 제외되어 진정한 익명성을 확보했으며, Ruby 3.4에 도입된it
파라미터 사용이 권장됩니다. -
instance_variables_to_inspect
를 통한inspect
사용자 정의:Kernel#inspect
가instance_variables_to_inspect
메서드를 통해 출력할 인스턴스 변수를 사용자 정의할 수 있게 되어 민감한 정보 노출을 제어할 수 있습니다. -
Socket
연결 타임아웃:Socket.tcp
에open_timeout
인수가 추가되어 연결 시도에 대한 타임아웃 설정이 가능해졌습니다. -
기본 Gem 업데이트 및 제거:
ostruct
,pstore
,benchmark
,logger
등 일부 기본 Gem이 최신 버전으로 업데이트되었습니다. 반면,CGI
라이브러리의 대부분과SortedSet
의require 'set'
시 자동 로딩 기능이 제거되어 필요한 경우 해당 Gem을 명시적으로 추가해야 합니다.