루비(Ruby)

루비 2.7

페도라 32는 루비 2.7 버전을 제공합니다. 루비 2.6에서 이와 같은 주요 최신화된 페도라는 최고의 루비 개발 기반이 됩니다.

루비 2.6 이후의 다음 변경들:

루비 2.7은 여러 새로운 기능과 성능 개선을 이뤘습니다.

성능 개선

  • JIT [실험]

  • 광의 캐쉬 전략이 변경되었고 광 생성은 속도가 빨라집니다.

  • Module#name, true.to_s, false.to_s, 와 `nil.to_s`는 현재 항상 고정된 문자열을 반환합니다. 반환된 문자열은 항상 주어진 대상과 동일합니다. [실험]

  • `Monitor`와 `MonitorMixin`의 성능이 향상되었습니다.

  • `CGI.escapeHTML`의 성능이 향상되었습니다.

  • 1.9 즈음에 있었던 '호출-사이트' 방식 캐쉬가 개선되었습니다: 캐쉬 적중률이 89%에서 94%로 증가되었습니다.

  • RubyVM::InstructionSequence#to_binary 방식은 컴파일된 이진수를 생성합니다. 이진수 크기가 작아졌습니다.

다른 주목 할만한 변경

  • 몇몇 표준 라이브러리가 최신화 되었습니다.

    • Bundler 2.1.2

    • RubyGems 3.1.2

    • Racc 1.4.15

    • CSV 3.1.2

    • REXML 3.2.3

    • RSS 0.2.8

    • StringScanner 1.0.3

    • 원본 버전을 가지고 있지 않은 몇몇 다른 라이브러리 또한 최신화 되었습니다.

  • 다음 라이브러리는 더 이상 번들 gems가 아닙니다. 이들 기능을 사용하려면 일치하는 gems를 설치합니다.

    • CMath (cmath gem)

    • Scanf (scanf gem)

    • Shell (shell gem)

    • Synchronizer (sync gem)

    • ThreadsWait (thwait gem)

    • E2MM (e2mmap gem)

  • `profile.rb`는 표준 라이브러리에서 제거되었습니다.

  • `stdlib`를 기본값 gems으로 조장합니다

    • 다음 기본값 gems은 rubygems.org에서 발표되었습니다

      • 시험평가

      • cgi

      • delegate

      • getoptlong

      • net-pop

      • net-smtp

      • open3

      • pstore

      • singleton

    • 다음 기본값 gem은 루비-코어에서만 조장되지만 rubygems.org에서는 아직 게시되지 않았습니다.

      • monitor

      • observer

      • 제한 시간

      • tracer

      • uri

      • yaml

  • 블럭으로 호출되는 방법에서 블럭이 아닌 Proc.new 과 `proc`는 이제 경고됩니다.

  • 블럭으로 호출되는 방법에서 블럭이 아닌 lambda는 예외를 발생시킵니다.

  • 유니코드 버전과 이모지 버전을 11.0.0에서 12.0.0으로 최신화합니다.

  • U+32FF SQUARE ERA NAME REIWA를 위한 지원을 추가하여 유니코드 버전을 12.1.0으로 최신화합니다.

  • Date.jisx0301, Date#jisx0301, 그리고 `Date.parse`는 새로운 일본 연호를 지원합니다.

  • 컴파일러는 C99 지원이 필요합니다.

상세한 변경

유형 분석 [실험적인]

함수 프로그래밍 언어에서 폭넓게 사용되는 기능인 유형 검색은 실험적인 기능으로 소개되었습니다. 이는 제공된 객체를 순회하고 유형과 일치하는 경우 값을 할당 할 수 있습니다.

"json"이 필요합니다

json = <<END
{
  "name": "Alice",
  "age": 30,
  "children": [{ "name": "Bob", "age": 2 }]
}
END

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age #=> 2
end

REPL 개선

묶음으로 제공되는 대화형 환경(REPL; Read-Eval-Print-Loop)인 irb`는 이제 여러-줄 편집을 지원합니다. 순수한 루비로 구현된 `readline -호환-라이브러리인 `reline`에 의해 구동됩니다. 이는 또한 rdoc 통합을 제공합니다. `irb`에서 당신은 제공된 클래스, 모듈 또는 방법을 위한 참조를 표시 할 수 있습니다.

