Ruby 개발팀은 Ruby 3.4.0-rc1(릴리스 후보 1)의 출시를 발표했습니다. 이 버전은 Ruby의 핵심 구성 요소에 걸쳐 상당한 변화와 개선을 담고 있으며, 특히 성능, 유연성, 그리고 개발자 경험 향상에 중점을 두고 있습니다. 이번 릴리스 후보는 새로운 기본 파서인 Prism의 도입, 혁신적인 모듈러 가비지 컬렉터(GC) 기능, 그리고 광범위하게 최적화된 YJIT(Just-In-Time) 컴파일러를 포함하여, Ruby 생태계의 지속적인 발전을 명확히 보여줍니다. 개발자들은 이 릴리스 후보를 통해 다가올 안정 버전의 주요 기능들을 미리 경험하고 호환성을 검증할 기회를 얻게 됩니다.
Ruby 3.4.0-rc1의 가장 주목할 만한 변화는 기본 파서가 기존의 parse.y
에서 Prism으로 변경된 것입니다. 이는 파싱 효율성 및 향후 문법 확장에 대한 유연성을 높입니다. 다음으로, 모듈러 GC 기능이 도입되어 Ruby의 가비지 컬렉션 아키텍처에 혁신을 가져왔습니다. 이 기능은 빌드 옵션과 환경 변수를 통해 다양한 GC 구현을 동적으로 로드할 수 있게 하며, 내장 GC의 분리 및 실험적인 MMTk 기반 GC 라이브러리 제공을 포함합니다.
언어적 측면에서는 frozen_string_literal
주석 없는 문자열 리터럴 변경 시 폐기 예정 경고가 추가되어 코드 안정성을 높였습니다. 블록 인자를 위한 it
키워드 도입 및 nil
에 대한 키워드 스플랫 지원으로 편의성이 향상되었습니다. 반면, 블록과 키워드 인수를 인덱스로 사용할 수 없게 되어 문법의 명확성이 강화되었습니다.
YJIT 컴파일러는 x86-64 및 arm64 플랫폼에서 성능이 크게 향상되었고, 메모리 사용량도 줄었습니다. 주요 개선 사항으로는 통합 메모리 제한, 확장된 통계, 컴파일 로그, 멀티 Ractor 모드에서의 공유 가능한 상수 지원 등이 있습니다. 최적화 측면에서는 콘텍스트 압축, 개선된 레지스터 할당기, 코어 프리미티브의 Ruby 재작성, 작고 사소한 메서드 인라인 변환, 특정 런타임 메서드에 대한 특별한 코드 생성, 그리고 문자열 및 비트 연산 최적화 등이 이루어졌습니다.
코어 클래스 변경으로 Exception#set_backtrace
는 Thread::Backtrace::Location
배열을 입력으로 받을 수 있게 되었고, Range#size
는 순회 불가능 범위에 대해 TypeError
를 발생시킵니다. 호환성 문제로는 에러 메시지 및 백트레이스 출력 형식의 변경이 있으며, C API에서는 불필요한 함수들이 삭제되었습니다. 그 외, 사용되지 않은 블록 및 최적화된 코어 메서드 재정의 시 경고 기능이 추가되었습니다. Ruby 3.3.0 이후 총 4820개 파일 수정, 196907줄 추가, 253488줄 삭제의 방대한 변화가 있었습니다.
Ruby 3.4.0-rc1은 Prism 파서와 모듈러 GC 도입으로 아키텍처를 현대화하고, YJIT의 지속적인 개선으로 성능을 크게 향상시킨 중요한 릴리스 후보입니다. 언어 기능, 코어 클래스, C API 등 전반적인 개선은 개발자에게 안정적이고 효율적인 환경을 제공합니다. 이 버전을 통해 커뮤니티는 새로운 기능들을 테스트하고 피드백을 제공하여 Ruby 3.4.0의 최종 안정 버전을 더욱 견고하게 만드는 데 기여할 수 있습니다.