Ruby 3.5 Preview의 새로운 기능

What's New in Ruby 3.5 Preview

작성자
발행일
2025년 08월 14일

핵심 요약

  • 1 Ruby 3.5.0 preview1이 2025년 4월 18일에 출시되었으며, 최종 릴리스 전의 주요 변경 사항을 미리 보여줍니다.
  • 2 Set 클래스가 C로 구현된 코어 클래스로 승격되어 성능 및 메모리 사용량이 개선되었고, Ractor는 Ractor::Port 도입으로 동기화 기능이 강화되었습니다.
  • 3 `nil` 스플랫 동작 단순화, `IO.select`의 `Float::INFINITY` 지원, 넘버링 파라미터 바인딩 변경 등 다양한 언어 및 라이브러리 개선이 포함됩니다.

도입

Ruby 3.5.0 preview1은 2025년 4월 18일에 공개되었으며, 이는 최종 버전 출시 전 Ruby 개발자들이 새로운 기능과 변경 사항을 미리 경험하고 호환성을 테스트할 수 있도록 제공됩니다. 이번 프리뷰 릴리스는 프로덕션 환경에서의 사용은 권장되지 않지만, 향후 Ruby 3.5의 주요 개선 사항들을 미리 엿볼 수 있는 기회를 제공합니다.

Ruby 3.5의 주요 변경 사항은 다음과 같습니다:

  • Set 클래스 코어 승격: Set이 C로 구현된 코어 클래스로 승격되어 성능과 메모리 효율성(약 33% 감소)이 크게 향상되었습니다. 이는 내부적으로 Hash 대신 Set 연산에 최적화된 커스텀 해시 테이블을 사용하기 때문입니다.

  • Ractor 업데이트 및 Ractor::Port 도입: Ractor 간 통신을 위한 Ractor::Port가 도입되었으며, 기존 Ractor.yield, Ractor#take, Ractor.select 등 여러 메서드가 제거되었습니다. 개발자는 port.sendport.recv를 사용하여 코드를 업데이트해야 합니다.

  • nil 스플랫 동작 단순화: 스플랫 연산자(*)가 nil과 함께 사용될 때 []를 반환하도록 일관성이 강화되었습니다. 이는 더블 스플랫(**)의 기존 동작과도 일치합니다.

  • IO.select Float::INFINITY 지원: IO.select가 무기한 대기를 위해 Float::INFINITY를 타임아아웃 인수로 허용합니다.

  • 넘버링 파라미터 바인딩 변경: _1, _2 등 넘버링 파라미터가 binding 인트로스펙션에서 제외되어 진정한 익명성을 확보했으며, Ruby 3.4에 도입된 it 파라미터 사용이 권장됩니다.

  • instance_variables_to_inspect를 통한 inspect 사용자 정의: Kernel#inspectinstance_variables_to_inspect 메서드를 통해 출력할 인스턴스 변수를 사용자 정의할 수 있게 되어 민감한 정보 노출을 제어할 수 있습니다.

  • Socket 연결 타임아웃: Socket.tcpopen_timeout 인수가 추가되어 연결 시도에 대한 타임아웃 설정이 가능해졌습니다.

  • 기본 Gem 업데이트 및 제거: ostruct, pstore, benchmark, logger 등 일부 기본 Gem이 최신 버전으로 업데이트되었습니다. 반면, CGI 라이브러리의 대부분과 SortedSetrequire 'set' 시 자동 로딩 기능이 제거되어 필요한 경우 해당 Gem을 명시적으로 추가해야 합니다.

결론

Ruby 3.5 프리뷰 릴리스는 `Ractor::Port`와 같은 동시성 프리미티브 개선, `Set` 클래스 코어 승격과 같은 성능 최적화, 그리고 `nil` 스플랫 동작 및 넘버링 파라미터 변경과 같은 언어 의미론의 명확화를 통해 개발자 경험을 지속적으로 향상시키고 있습니다. 대부분의 애플리케이션에 대한 강력한 하위 호환성을 유지하면서도, 일부 API 변경 사항에 대해서는 개발자의 마이그레이션 작업이 필요할 수 있습니다. 최종 릴리스 전 애플리케이션의 호환성 테스트는 필수적이며, 이러한 개선 사항들은 Ruby가 더욱 강력하고 효율적인 프로그래밍 언어로 발전하는 데 기여할 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!