GN⁺: 루비 3.4.0 출시
(ruby-lang.org)-
예년과 마찬가지로 12/25에 Ruby 3.4.0이 출시됨
-
주요 업데이트로는
it
블록 매개변수 참조 추가, Prism을 기본 파서로 변경, 소켓 라이브러리에 Happy Eyeballs Version 2 지원 추가, YJIT 개선, 모듈식 GC 추가 등이 있음. -
it
블록 매개변수 참조- 변수 이름 없이 블록 매개변수를 참조할 수 있는
it
도입됨. 이는_1
과 유사하게 작동하며, 간단한 블록에서 사용하기 편리함.
- 변수 이름 없이 블록 매개변수를 참조할 수 있는
-
Prism 기본 파서로 변경
- 기본 파서가
parse.y
에서 Prism으로 변경됨. 사용자에게는 큰 변화가 없을 것이며, 호환성 문제가 발생하면 보고 요청.
- 기본 파서가
-
소켓 라이브러리의 Happy Eyeballs Version 2
- 소켓 라이브러리에 Happy Eyeballs Version 2 (RFC 8305) 지원 추가됨. 이는 현대 인터넷 환경에 적합한 효율적이고 신뢰할 수 있는 네트워크 연결을 제공함.
-
YJIT 개선
- 대부분의 벤치마크에서 성능 향상, 메모리 사용량 감소, 다양한 버그 수정 및 새로운 기능 추가됨.
-
모듈식 GC
- 대체 가비지 컬렉터(GC) 구현을 동적으로 로드할 수 있는 모듈식 GC 기능 추가됨. Rust 툴체인이 필요함.
-
언어 변경 사항
-
frozen_string_literal
주석 없는 파일의 문자열 리터럴이 변경될 때 경고 발생.**nil
키워드 스플래팅 지원 등 다양한 변경 사항 포함.
-
-
코어 클래스 업데이트
-
Exception#set_backtrace
가Thread::Backtrace::Location
배열을 허용하는 등 여러 코어 클래스 업데이트 포함.
-
-
표준 라이브러리 업데이트
- RubyGems, Bundler, JSON, Tempfile 등 여러 표준 라이브러리의 성능 개선 및 기능 추가.
-
호환성 문제
- 오류 메시지 및 백트레이스 표시 방식 변경,
Hash#inspect
렌더링 방식 변경 등 호환성 관련 변경 사항 포함.
- 오류 메시지 및 백트레이스 표시 방식 변경,
-
C API 업데이트
-
rb_newobj
및rb_newobj_of
함수 제거 등 C API 관련 업데이트 포함.
-
-
기타 변경 사항
- 사용되지 않는 블록을 메서드에 전달할 때 경고 발생 등 다양한 변경 사항 포함.
Hacker News 의견
-
Ruby 파서 변경에 대한 기대감이 큼. 이전에 yacc를 사용하라고 배웠지만, Ruby는 수작업으로 작성된 파서를 사용하는 언어 목록에 합류함.
- 16k 라인의 parse.y를 22k 라인의 prism.c로 대체하는 것은 대담한 움직임임.
-
Ruby 3.4.1 버전이 이미 구식임.
-
최근 몇 년간 Ruby의 성능이 특히 향상되었음. 3.3 버전 이후로 --yjit 옵션을 사용하여 모든 앱을 실행하고 있으며, 큰 차이를 보임.
-
Shopify의 전략은 YJIT의 이야기와 같음. 서비스 리팩토링이 불가능하다면 Ruby를 리팩토링하겠다는 의지임.
-
JIT와 GC 수준에서의 성능 개선이 반가운 추가 사항임.
-
매년 크리스마스 전통처럼 Ruby 릴리스를 기대함.
-
매년 말 Rails 앱을 업데이트하며, 최근에는 안정적이고 성능이 개선되어 업데이트가 쉬워졌음.
-
Ruby 팀에게 축하와 감사의 인사를 전함.
-
Rails 8 소식 이후 Ruby를 시도하고 싶었으나, 설치 과정이 너무 어려워 포기함.
- Mac과 Windows에서 Ruby 3.3 버전을 설치하는 것이 큰 도전이었음.
- Docker에서도 버전 조정이 필요했고, devContainers에서도 문제가 있었음.
- 설치 후 VSCode와 다른 에디터에서 Rails의 html.erb 파일의 구문 강조가 완전히 깨져 있었음.
- 온라인에서 해결책을 찾으려 했으나 실패하여 결국 포기함.
- Mac, Windows, Linux 모두 시도했으나 실패했으며, 누군가 이 문제를 해결할 수 있다면 크리스마스 선물이 될 것임.