Documentation for a newer release is available. View Latest

루비

루비 2.6

루비 2.5는 루비의 최신 안정 버전입니다. 많은 새로운 기능과 개선(향상)은 루비에 대한 점점 더 다양하고 확장되는 요구 사항을 위해 포함되어 있습니다. 페도라 26의 루비 2.4에서 페도라 28의 루비 2.5로의 주요 최신화를 통해, 페도라는 우수한 루비 개발 기술환경이 되었습니다.

주목 할만한 신규 변경은 다음을 포함합니다:

  • 즉시(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 추가. 이와 같은 방법은 바인딩의 원천 위치, FILE 및 `LINE`의 2-요소배열을 반환합니다.

    • `:exception`옵션을 추가하고 `Kernel.#system`이 거짓을 반환하는 대신 오류가 발생하도록 합니다.

    • rescue 없는 `else`는 이제 문법 오류를 발생합니다. [실험적인]

    • 상수 이름은 비-아스키 대문자와 함께 시작합니다.

    • 무한 범위 '(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으로 병합합니다.

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