루비 2.5.0 릴리스

루비 2.5.0의 릴리스를 알리게 되어 기쁩니다.

루비 2.5.0은 루비 2.5의 첫 번째 릴리스입니다. 이는 다음과 같은 여러 새 기능과 기능 향상을 포함합니다.

새 기능

  • rescue/else/ensure가 do/end 블록 내부에서도 직접 사용할 수 있게 됩니다. [Feature #12906]
  • yield_self가 추가되었습니다. 해당 컨텍스트에 주어진 블록을 넘깁니다. tab과는 다르게, 블록의 실행 결과를 반환합니다. [Feature #6721]
  • 분기 커버리지와 메소드 커버리지 측정을 지원합니다. 분기 커버리지는 분기가 실행되었는지 아닌지를 나타냅니다. 또한 메소드 커버리지는 메소드가 호출되었는지 아닌지 측정합니다. 이 기능들을 이용하여 테스트 스위트를 실행하여 어떤 분기, 메소드가 실행되었는지를 알 수 있게 되므로, 테스트 스위트의 커버리지를 좀 더 엄밀하게 평가할 수 있습니다. [Feature #13901]
  • Hash#slice [Feature #8499]와 Hash#transform_keys [Feature #13583]가 추가됩니다.
  • Struct.new로 키워드 인수를 받는 클래스를 생성할 수 있습니다. [Feature #11925]
  • Enumerable#any?, all?, none?, one?이 패턴 인수를 받게 됩니다. [Feature #11286]
  • 최상위 상수 탐색을 더 이상 지원하지 않습니다. [Feature #11547]
  • 많은 사랑을 받고 있는 라이브러리중 하나인 pp.rb가 이제 자동으로 로딩됩니다. 이제 더 이상 require "pp"를 쓸 필요가 없습니다. [Feature #14123]
  • 백트레이스와 에러 메시지가 역순(오래된 호출이 위, 최신의 호출이 아래)으로 표시됩니다. 이에 따라, 긴 백트레이스가 터미널(TTY)에 표시되는 경우, 에러를 야기한 라인의 정보가 마지막에 표시되므로 발견하기 쉬워집니다. 또한, 이 역순 표시는 터미널에 직접 출력되는 경우에만 적용됩니다. [Feature #8661] [experimental]

성능 개선

  • 전체 바이트 코드(instruction sequences)에서 trace 명령이 제거되어 성능이 5-10% 향상됩니다. trace 명령은 TracePoint를 지원하기 위해서 삽입되었습니다만, 대부분의 경우, TracePoint는 사용되지 않기 때문에 쓸모 없는 오버헤드였습니다. 이 대신 동적으로 갱신하는 방식을 사용하게 됩니다. 자세한 설명은 [Feature #14104]를 확인하세요.
  • 블록 매개변수에 의한 블록 패스(예: def foo(&b); bar(&b); end)가 ‘지연 Proc 할당’을 통해 루비 2.4보다 약 3배 빨라집니다. [Feature #14045]
  • Mutex가 작고 빠르게 재작성되었습니다. [Feature #13517]
  • ERB는 루비 2.4와 비교하여 2배 빠른 속도로 템플릿으로부터 코드를 생성합니다.
  • Array#concat, Enumerable#sort_by, String#concat, String#index, Time#+ 등의 내장 메소드의 속도가 향상되었습니다.
  • IO.copy_stream이 복사 오프로드를 위해서 copy_file_range(2)를 사용합니다. [Feature #13867]

2.4 이후로 눈에 띄는 변경점

  • SecureRandom은 이제 OpenSSL보다 OS가 제공하는 난수 소스를 우선합니다. [Bug #9569]
  • cmath, csv, date, dbm, etc, fcntl, fiddle, fileutils, gdbm, ipaddr, scanf, sdbm, stringio, strscan, webrick, zlib이 표준 라이브러리에서 기본 gem으로 변경됩니다.
  • Onigmo가 6.1.3으로 갱신되었습니다.
  • Psych가 3.0.2로 갱신되었습니다.
  • RubyGems가 2.7.3으로 갱신되었습니다.
  • RDoc이 6.0.1으로 갱신되었습니다.
  • 유니코드 지원 버전이 10.0.0으로 갱신되었습니다.
  • Thread.report_on_exception의 기본값이 true로 변경됩니다. 이 변경은 멀티 스레드 프로그램을 디버깅하기 쉽도록 해줍니다. [Feature #14143]
  • IO#write가 여러 인수를 받을 수 있게 됩니다. [Feature #9323]

NEWS커밋 로그에서 더 자세한 설명을 확인할 수 있습니다.

이러한 변경 사항에 따라, 루비 2.4.0 이후로 파일 6158개 수정, 348484줄 추가(+), 82747줄 삭제(-)가 이루어졌습니다!

메리 크리스마스, 행복한 휴일 보내시고, 루비 2.5와 함께 즐거운 프로그래밍 하세요!

다운로드

  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz

    SIZE:   15834941 bytes
    SHA1:   58f77301c891c1c4a08f301861c26b1ea46509f6
    SHA256: 46e6f3630f1888eb653b15fa811d77b5b1df6fd7a3af436b343cfe4f4503f2ab
    SHA512: 0712fe68611f5d0cd6dd54b814f825478e64b6a62bdf67bce431f4dca2dc00b1a33f77bebfbcd0a151118a1152554ab457decde435b424aa1f004bc0aa40580d
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.zip

    SIZE:   19495617 bytes
    SHA1:   700b6f55d689a5c8051c8c292b9e77a1b50bf96e
    SHA256: 94559ea6e3c619423da604e503ce1dc1c465d6e0747a07fbdc5f294acaf14c24
    SHA512: e4324064cee8c65b80192e3eff287e915d2d40464d300744c36fb326ae4b1846911400a99d4332192d8a217009d3a5209b43eb5e8bc0b739035bef89cc493e84
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.bz2

    SIZE:   13955820 bytes
    SHA1:   827b9a3bcffa86d1fc9ed96d403cb9dc37731688
    SHA256: d87eb3021f71d4f62e5a5329628ac9a6665902173296e551667edd94362325cc
    SHA512: 8f6fdf6708e7470f55bc009db2567cd8d4e633ad0678d83a015441ecf5b5d88bd7da8fb8533a42157ff83b74d00b6dc617d39bbb17fc2c6c12287a1d8eaa0f2c
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.xz

    SIZE:   11292472 bytes
    SHA1:   9c7babcf9e299be3f197d9091024ae458f1a1273
    SHA256: 1da0afed833a0dab94075221a615c14487b05d0c407f991c8080d576d985b49b
    SHA512: 55714a33d7661fe8b432f73c34fd67b49699f8b79df1cbd680a74899124d31111ab0f444677672aac1ba725820182940d485efb2db0bf2bc96737c5d40c54578