Ruby 3.5 미리보기의 새로운 기능

작성자
Awesome Ruby
발행일
2025년 07월 25일

핵심 요약

  • 1 Ruby 3.5 미리보기는 Set 클래스를 코어 클래스로 승격하고 Ractor::Port를 도입하여 성능 및 동시성을 크게 향상시켰습니다.
  • 2 Ractor API는 Ractor::Port를 통한 새로운 통신 방식으로 변경되었으며, 기존 Ractor.yield 및 Ractor#take 메서드는 제거되었습니다.
  • 3 nil splat 동작, IO.select의 무한대 지원, binding 변경 등 언어의 일관성과 유연성을 높이는 다양한 개선이 이루어졌습니다.

도입

Ruby 3.5.0 preview1은 2025년 4월 18일에 출시되었으며, 이는 다가올 Ruby 3.5 최종 릴리스의 주요 변경 사항과 개선점을 미리 엿볼 수 있는 기회를 제공합니다. 이 미리보기 버전은 프로덕션 환경에서의 사용은 권장되지 않지만, 개발자들이 새로운 기능과 변경 사항을 미리 파악하고 애플리케이션 호환성을 테스트할 수 있도록 돕습니다. 이번 릴리스는 Set 클래스의 코어 클래스 승격, Ractor의 주요 업데이트, 그리고 다양한 언어적 개선을 포함하고 있습니다.

Ruby 3.5 미리보기에서는 여러 중요한 기능 업데이트와 변경 사항이 도입되었습니다. 첫째, Set 클래스가 stdlib에서 코어 클래스로 승격되었습니다. 기존에는 내부적으로 Hash를 사용하여 Ruby로 구현되었으나, 새로운 C 기반 구현은 Set 연산에 최적화된 맞춤형 해시 테이블 구조를 사용합니다. 이 변화는 대규모 Set에 대해 약 33%의 메모리 사용량 감소와 대부분의 Set 작업에서 성능 향상을 가져오며, 사용자에게는 기능적인 변경 없이 이점을 제공합니다.

둘째, Ractor에 Ractor::Port가 도입되면서 주요 업데이트가 이루어졌습니다. 이는 Ractor 간의 더 나은 동기화를 가능하게 하며, Ractor.yield, Ractor#take, Ractor.select 등 여러 기존 Ractor 메서드가 제거되었습니다. 개발자는 이제 Ractor.yield를 port.send로, ractor.take를 port.recv로 마이그레이션해야 합니다. 새로운 Ractor::Port API는 Ractor 간의 통신을 더욱 명확하고 효율적으로 만듭니다.

셋째, nil splat 연산자 동작이 단순화되어 일관성이 강화되었습니다. Ruby 3.5 이전에는 *nil이 내부적으로 nil.to_a를 호출하여 []를 반환했지만, 이제는 double splat(**nil{}를 반환하는 방식)과 같이 더욱 직접적이고 일관된 방식으로 []를 반환합니다.

넷째, IO.select 메서드가 Float::INFINITY를 타임아웃 인수로 지원하게 되었습니다. 이는 IO가 준비될 때까지 무기한으로 대기해야 하는 경우에 유용합니다.

다섯째, Numbered Parameters(_1, _2 등)가 더 이상 binding 인트로스펙션에 포함되지 않습니다. 이는 Numbered Parameters를 진정으로 익명으로 만들며, Ruby 3.4에서 도입된 it 파라미터로의 마이그레이션이 권장됩니다.

여섯째, Kernel#inspect가 instance_variables_to_inspect를 통해 사용자 정의를 지원합니다. 이를 통해 개발자는 inspect 출력에 표시할 인스턴스 변수를 선택적으로 제어하여 민감한 정보를 숨길 수 있습니다.

일곱째, Socket.tcp에 open_timeout 키워드 인수가 추가되어 연결 시도에 대한 타임아웃을 설정할 수 있게 되었습니다.

마지막으로, 기본 Gem들이 업데이트되었으며, ostruct, pstore, benchmark, logger 등이 최신 버전으로 번들 제공됩니다. 또한, CGI 라이브러리의 대부분이 제거되고 escape/unescape 메서드만 남았으며, SortedSet은 더 이상 require ‘set’ 시 자동 로드되지 않습니다. 이 두 가지 변경 사항은 해당 기능을 사용하는 애플리케이션에서 명시적인 gem 추가(cgi, sorted_set)를 요구합니다.

결론

Ruby 3.5 미리보기는 Set 클래스의 성능 최적화, Ractor::Port를 통한 동시성 프리미티브 개선, 그리고 언어적 일관성 강화 등 Ruby의 지속적인 발전을 보여줍니다. 이러한 변화들은 개발자 경험을 향상시키고 더욱 효율적인 코드를 작성할 수 있도록 돕습니다. 비록 미리보기 버전이지만, 최종 릴리스 전에 애플리케이션의 호환성을 테스트하고 새로운 API에 익숙해지는 것이 중요합니다. Ruby는 강력한 하위 호환성을 유지하면서도 혁신을 추구하며, 앞으로도 더욱 강력하고 유연한 프로그래밍 언어로 진화할 것입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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