Ruby 4.0.0-preview2는 언어 자체와 핵심 라이브러리, 그리고 JIT 컴파일러 스택에 걸쳐 다양한 업데이트를 포함합니다. 주요 변경 사항은 다음과 같습니다.
언어 변경 사항
nil객체가 더 이상nil.to_a를 호출하지 않도록 변경되었습니다. 이는**nil이nil.to_hash를 호출하지 않는 것과 유사한 일관성을 제공합니다. [[Feature #21047]]
코어 클래스 업데이트
- Binding: `Binding
local_variables가 더 이상 번호 매개변수를 포함하지 않으며, Binding
local_variable_get 및 Binding
local_variable_set`도 번호 매개변수 처리를 거부합니다. [[Bug #21049]]
-
IO:
IO.select메서드가 타임아웃 인수로Float::INFINITY를 허용하여 무한 대기를 지원합니다. [[Feature #20610]] -
String: 유니코드 버전이 17.0.0으로, 이모지 버전이 17.0으로 업데이트되었습니다. 이는
Regexp에도 동일하게 적용됩니다. [[Feature #19908]][[Feature #20724]][[Feature #21275]]
표준 라이브러리 업데이트
ostruct 0.6.1, pstore 0.2.0, benchmark 0.4.0, logger 1.7.0, rdoc 6.13.1, win32ole 1.9.2, irb 1.15.2, reline 0.6.1, readline 0.0.4, fiddle 1.1.6 등 다수의 표준 라이브러리가 업데이트되었습니다.
JIT 컴파일러 개선
-
YJIT:
ratio_in_yjit는 이제--enable-yjit=stats로 빌드해야 기본 통계에 포함됩니다. TracePoint에 의해 모든 코드가 무효화될 때 증가하는invalidate_everything통계가 추가되었습니다.RubyVM::YJIT.enable에mem_size:및call_threshold:옵션이 추가되었습니다. -
ZJIT: 실험적인 메서드 기반 JIT 컴파일러인 ZJIT가 도입되었습니다.
--enable-zjit옵션으로 활성화할 수 있으나, 현재 Ruby 4.0.0-preview2 버전에서는 대부분의 벤치마크에서 속도 향상을 기대하기 어려우므로, 정식 릴리스까지 성능 평가는 자제해 주십시오. -
RJIT:
--rjit옵션이 제거되었으며, 해당 구현은ruby/rjit저장소로 이전될 예정입니다.
Ruby 3.4.0 이후 총 3607개의 파일이 변경되었고, 197451줄이 추가되고 285607줄이 삭제되는 대규모 업데이트가 이루어졌습니다.