Ruby 4.0 변경사항: 언어, 코어 클래스, Ractor 및 표준 라이브러리 업데이트

Ruby 4.0 changes - Ruby Changes

작성자
발행일
2025년 12월 25일

핵심 요약

  • 1 Ruby 4.0은 논리 연산자 줄바꿈 허용, `*nil` 최적화 등 언어 문법 유연성을 높이고 성능을 개선하는 변화를 도입했습니다.
  • 2 `Ruby` 모듈 도입, `Object#inspect` 커스터마이징, `String` 스트리핑 메서드 확장 및 `Set` 클래스 C 재구현 등 핵심 클래스 및 모듈에 다양한 기능과 최적화가 적용되었습니다.
  • 3 `Ractor::Port`를 통한 양방향 통신, `Ractor.select` 개선, `Ractor#join` 및 `Ractor.shareable_proc` 도입 등으로 Ractor의 기능이 대폭 강화되어 병렬 처리의 실용성이 증대되었습니다.

도입

Ruby 4.0은 2025년 12월 25일 Ruby의 30주년을 기념하여 출시된 버전으로, 언어 자체의 변화에 중점을 둡니다. 본 문서는 CRuby 구현 업데이트(예: ZJIT)는 제외하고, 논리 연산자 줄바꿈 허용, `*nil` 처리 최적화 등 언어 문법의 유연성을 높이는 변화를 다룹니다. 또한, `Ruby` 최상위 모듈 도입과 `Object#inspect` 커스터마이징 등 핵심 클래스 및 모듈에도 여러 개선 사항이 적용되었습니다. 특히 Ractor의 성숙도 향상과 표준 라이브러리 재편은 이번 릴리스의 주요 특징입니다.

언어 변경사항

  • 논리 연산자 줄바꿈 허용: &&, ||, and, or 연산자가 주석이 있어도 다음 줄로 이어질 수 있게 되어 코드 가독성 및 버전 관리 용이성이 개선되었습니다. (Feature #20925)

  • *nil이 더 이상 nil.to_a를 호출하지 않음: 인수가 없는 경우 중간 배열 생성 없이 최적화 처리되어 성능이 향상되었습니다. (Feature #21047)

핵심 클래스 및 모듈

  • Ruby 최상위 모듈 도입: Ruby::Box 클래스와 현재 Ruby 버전을 설명하는 상수를 포함하는 코어 모듈이 되었습니다. (Feature #20884)

  • `Object

inspect 커스터마이징: instance_variables_to_inspect 재정의를 통해 inspect` 출력에 포함될 인스턴스 변수를 제어할 수 있게 되었습니다. (Feature #21219)

  • String 스트리핑 메서드 개선: strip, lstrip, rstrip 메서드가 제거할 문자를 인수로 받을 수 있게 되어 유연성이 증가했습니다. (Feature #21552)

  • Math.log1pMath.expm1 추가: 부동 소수점 정밀도 손실을 방지하는 원자적 로그 및 지수 함수가 도입되었습니다. (Feature #21527)

  • Range 개선:
    • #to_set이 무한 범위에 대해 오류를 발생시켜 무한 루프를 방지합니다. (Bug #21654)
    • #overlap?이 무한 범위에 대해 올바르게 동작하도록 수정되었습니다. (Bug #21185)
    • #max가 시작 없는 정수 범위에서 여러 값을 올바르게 반환합니다. (Bug #21174, #21175)
  • `Array

rfind 추가: 배열의 역방향 검색을 위한 rfind` 메서드가 도입되었습니다. (Feature #21678)

  • Set 클래스 C로 재구현: 내부적으로 Hash를 사용하던 기존 구현이 C로 재구현되어 효율성이 크게 향상되었으며, Set::SubclassCompatible 모듈로 하위 호환성을 제공합니다. (Feature #21216)
    • `Set

inspect 출력 형식 변경: Set[요소]` 형태로 변경되어 생성 구문에 가까워졌습니다. (Feature #21389)

  • `Proc

parameters 출력 조정: 암시적 it 매개변수가 [:opt, nil] 대신 [:opt]`로 보고되어 일관성이 개선되었습니다. (Bug #20974)

  • Enumerator.producesize: 인자 추가: 반복 횟수를 미리 지정할 수 있게 되었습니다. (Feature #21701)

  • Pathname 코어 클래스화: require "pathname" 없이 사용할 수 있게 되어 파일 시스템 객체 처리가 편리해졌습니다. (Feature #17473)

  • Ruby::Box 도입: 격리된 코드 로딩을 위한 실험적인 개념으로, 라이브러리 간의 의존성 충돌 해결 가능성을 제시합니다. (Feature #21311)

  • Binding 변경: 로컬 변수와 암시적 매개변수(_1, it)를 분리하여 `Binding

implicit_parameters` 등의 새 메서드가 도입되었습니다. (Bug #21049)

예외 처리 개선

  • <internal:> 프레임 백트레이스에서 제거: Ruby로 구현된 코어 메서드의 내부 호출 스택이 백트레이스에서 제외되어 오류 메시지가 간결해졌습니다. (Bug #20968)

  • ArgumentError 출력에 호출자 및 피호출자 코드 포함: ErrorHighlight 라이브러리를 통해 상세한 오류 위치를 제공합니다. (Feature #21543)

Ractor 개선

  • Ractor::Port 도입: 랙터 간 양방향 데이터 교환을 위한 직관적인 메커니즘을 제공하여 클라이언트-서버 모델 구현을 용이하게 합니다. (Feature #21262)

  • Ractor.select 의미 변경: 랙터 또는 포트 목록을 받아 메시지가 있는 포트 또는 종료된 랙터를 선택합니다.

  • 랙터 대기 메서드 변경: `Ractor

take 대신 Ractor

join (종료까지 대기) 및 Ractor

value (종료 및 반환 값 제공)가 도입되었습니다. 또한 Ractor

monitor, Ractor

unmonitor`와 같은 저수준 메서드가 추가되었습니다.

  • Ractor.shareable_procRactor.shareable_lambda 도입: 외부 스코프의 공유 불가능한 값을 참조하지 않는 Proc/Lambda를 생성하여 랙터 간 안전하게 전달할 수 있게 합니다. (Feature #21550, #21557)

표준 라이브러리 변경

  • cgi 라이브러리 제거: cgi/escape 라이브러리로 웹 관련 이스케이프 메서드만 남기고 제거되었습니다. (Feature #21258)

  • sorted_set 제거: rbtree 의존성과 Set의 오래된 구현 세부사항으로 인해 표준 라이브러리에서 제외되었습니다.

결론

Ruby 4.0은 언어의 유연성과 효율성을 높이는 다양한 개선 사항을 도입하며, 특히 `Ractor`의 성숙도를 크게 향상시켜 병렬 처리의 실용성을 높였습니다. `Ruby` 모듈 및 `Pathname`의 코어화는 개발 편의성을 증대시키고, `Set`의 C 재구현은 성능 최적화를 가져왔습니다. 또한, `Binding` 및 예외 처리의 개선은 디버깅과 메타 프로그래밍을 더욱 명확하게 합니다. 전반적으로 Ruby 4.0은 언어의 현대화와 성능 향상에 중점을 두었으며, 개발자들이 더욱 안정적이고 효율적인 애플리케이션을 구축할 수 있는 기반을 마련했습니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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