Skip to content

Commit 435cf5d

Browse files
riseshiayous
andauthored
Translate 'ruby-3-0-0-preview1-released' (ko) (#2502)
* cp {en,ko}/news/_posts/2020-09-25-ruby-3-0-0-preview1-released.md * Translate 'ruby-3-0-0-preview1-released' (ko) * Apply suggestions from code review Co-authored-by: Chayoung You <yousbe@gmail.com> * Apply suggestions from code review Co-authored-by: Chayoung You <yousbe@gmail.com> * Translate comments * Better translation * Translate more comment * Update ko/news/_posts/2020-09-25-ruby-3-0-0-preview1-released.md Co-authored-by: Chayoung You <yousbe@gmail.com> * better translation Co-authored-by: Chayoung You <yousbe@gmail.com>
1 parent 4bc6b95 commit 435cf5d

File tree

1 file changed

+242
-0
lines changed

1 file changed

+242
-0
lines changed
Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
---
2+
layout: news_post
3+
title: "루비 3.0.0 Preview 1 릴리스"
4+
author: "naruse"
5+
translator: "shia"
6+
date: 2020-09-25 00:00:00 +0000
7+
lang: ko
8+
---
9+
10+
루비 3.0.0-preview1 릴리스를 알리게 되어 기쁩니다.
11+
12+
이는 많은 새 기능과 성능 향상을 포함하고 있습니다.
13+
14+
## RBS
15+
16+
RBS는 루비 프로그램의 타입을 기술하기 위한 언어입니다.
17+
RBS를 지원하기 위한 타입 프로파일러와 다른 도구들을 포함하는 타입 검사기는 RBS 정의를 통해 루비 프로그램을 더 잘 이해합니다.
18+
19+
클래스나 모듈에 정의된 메서드, 인스턴스 변수와 타입, 상속이나 믹스인 관계에 대한 정의를 작성할 수 있습니다.
20+
RBS의 목표는 루비 프로그램에서 흔히 보이는 패턴을 지원하는 것과 유니언 타입, 메서드 오버로딩, 제네릭을 포함하는 고급 타입을 지원하는 것입니다. 또한 _인터페이스 타입_을 이용해 덕타이핑을 지원합니다.
21+
22+
루비 3.0은 RBS로 작성된 타입 정의를 해석하고 처리하는 `rbs` 젬을 포함합니다.
23+
24+
다음은 RBS의 작은 예시입니다.
25+
26+
{% highlight rbs %}
27+
module ChatApp
28+
VERSION: String
29+
30+
class Channel
31+
attr_reader name: String
32+
attr_reader messages: Array[Message]
33+
attr_reader users: Array[User | Bot] # `|`는 유니언 타입을 의미합니다. 여기에서는 `User` 또는 `Bot`이라는 의미입니다.
34+
35+
def initialize: (String) -> void
36+
37+
def post: (String, from: User | Bot) -> Message # 메서드 오버로딩이 지원됩니다.
38+
| (File, from: User | Bot) -> Message
39+
end
40+
end
41+
{% endhighlight %}
42+
43+
더 자세한 내용은 [rbs 젬의 README](https://github.com/ruby/rbs)를 확인하세요.
44+
45+
## Ractor (실험적)
46+
47+
Ractor는 스레드 안전에 대한 걱정이 없는 병렬 실행을 제공하기 위해 설계된 액터 모델과 비슷한 동시 실행 추상화 모델입니다.
48+
49+
여러 개의 ractor를 만들고 병렬로 실행할 수 있습니다. Ractor는 일반 객체를 공유할 수 없기 때문에 스레드 안전한 병렬 프로그램을 만들 수 있습니다.
50+
ractor 간의 통신은 메시지 넘기기를 통해서 지원됩니다.
51+
52+
객체 공유를 제한하기 위해, Ractor는 루비 문법에 여러 제한을 추가했습니다(여러 개의 ractor를 사용하지 않는다면 차이는 없습니다).
53+
54+
명세와 구현은 아직 완성되지 않았으므로 앞으로 변경될 수 있습니다. 그러므로 이 기능은 실험적으로 제공되며 Ractor가 생성되면 실험적 기능을 사용하고 있다는 경고를 표시합니다.
55+
56+
다음은 `prime?`을 2개의 ractor를 통해 계산하는 프로그램입니다. 이는 2개 이상의 코어를 사용하는 경우, 순차적으로 실행하는 프로그램보다 약 2배 빠릅니다.
57+
58+
{% highlight ruby %}
59+
require 'prime'
60+
61+
# r1, r2에 보낸 정수들로 'n.prime?'을 병렬 실행
62+
r1, r2 = *(1..2).map do
63+
Ractor.new do
64+
n = Ractor.recv
65+
n.prime?
66+
end
67+
end
68+
69+
# 매개 변수를 송신
70+
r1.send 2**61 - 1
71+
r2.send 2**61 + 15
72+
73+
# r1, r2의 실행 결과 대기
74+
p r1.take #=> true
75+
p r2.take #=> true
76+
{% endhighlight %}
77+
78+
더 자세한 내용은 [doc/ractor.md](https://github.com/ruby/ruby/blob/master/doc/ractor.md)를 확인하세요.
79+
80+
## 스케줄러 (실험적)
81+
82+
블로킹 명령에 끼어들 수 있는 `Thread#scheduler`가 도입됩니다.
83+
이는 기존에 존재하는 코드를 변경하지 않고 가벼운 동시성을 지원할 수 있게 합니다.
84+
85+
현재 지원되는 클래스와 메서드는 다음과 같습니다.
86+
87+
- `Mutex#lock`, `Mutex#unlock`, `Mutex#sleep`
88+
- `ConditionVariable#wait`
89+
- `Queue#pop`, `SizedQueue#push`
90+
- `Thread#join`
91+
- `Kernel#sleep`
92+
- `IO#wait`, `IO#read`, `IO#write`와 관련 메서드(예: `#wait_readable`, `#gets`, `#puts` 등).
93+
- `IO#select`*지원되지 않습니다*.
94+
95+
현재 동시성을 위한 기점은 `Fiber.schedule{...}`입니다만, 이는 루비 3의 릴리스 때 변경될 가능성이 있습니다.
96+
97+
현재 [`Async::Scheduler`](https://github.com/socketry/async/pull/56)의 테스트 스케줄러가 이용 가능합니다.
98+
자세한 내용은 [`doc/scheduler.md`](https://github.com/ruby/ruby/blob/master/doc/scheduler.md)를 확인하세요. [Feature #16786]
99+
100+
**주의**: 이 기능은 매우 실험적입니다. 이름과 기능 모두 다음 프리뷰 릴리스에서 변경될 수 있습니다.
101+
102+
## 그 이외의 주목할 만한 기능
103+
104+
* 오른쪽으로 값을 할당하는 명령이 추가됩니다.
105+
{% highlight ruby %}
106+
fib(10) => x
107+
p x #=> 55
108+
{% endhighlight %}
109+
110+
* `end` 없는 메서드 정의가 추가됩니다.
111+
{% highlight ruby %}
112+
def square(x) = x * x
113+
{% endhighlight %}
114+
115+
* 검색 패턴이 추가됩니다.
116+
{% highlight ruby %}
117+
case ["a", 1, "b", "c", 2, "d", "e", "f", 3]
118+
in [*pre, String => x, String => y, *post]
119+
p pre #=> ["a", 1]
120+
p x #=> "b"
121+
p y #=> "c"
122+
p post #=> [2, "d", "e", "f", 3]
123+
end
124+
{% endhighlight %}
125+
126+
* `Hash#except`가 내장됩니다.
127+
{% highlight ruby %}
128+
h = { a: 1, b: 2, c: 3 }
129+
p h.except(:a) #=> {:b=>2, :c=>3}
130+
{% endhighlight %}
131+
132+
* 메모리 뷰가 실험적인 기능으로 추가됩니다.
133+
134+
* 이는 숫자 배열이나 비트맵 이미지와 같은 메모리 공간을 확장 라이브러리 간에 교환하기 위한 새로운 C-API 집합입니다. 확장 라이브러리는 모양, 요소의 형식 등으로 구성된 메모리 공간의 메타 정보를 공유할 수 있습니다. 이러한 메타 정보를 사용하여 확장 라이브러리는 다차원 배열을 적절하게 공유할 수 있습니다. 이 기능은 파이썬의 버퍼 프로토콜을 참고하여 설계되었습니다.
135+
136+
## 성능 향상
137+
138+
* MJIT에 많은 개선이 추가되었습니다. 자세한 내용은 [NEWS](https://github.com/ruby/ruby/blob/v3_0_0_preview1/NEWS.md)를 확인하세요.
139+
140+
## 그 이외의 2.7 이후로 주목할 만한 변경
141+
142+
* 키워드 인자가 다른 인자들로부터 분리됩니다.
143+
* 원칙적으로 루비 2.7에서 경고를 출력하는 코드는 동작하지 않습니다. 자세한 내용은 [문서](https://www.ruby-lang.org/ko/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/)를 확인하세요.
144+
* 한편, 인자를 전달할 때 앞쪽 인자를 사용할 수 있습니다.
145+
{% highlight ruby %}
146+
def method_missing(meth, ...)
147+
send(:"do_#{ meth }", ...)
148+
end
149+
{% endhighlight %}
150+
151+
* `$SAFE` 기능이 완전히 제거됩니다. 이 값은 이제 일반 전역 변수입니다.
152+
153+
* 루비 2.5에서 백트레이스의 순서가 역순이 되었습니다만, 이를 취소합니다. 이제 백트레이스는 루비 2.4와 동일하게 동작합니다. 예외가 발생한 곳의 에러 메시지와 줄 번호가 가장 먼저 출력되며, 이를 호출한 곳의 정보가 그 뒤에 출력됩니다.
154+
155+
* 표준 라이브러리를 업데이트했습니다.
156+
* RubyGems 3.2.0.rc.1
157+
* Bundler 2.2.0.rc.1
158+
* IRB 1.2.6
159+
* Reline 0.1.5
160+
161+
* 다음 라이브러리들은 이제 기본으로 포함되지 않습니다.
162+
각 기능이 필요한 경우에는 해당하는 젬을 설치해주세요.
163+
* net-telnet
164+
* xmlrpc
165+
166+
* 기본 젬이 내장 젬으로 승격됩니다.
167+
* rexml
168+
* rss
169+
170+
* 표준 라이브러리가 기본 젬으로 승격됩니다. 다음 기본 젬들이 rubygems.org에서 배포 중입니다.
171+
* abbrev
172+
* base64
173+
* English
174+
* erb
175+
* find
176+
* io-nonblock
177+
* io-wait
178+
* net-ftp
179+
* net-http
180+
* net-imap
181+
* net-protocol
182+
* nkf
183+
* open-uri
184+
* optparse
185+
* resolv
186+
* resolv-replace
187+
* rinda
188+
* securerandom
189+
* set
190+
* shellwords
191+
* tempfile
192+
* time
193+
* tmpdir
194+
* tsort
195+
* weakref
196+
197+
더 자세한 내용은 [NEWS](https://github.com/ruby/ruby/blob/v3_0_0_preview1/NEWS.md)
198+
[커밋 로그](https://github.com/ruby/ruby/compare/v2_7_0...v3_0_0_preview1)를 확인해주세요.
199+
200+
{% assign release = site.data.releases | where: "version", "3.0.0-preview1" | first %}
201+
202+
이러한 변경사항에 따라, 루비 2.7.0 이후로 [파일 {{ release.stats.files_changed }}개 수정, {{ release.stats.insertions }}줄 추가(+), {{ release.stats.deletions }}줄 삭제](https://github.com/ruby/ruby/compare/v2_7_0...v3_0_0_preview1)가 이루어졌습니다!
203+
204+
루비 3.0.0-preview1을 사용해보시고, 피드백을 보내주세요!
205+
206+
## 다운로드
207+
208+
* <{{ release.url.bz2 }}>
209+
210+
SIZE: {{ release.size.bz2 }}
211+
SHA1: {{ release.sha1.bz2 }}
212+
SHA256: {{ release.sha256.bz2 }}
213+
SHA512: {{ release.sha512.bz2 }}
214+
215+
* <{{ release.url.gz }}>
216+
217+
SIZE: {{ release.size.gz }}
218+
SHA1: {{ release.sha1.gz }}
219+
SHA256: {{ release.sha256.gz }}
220+
SHA512: {{ release.sha512.gz }}
221+
222+
* <{{ release.url.xz }}>
223+
224+
SIZE: {{ release.size.xz }}
225+
SHA1: {{ release.sha1.xz }}
226+
SHA256: {{ release.sha256.xz }}
227+
SHA512: {{ release.sha512.xz }}
228+
229+
* <{{ release.url.zip }}>
230+
231+
SIZE: {{ release.size.zip }}
232+
SHA1: {{ release.sha1.zip }}
233+
SHA256: {{ release.sha256.zip }}
234+
SHA512: {{ release.sha512.zip }}
235+
236+
## 3.0.0-preview2 예고
237+
238+
정적 타입 분석 기능을 위한 ["타입 프로파일러"](https://github.com/mame/ruby-type-profiler)를 포함할 예정입니다. 계속 지켜봐주세요!
239+
240+
## 루비는
241+
242+
루비는 1993년에 Matz(마츠모토 유키히로)가 처음 개발했고, 현재는 오픈 소스로서 개발되고 있습니다. 이는 여러 플랫폼에서 동작하며, 특히 웹 개발에서 전 세계적으로 이용되고 있습니다.

0 commit comments

Comments
 (0)