Ruby 4.0은 개발 효율성과 성능 향상을 위한 여러 중요한 업데이트를 포함하고 있습니다.
Ruby::Box
-
Ruby::Box는 Ruby에 격리된 네임스페이스를 제공하는 실험적인 기능입니다. -
RUBY_BOX=1환경 변수를 설정하여 활성화할 수 있습니다. -
이를 통해
Ruby::Box.new인스턴스를 생성하고require하여 동일한 라이브러리의 다른 버전을 동시에 로드하는 것이 가능해집니다. -
예시:
v1::Foo.new.hello와v2::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`도 효율적인 구현으로 추가되었습니다.
-
새로운 코어 클래스:
Set과Pathname같은 유용한 클래스들이 이제require없이 자동 로드됩니다. -
성능 개선: 객체 할당이 JIT 없이 2배, JIT 활성화 시 거의 4배 빨라졌습니다.
RJIT는 별도 Gem으로 분리되었고,CGI라이브러리는 기본 Gem에서 제거되었으나cgi/escape를 통해 일부 기능은 유지됩니다.