Ruby 4.0의 주요 기능
Ruby Box: 유연성을 유지하면서 격리 제공
-
개념: 코드를 격리된 환경 내에서 평가할 수 있는 방법을 도입합니다. 이로 인해 박스 내에서 정의된 상수, 클래스, 몽키 패치는 명시적으로 노출하지 않는 한 외부로 유출되지 않습니다.
-
핵심: 전역 상태를 스코핑하는 공식적인 메커니즘으로, 레거시 Rails 애플리케이션에서 변경의 숨겨진 비용인 전역 상태 문제를 해결합니다.
-
실제 애플리케이션에서의 중요성:
- 전역 런타임을 오염시키지 않고 격리된 테스트 시나리오 실행.
- 대체 구현을 안전하게 실험.
- 앱 포크 없이 의존성 업그레이드를 평가.
ZJIT: Ruby 성능을 위한 새로운 기반
-
개념: 차세대 JIT 컴파일러로, 이전 구현보다 유지보수 및 확장이 용이하게 설계되었습니다.
-
현황: 아직 YJIT만큼 빠르지는 않지만, 향후 최적화를 위한 명확한 방향을 제시하며, Ruby 4.1에서 더 큰 발전을 기대합니다.
-
실제 변화: 애플리케이션 코드를 다르게 작성할 필요 없이 구조적인 이점을 제공하며, 내부 컴파일러 아키텍처 개선, 더 큰 컴파일 단위, 그리고 Ruby 코드 재작성 없이 미래 최적화 경로를 제공합니다.
Ractors: 진정한 병렬 처리를 향한 지속적인 발전
-
개념: Ruby 3.0에 도입된 Ractors 모델을 Ruby 4.0에서 개선하여 내부 경쟁을 줄이고 병렬 실행을 더욱 실용적으로 만듭니다.
-
활용:
Ractor::Port를 통한 구조화된 통신을 지원하여 안전한 작업 항목 교환이 가능합니다. -
Rails 애플리케이션에서의 중요성: 대부분의 Rails 앱은 현재 프로세스 수준의 동시성에 의존하지만, Ruby 4.0은 단일 프로세스 내에서 안전한 병렬 실행으로의 점진적 전환을 지속적으로 추진합니다.
코어 언어 및 표준 라이브러리 개선 사항
-
조건문 개선: 복잡한 다중 라인 표현식의 파싱 및 가독성 향상으로 미묘한 버그 감소.
-
Array 개선:
rfind와 같은 작은 추가 기능으로 오래된 코드베이스에서 흔히 발생하는 커스텀 유틸리티 코드 감소. -
오류 컨텍스트 개선: 호출자 및 피호출자 컨텍스트를 모두 표시하여 계층화된 시스템 디버깅 용이성 향상.