1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
# NEWS for Ruby 3.2.0
This document is a list of user-visible feature changes
since the **3.1.0** release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
## Language changes
* Anonymous rest and keyword rest arguments can now be passed as
arguments, instead of just used in method parameters.
[[Feature #18351]]
```ruby
def foo(*)
bar(*)
end
def baz(**)
quux(**)
end
```
* A proc that accepts a single positional argument and keywords will
no longer autosplat. [[Bug #18633]]
```ruby
proc{|a, **k| a}.call([1, 2])
# Ruby 3.1 and before
# => 1
# Ruby 3.2 and after
# => [1, 2]
```
* Constant assignment evaluation order for constants set on explicit
objects has been made consistent with single attribute assignment
evaluation order. With this code:
```ruby
foo::BAR = baz
```
`foo` is now called before `baz`. Similarly, for multiple assignment
to constants, left-to-right evaluation order is used. With this
code:
```ruby
foo1::BAR1, foo2::BAR2 = baz1, baz2
```
The following evaluation order is now used:
1. `foo1`
2. `foo2`
3. `baz1`
4. `baz2`
[[Bug #15928]]
* Find pattern is no longer experimental.
[[Feature #18585]]
## Command line options
## Core classes updates
Note: We're only listing outstanding class updates.
* Hash
* Hash#shift now always returns nil if the hash is
empty, instead of returning the default value or
calling the default proc. [[Bug #16908]]
* Kernel
* Kernel#binding raises RuntimeError if called from a non-Ruby frame
(such as a method defined in C). [[Bug #18487]]
* MatchData
* MatchData#byteoffset has been added. [[Feature #13110]]
* Module
* Module.used_refinements has been added. [[Feature #14332]]
* Module#refinements has been added. [[Feature #12737]]
* Module#const_added has been added. [[Feature #17881]]
* Proc
* Proc#dup returns an instance of subclass. [[Bug #17545]]
* Proc#parameters now accepts lambda keyword. [[Feature #15357]]
* Refinement
* Refinement#refined_class has been added. [[Feature #12737]]
* Set
* Set is now available as a builtin class without the need for `require "set"`. [[Feature #16989]]
It is currently autoloaded via the `Set` constant or a call to `Enumerable#to_set`.
* String
* String#byteindex and String#byterindex have been added. [[Feature #13110]]
* Update Unicode to Version 14.0.0 and Emoji Version 14.0. [[Feature #18037]]
(also applies to Regexp)
* String#bytesplice has been added. [[Feature #18598]]
* Struct
* A Struct class can also be initialized with keyword arguments
without `keyword_init: true` on `Struct.new` [[Feature #16806]]
* TracePoint
* TracePoint#binding now returns `nil` for `c_call`/`c_return` TracePoints.
[[Bug #18487]]
* TracePoint#enable `target_thread` keyword argument now defaults to the
current thread if `target` and `target_line` keyword arguments are not
passed. [[Bug #16889]]
## Stdlib updates
* The following default gem are updated.
* RubyGems 3.4.0.dev
* bigdecimal 3.1.2
* bundler 2.4.0.dev
* cgi 0.3.2
* etc 1.4.0
* io-console 0.5.11
* io-wait 0.2.2.pre1
* ipaddr 1.2.4
* logger 1.5.1
* ostruct 0.5.4
* reline 0.3.1
* securerandom 0.2.0
* The following bundled gems are updated.
* net-imap 0.2.3
* rbs 2.2.2
* typeprof 0.21.2
* The following default gems are now bundled gems.
## Compatibility issues
Note: Excluding feature bug fixes.
### Removed constants
The following deprecated constants are removed.
* `Fixnum` and `Bignum` [[Feature #12005]]
* `Random::DEFAULT` [[Feature #17351]]
* `Struct::Group`
* `Struct::Passwd`
### Removed methods
The following deprecated methods are removed.
* `Dir.exists?` [[Feature #17391]]
* `File.exists?` [[Feature #17391]]
* `Kernel#=~` [[Feature #15231]]
* `Kernel#taint`, `Kernel#untaint`, `Kernel#tainted?`
[[Feature #16131]]
* `Kernel#trust`, `Kernel#untrust`, `Kernel#untrusted?`
[[Feature #16131]]
## Stdlib compatibility issues
* `Psych` no longer bundles libyaml sources.
Users need to install the libyaml library themselves via the package
system. [[Feature #18571]]
## C API updates
### Removed C APIs
The following deprecated APIs are removed.
* `rb_cData` variable.
* "taintedness" and "trustedness" functions. [[Feature #16131]]
## Implementation improvements
## JIT
### MJIT
### YJIT: New experimental in-process JIT compiler
## Static analysis
### RBS
### TypeProf
## Debugger
## error_highlight
## IRB Autocomplete and Document Display
## Miscellaneous changes
[Feature #12005]: https://bugs.ruby-lang.org/issues/12005
[Feature #12737]: https://bugs.ruby-lang.org/issues/12737
[Feature #13110]: https://bugs.ruby-lang.org/issues/13110
[Feature #14332]: https://bugs.ruby-lang.org/issues/14332
[Feature #15231]: https://bugs.ruby-lang.org/issues/15231
[Feature #15357]: https://bugs.ruby-lang.org/issues/15357
[Bug #15928]: https://bugs.ruby-lang.org/issues/15928
[Feature #16131]: https://bugs.ruby-lang.org/issues/16131
[Feature #16806]: https://bugs.ruby-lang.org/issues/16806
[Bug #16889]: https://bugs.ruby-lang.org/issues/16889
[Bug #16908]: https://bugs.ruby-lang.org/issues/16908
[Feature #16989]: https://bugs.ruby-lang.org/issues/16989
[Feature #17351]: https://bugs.ruby-lang.org/issues/17351
[Feature #17391]: https://bugs.ruby-lang.org/issues/17391
[Bug #17545]: https://bugs.ruby-lang.org/issues/17545
[Feature #17881]: https://bugs.ruby-lang.org/issues/17881
[Feature #18037]: https://bugs.ruby-lang.org/issues/18037
[Feature #18351]: https://bugs.ruby-lang.org/issues/18351
[Bug #18487]: https://bugs.ruby-lang.org/issues/18487
[Feature #18571]: https://bugs.ruby-lang.org/issues/18571
[Feature #18585]: https://bugs.ruby-lang.org/issues/18585
[Feature #18598]: https://bugs.ruby-lang.org/issues/18598
[Bug #18633]: https://bugs.ruby-lang.org/issues/18633
|