압축 GC

이와 같은 출시에는 조각난 메모리 공간을 다시 조합 할 수 있는 압축 GC를 소개합니다.

몇 가지 다중-쓰레드된 루비 프로그램은 메모리 조각을 발생 시킬 수 있으며, 메모리 사용량을 증가시키고 속도를 감소시킬 수 있습니다.

GC.compact 방법은 힙을 압축하기 위해 도입되었습니다. 이와 같은 기능은 더 적은 수의 페이지를 사용 될 수 있도록 힙에서 라이브 객체를 압축하고, 그리고 힙은 CoW(기록 중 복사)에 더 친숙 할 수 있습니다.

위치와 키워드 인수의 분리

키워드 인수와 위치 인수의 자동 전환은 더 이상 사용되지 않으며, 전환은 루비 3에서 제거 될 것입니다.

변경
  • When a method call passes a Hash at the last argument, and when it passes no keywords, and when the called method accepts keywords, a warning is emitted. To continue treating the hash as keywords, add a double splat operator to avoid the warning and ensure correct behavior in Ruby 3.

        def foo(key: 42); end; foo({key: 42})   # warned
        def foo(**kw);    end; foo({key: 42})   # warned
        def foo(key: 42); end; foo(**{key: 42}) # OK
        def foo(**kw);    end; foo(**{key: 42}) # OK
  • When a method call passes keywords to a method that accepts keywords, but it does not pass enough required positional arguments, the keywords are treated as a final required positional argument, and a warning is emitted. Pass the argument as a hash instead of keywords to avoid the warning and ensure correct behavior in Ruby 3.

        def foo(h, **kw); end; foo(key: 42)      # warned
        def foo(h, key: 42); end; foo(key: 42)   # warned
        def foo(h, **kw); end; foo({key: 42})    # OK
        def foo(h, key: 42); end; foo({key: 42}) # OK
  • When a method accepts specific keywords but not a keyword splat, and a hash or keywords splat is passed to the method that includes both Symbol and non-Symbol keys, the hash will continue to be split, and a warning will be emitted. You will need to update the calling code to pass separate hashes to ensure correct behavior in Ruby 3.

        def foo(h={}, key: 42); end; foo("key" => 43, key: 42)   # warned
        def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned
        def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
  • If a method does not accept keywords, and is called with keywords, the keywords are still treated as a positional hash, with no warning. This behavior will continue to work in Ruby 3.

        def foo(opt={});  end; foo( key: 42 )   # OK
  • Non-symbols are allowed as keyword argument keys if the method accepts arbitrary keywords.

        def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
  • **nil is allowed in method definitions to explicitly mark that the method accepts no keywords. Calling such a method with keywords will result in an ArgumentError.

        def foo(h, **nil); end; foo(key: 1)       # ArgumentError
        def foo(h, **nil); end; foo(**{key: 1})   # ArgumentError
        def foo(h, **nil); end; foo("str" => 1)   # ArgumentError
        def foo(h, **nil); end; foo({key: 1})     # OK
        def foo(h, **nil); end; foo({"str" => 1}) # OK
  • Passing an empty keyword splat to a method that does not accept keywords no longer passes an empty hash, unless the empty hash is necessary for a required parameter, in which case a warning will be emitted. Remove the double splat to continue passing a positional hash.

        h = {}; def foo(*a) a end; foo(**h) # []
        h = {}; def foo(a) a end; foo(**h)  # {} and warning
        h = {}; def foo(*a) a end; foo(h)   # [{}]
        h = {}; def foo(a) a end; foo(h)    # {}

If you want to disable the deprecation warnings, please use a command-line argument -W:no-deprecated or add Warning[:deprecated] = false to your code.

이와 같은 출시에 대한 더 상세한 정보를 위해 업스트림 출시 공표를 참고하세요.

Jekyll 4.0

Jekyll 정적 부분 발생기와 이 플러그인은 버전 4.0.0으로 최신화되었습니다. 이 버전은 버전 3.8과 비교되는 다음 변경을 포함합니다:

  • 상당한 성능 향상

  • 정리와 결점 수정

  • 이전 출시로 호환되지 않는 기타 사소한 변경

Jekyll 4.0.0에 대한 더 많은 정보를 위해, Jekyll 4.0.0 출시됨을 참고하세요.