루비

루비 2.6

루비 2.6은 Ruby의 최신 안정 버전입니다. 수많은 기능과 개선은 루비를 위한 점점 다양해지고 늘어난 수요를 위해 포함됩니다. 페도라 29에 루비 2.5에서 페도라 30에 루비 2.6까지 주요 최신화를 통해 페도라는 최상의 루비 개발 기반이 되었습니다.

주목 할 만한 다음 변경이 포함합니다:

  • 즉시(JIT) 컴파일러의 초기 구현을 사용 할 수 있습니다. JIT 컴파일러는 모든 Ruby 프로그램 실행의 성능을 향상 시키는 것을 목표로 합니다. 다른 언어를 위한 일반 JIT 컴파일러와 달리, 루비의 JIT 컴파일러는 C 코드를 디스크에 출력하고 네이티브 코드(native code)를 발생하는데 공통 C 컴파일러 처리를 생성하는 독특한 방식으로 JIT 컴파일을 실행합니다.

    이와 같은 JIT 출시의 주요 목적은 2.6 출시 전에 해당 기술환경에서 작동하는지 확인하고 보안 위험을 찾을 수 있도록 점검 할 수 있는 기회를 제공합니다. JIT 컴파일러는 루비가 런타임에서 사용 할 수 있도록 필요한 GCC, Clang 또는 마이크로소프트 VC++로 제작 될 때 지원됩니다. 그렇지 않으면 지금은 사용 할 수 없습니다.

    루비 2.6.0 미리보기3에서, Optcarrot이라 불리는 CPU-집약적인 벤치마크 부하시험에서 루비 2.5보다 1.7배 빠른 성능을 달성했습니다. Rails 응용프로그램과 같은 메모리-집약적 부하시험에 대한 성능도 향상될 것입니다.

  • 새로운 `RubyVM::AST`실험 모듈은 이제 사용 할 수 있습니다. 이 모듈은 제공된 문자열 루비코드를 구문 분석하는 '구문분석' 방법과 AST(요약된 문법 구조) 노드를 반환, 그리고 제공된 루비 코드 파일을 구문 분석하는 '구문분석_파일' 방법과 AST 노드 반환을 가지고 있습니다. `RubyVM::AST::Node`클래스 또한 소개되었습니다. 노드 객체에서 위치 정보와 하위 노드를 가져 올 수 있습니다. 이와 같은 기능은 실험적입니다. AST 노드의 구조 호환성은 보장하지 않습니다.

  • 새로운 기능:

    • 새로운 별명 `then`을 `Kernel#yield_self`으로 추가합니다.

    • `Random.bytes`을 추가합니다.

    • Binding#source_location`을 추가합니다. 이 방법은 a 2-element array of `FILE and `LINE`와 같은 바인딩 원천 위치를 반환합니다.

    • 잘못을 반환하는 대신에 추가 :exception option to let `Kernel.#system`발생된 오류를 나타냅니다.

    • 현재`rescue`가 없는`else`로 인하여 구문 오류가 발생합니다.[EXPERIMENTAL]

    • 상수 이름은 비-ASCII가 대문자로 시작 할 수도 있습니다.

    • 무한 범위 `(1 ..)`가 도입되었습니다. 끝이 없는 것처럼 동작합니다.

다음 성능 개선은 다음과 같이 만들어졌습니다:

  • 더 이상`$ SAFE`에 대해 신경 쓸 필요가 없기 때문에`Proc # call` 가속하였습니다. lc_fizzbuzz 기준 40 % 속도 향상을 나타냅니다.

  • 블럭은 블럭 매개변수가 전달되는 'block.call' 속도를 높였습니다. 루비 2.6은 전달된 블록 호출의 성능을 개선합니다. 마이크로-성능측정으로 2.6배 향상을 확인 할 수 있습니다.

  • 트랜지언트 힙(theap)이 도입되었습니다. 'theap’은 특정 클래스에 의해 지시되는 짧은-수명의 메모리 객체를 위해 관리되는 힙입니다. 예를 들면, 작고 짧은-수명의 해쉬 객체를 만드는 것은 두 배정도 빠릅니다. rdoc 시험측정을 통해, 6-7%의 성능 향상을 확인 할 수 있습니다.

버전 2.5 이후의 다른 주목 할만한 변경:

  • `$SAFE`는 프로세서 전역 상태이고 다시 0으로 설정 할 수 있습니다.

  • safe_level`을 `ERB.new`로 전달하는 것은 더 이상 사용되지 않습니다. `trim_modeeoutvar 인수는 이제 키워드 인수입니다.

  • 병합된 RubyGems 3.0.0.beta2.

  • Bundler를 기본 gem으로 병합합니다.

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