Skip to content

Commit 206659e

Browse files
riseshiayous
andauthored
Translate "Ruby 3.4.0 RC 1 Released" (ko) (#3438)
* cp 2024-12-12-ruby-3-4-0-rc1-released.md * Translate "Ruby 3.4.0 RC 1 Released" (ko) * Apply suggestions from code review Co-authored-by: Chayoung You <[email protected]> --------- Co-authored-by: Chayoung You <[email protected]>
1 parent bd6c300 commit 206659e

File tree

1 file changed

+193
-0
lines changed

1 file changed

+193
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.4.0 rc1 릴리스"
4+
author: "naruse"
5+
translator: "shia"
6+
date: 2024-12-12 00:00:00 +0000
7+
lang: ko
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.4.0-rc1" | first %}
11+
Ruby {{ release.version }} 릴리스를 알리게 되어 기쁩니다.
12+
13+
## Prism
14+
15+
parse.y에서 Prism으로 기본 파서를 변경했습니다. [[Feature #20564]]
16+
17+
## 모듈러 GC
18+
19+
* 다른 가비지 컬렉터(GC) 구현을 모듈러 가비지 컬렉터 기능을 통해 동적으로 로드할 수 있습니다.
20+
이 기능을 활성화하려면 Ruby 빌드 시에 `--with-modular-gc`를 설정하세요. GC 라이브러리는
21+
환경 변수 `RUBY_GC_LIBRARY`를 사용하여 런타임에 로드할 수 있습니다.
22+
[[Feature #20351]]
23+
24+
* Ruby의 내장 가비지 컬렉터는 `gc/default/default.c`에 분리되어 있으며,
25+
`gc/gc_impl.h`에 정의된 API를 사용하여 Ruby와 상호 작용합니다.
26+
내장 가비지 컬렉터는 `make modular-gc MODULAR_GC=default`를 사용하여
27+
라이브러리로서 빌드하고 환경 변수 `RUBY_GC_LIBRARY=default`
28+
사용하여 활성화할 수 있습니다. [[Feature #20470]]
29+
30+
* [MMTk](https://www.mmtk.io/)를 기반으로 한 실험적인 GC 라이브러리가 제공됩니다.
31+
이 GC 라이브러리는 `make modular-gc MODULAR_GC=mmtk`를 사용하여 빌드하고
32+
환경 변수 `RUBY_GC_LIBRARY=mmtk`를 사용하여 활성화할 수 있습니다.
33+
이는 빌드 머신에 Rust 툴체인이 필요합니다. [[Feature #20860]]
34+
35+
36+
## 언어 변경
37+
38+
* 파일에 `frozen_string_literal` 주석이 없을 때, 문자열 리터럴이 변경되면
39+
폐기 예정 경고를 출력합니다.
40+
이 경고는 `-W:deprecated``Warning[:deprecated] = true` 설정을 통해 활성화할 수 있습니다.
41+
이 변경을 무효화하고 싶다면 Ruby를 실행할 때 `--disable-frozen-string-literal` 커맨드 라인 인수를
42+
사용하세요. [[Feature #20205]]
43+
44+
* 블록 인자를 가리키는 `it`이 추가됩니다. [[Feature #18980]]
45+
46+
* 메서드 호출 시에 `nil`에 키워드 스플랫을 지원합니다.
47+
`**nil``**{}`와 비슷하게 동작하며, 키워드를 넘기지 않으며,
48+
어떤 변환 메서드도 호출하지 않습니다. [[Bug #20064]]
49+
50+
* 블록을 인덱스로 사용할 수 없게 됩니다. [[Bug #19918]]
51+
52+
* 키워드 인수를 인덱스로 사용할 수 없게 됩니다. [[Bug #20218]]
53+
54+
## YJIT
55+
56+
TL;DR:
57+
* x86-64와 arm64 플랫폼에서 대부분의 벤치마크에서 성능이 향상되었습니다.
58+
* YJIT 메타 데이터 컴파일의 메모리 사용량이 줄었습니다.
59+
* 여러 버그가 수정되었습니다. YJIT는 이제 더 견고하고 잘 테스트되었습니다.
60+
61+
새 기능:
62+
* `--yjit-mem-size` 커맨드 라인 옵션(기본값 128 MiB)을 통해
63+
YJIT의 통합 메모리 제한을 추가했습니다.
64+
이는 이전 `--yjit-exec-mem-size`보다 직관적이며, YJIT의 전체 메모리 사용량을 추적합니다.
65+
* 이제 `RubyVM::YJIT.runtime_stats`를 통해 항상 더 많은 통계가 사용 가능합니다.
66+
* `--yjit-log`를 통해 무엇이 컴파일되었는지 추적하는 컴파일 로그를 추가했습니다.
67+
* 런타임에서도 로그의 마지막 부분을 `RubyVM::YJIT.log`로 확인할 수 있습니다.
68+
* 멀티 Ractor 모드에서 공유 가능한 상수를 지원합니다.
69+
* `--yjit-track-exits=COUNTER`로 종료한 횟수를 추적할 수 있습니다.
70+
71+
새 최적화:
72+
* YJIT 메타 데이터를 저장하는 데 필요한 메모리를 줄이는 콘텍스트 압축.
73+
* 로컬 변수를 위한 레지스터를 할당할 수 있는 개선된 할당기.
74+
* YJIT을 사용할 때 Ruby로 작성된 더 많은 코어 프리미티브를 사용합니다.
75+
* 성능을 높이기 위해 Ruby로 다시 작성된 `Array#each`, `Array#select`, `Array#map` [[Feature #20182]].
76+
* 작고 사소한 메서드를 인라인으로 변환하는 능력.
77+
* 빈 메서드
78+
* 상수를 반환하는 메서드
79+
* `self`를 반환하는 메서드
80+
* 인수를 직접 반환하는 메서드
81+
* 더 많은 런타임 메서드에 대한 특별한 코드 생성
82+
* `String#getbyte`, `String#setbyte` 및 다른 문자열 메서드를 최적화
83+
* 저레벨 비트/바이트 조작을 빠르게 하기 위한 비트 연산 최적화
84+
* 다양한 다른 점진적 최적화
85+
86+
## 코어 클래스 변경
87+
88+
주의: 눈에 띄는 클래스 변경만을 포함합니다.
89+
90+
* Exception
91+
92+
* `Exception#set_backtrace`는 이제 `Thread::Backtrace::Location`의 배열을 입력으로 받을 수 있습니다.
93+
`Kernel#raise`, `Thread#raise``Fiber#raise`도 같은 형식의 입력을 받습니다. [[Feature #13557]]
94+
95+
* Range
96+
97+
* `Range#size`는 이제 범위가 순회 가능하지 않다면 `TypeError`를 던집니다. [[Misc #18984]]
98+
99+
100+
101+
## 호환성 문제
102+
103+
주의: 기능 버그 수정은 포함되어 있지 않습니다.
104+
105+
* 에러 메시지와 백트레이스의 출력 결과가 변경됩니다.
106+
* 여는 따옴표로 백틱 대신 작은따옴표를 사용합니다. [[Feature #16495]]
107+
* 메서드 이름 앞에 클래스 이름을 출력합니다(클래스가 불변하는 이름을 가지고 있는 경우만). [[Feature #19117]]
108+
* `Kernel#caller`, `Thread::Backtrace::Location`의 메서드 등도 마찬가지로 변경됩니다.
109+
110+
```
111+
Old:
112+
test.rb:1:in `foo': undefined method `time' for an instance of Integer
113+
from test.rb:2:in `<main>'
114+
115+
New:
116+
test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer
117+
from test.rb:2:in '<main>'
118+
```
119+
120+
## C API 변경
121+
122+
* `rb_newobj``rb_newobj_of`(그리고 대응하는 매크로인 `RB_NEWOBJ`, `RB_NEWOBJ_OF`, `NEWOBJ`, `NEWOBJ_OF`)가 삭제됩니다. [[Feature #20265]]
123+
* 폐기 예정인 `rb_gc_force_recycle` 함수가 삭제됩니다. [[Feature #18290]]
124+
125+
## 그 이외의 변경
126+
127+
* 상세 모드(`-w`)에서 메서드에 넘긴 블록이 사용되지 않았을 때
128+
경고를 출력합니다.
129+
[[Feature #15554]]
130+
131+
* `String.freeze``Integer#+`처럼 인터프리터와 JIT이 특별히 최적화하는
132+
몇몇 코어 메서드를 재정의하면 성능 클래스
133+
경고(`-W:performance``Warning[:performance] = true`)를 출력합니다.
134+
[[Feature #20429]]
135+
136+
기본 gem 또는 내장 gem에 대한 자세한 내용은 [Logger](https://github.com/ruby/logger/releases)와 같은
137+
GitHub 릴리스 또는 변경 로그에서 확인하세요.
138+
139+
더 자세한 내용은 [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)나
140+
[커밋 로그](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }})를
141+
확인해 주세요.
142+
143+
이러한 변경사항에 따라, Ruby 3.3.0 이후로 [파일 {{ release.stats.files_changed }}개 수정, {{ release.stats.insertions }}줄 추가(+), {{ release.stats.deletions }}줄 삭제(-)](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}#file_bucket)가
144+
이루어졌습니다!
145+
146+
147+
## 다운로드
148+
149+
* <{{ release.url.gz }}>
150+
151+
SIZE: {{ release.size.gz }}
152+
SHA1: {{ release.sha1.gz }}
153+
SHA256: {{ release.sha256.gz }}
154+
SHA512: {{ release.sha512.gz }}
155+
156+
* <{{ release.url.xz }}>
157+
158+
SIZE: {{ release.size.xz }}
159+
SHA1: {{ release.sha1.xz }}
160+
SHA256: {{ release.sha256.xz }}
161+
SHA512: {{ release.sha512.xz }}
162+
163+
* <{{ release.url.zip }}>
164+
165+
SIZE: {{ release.size.zip }}
166+
SHA1: {{ release.sha1.zip }}
167+
SHA256: {{ release.sha256.zip }}
168+
SHA512: {{ release.sha512.zip }}
169+
170+
## Ruby는
171+
172+
Ruby는 1993년에 Matz(마츠모토 유키히로) 씨가 처음 개발했고,
173+
현재는 오픈 소스로서 개발되고 있습니다. 여러 플랫폼에서 동작하며,
174+
특히 웹 개발에서 전 세계적으로 이용되고 있습니다.
175+
176+
[Feature #13557]: https://bugs.ruby-lang.org/issues/13557
177+
[Feature #15554]: https://bugs.ruby-lang.org/issues/15554
178+
[Feature #16495]: https://bugs.ruby-lang.org/issues/16495
179+
[Feature #18290]: https://bugs.ruby-lang.org/issues/18290
180+
[Feature #18980]: https://bugs.ruby-lang.org/issues/18980
181+
[Misc #18984]: https://bugs.ruby-lang.org/issues/18984
182+
[Feature #19117]: https://bugs.ruby-lang.org/issues/19117
183+
[Bug #19918]: https://bugs.ruby-lang.org/issues/19918
184+
[Bug #20064]: https://bugs.ruby-lang.org/issues/20064
185+
[Feature #20182]: https://bugs.ruby-lang.org/issues/20182
186+
[Feature #20205]: https://bugs.ruby-lang.org/issues/20205
187+
[Bug #20218]: https://bugs.ruby-lang.org/issues/20218
188+
[Feature #20265]: https://bugs.ruby-lang.org/issues/20265
189+
[Feature #20351]: https://bugs.ruby-lang.org/issues/20351
190+
[Feature #20429]: https://bugs.ruby-lang.org/issues/20429
191+
[Feature #20470]: https://bugs.ruby-lang.org/issues/20470
192+
[Feature #20564]: https://bugs.ruby-lang.org/issues/20564
193+
[Feature #20860]: https://bugs.ruby-lang.org/issues/20860

0 commit comments

Comments
 (0)