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
|
# -*- rdoc -*-
= NEWS for Ruby 2.2.0
This document is a list of user visible feature changes made between
releases except for bug fixes.
Note that each entry is kept so brief that no reason behind or
reference information is supplied with. For a full list of changes
with all sufficient information, see the ChangeLog file.
== Changes since the 2.1.0 release
=== Language changes
=== Core classes updates (outstanding ones only)
* Enumerable
* New methods:
* Enumerable#slice_after
* Extended methods:
* min, min_by, max and max_by supports optional argument to return
multiple elements.
* File
* new class File::Statfs to hold filesystem information. (experimental)
* Float
* New methods:
* Float#next_float
* Float#prev_float
* IO
* New methods
* IO#statfs returns filesystem information as File::Statfs. (experimental)
* Process
* Extended method:
* Process execution methods such as Process.spawn opens the file in write
mode for redirect from [:out, :err].
* Symbol
* New methods
* Symbol.find(str) returns whether given string is defined as symbol or not.
* Improvements
* Most symbols which are returned by String#to_sym and
String#intern are GC-able.
* Matrix
* New methods:
* Matrix#first_minor(row, column) returns the submatrix obtained
by deleting the specified row and column.
* Matrix#cofactor(row, column) returns the (row, column) cofactor
which is obtained by multiplying the first minor by (-1)**(row + column).
=== Core classes compatibility issues (excluding feature bug fixes)
* IO
* incompatible changes:
* When flushing file IO, you cannot assume that the metadata of the file
is updated immediately. On some platforms (especially Windows), it is
delayed until the filesystem load is decreased.
* Math
* incompatible changes:
* Math.log now raises Math::DomainError instead of returning NaN if the
base is less than 0, and returns NaN instead of -infinity if both of
two arguments are 0.
* Math.atan2 now returns values like as expected by C99 if both two
arguments are infinity.
* Proc
* incompatible changes:
* ArgumentError is no longer raised when lambda Proc is passed as a
block, and the number of yielded arguments does not match the formal
arguments of the lambda, if just an array is yielded and its length
matches.
* Process
* Process execution methods such as Process.spawn opens the file in write
mode for redirect from [:out, :err].
Before Ruby 2.2, it was opened in read mode.
=== Stdlib updates (outstanding ones only)
* Etc
* New methods:
* Etc.uname
* Find, Pathname
* Extended methods:
* find method accepts "ignore_error" keyword argument.
* Pathname
* Pathname#/ is aliased to Pathname#+.
=== Stdlib compatibility issues (excluding feature bug fixes)
* time.rb
* Time.parse, Time.strptime, Time.rfc2822, Time.xmlschema may produce
fixed-offset Time objects.
It is happen when usual localtime doesn't preserve the offset from UTC.
* Time.httpdate produces always UTC Time object.
* Time.strptime raises ArgumentError when no date information.
* lib/test/**/*.rb
* Removed because it conflicts to minitest 5, and it was just an wrapper
of minitest 4. [Feature #9711]
=== Built-in global variables compatibility issues
=== C API updates
* Deprecated APIs removed. [Feature #9502]
Check_SafeStr -> SafeStringValue
rb_check_safe_str -> SafeStringValue
rb_quad_pack -> rb_integer_pack
rb_quad_unpack -> rb_integer_unpack
rb_read_check : access struct FILE internal. no replacement.
rb_struct_iv_get : internal function. no replacement.
struct rb_blocking_region_buffer : internal type. no replacement.
rb_thread_blocking_region_begin -> rb_thread_call_without_gvl family
rb_thread_blocking_region_end -> rb_thread_call_without_gvl family
TRAP_BEG -> rb_thread_call_without_gvl family
TRAP_END -> rb_thread_call_without_gvl family
rb_thread_select -> rb_thread_fd_select
struct rb_exec_arg : internal type. no replacement.
rb_exec : internal function. no replacement.
rb_exec_arg_addopt : internal function. no replacement.
rb_exec_arg_fixup : internal function. no replacement.
rb_exec_arg_init : internal function. no replacement.
rb_exec_err : internal function. no replacement.
rb_fork : internal function. no replacement.
rb_fork_err : internal function. no replacement.
rb_proc_exec_n : internal function. no replacement.
rb_run_exec_options : internal function. no replacement.
rb_run_exec_options_err : internal function. no replacement.
rb_thread_blocking_region -> rb_thread_call_without_gvl family
rb_thread_polling -> rb_thread_wait_for
rb_big2str0 : internal function. no replacement.
rb_big2ulong_pack -> rb_integer_pack
rb_gc_set_params : internal function. no replacement.
* struct RBignum is hidden. [Feature #6083]
Use rb_integer_pack and rb_integer_unpack instead.
* struct RRational is hidden. [Feature #9513]
Use rb_rational_num and rb_rational_den instead.
* rb_big_new and rb_big_resize takes a size_t instead of long.
* rb_num2long returns a long instead of SIGNED_VALUE.
* rb_num2ulong returns an unsigned long instead of VALUE.
* st hash table uses power-of-two sizes for speed [Feature #9425].
Lookups are 10-25% faster if using appropriate hash functions.
However, weaknesses in hash distribution can no longer be masked
by prime number-sized tables, so extensions may need to tweak
hash functions to ensure good distribution.
* rb_sym2str() added. This is almost same as `rb_id2str(SYM2ID(sym))`
but not pinning a dynamic symbol.
* struct RSymbol added. This represents a dynamic symbol as object in
Ruby's heaps.
* rb_str_cat_cstr() added. This is same as `rb_str_cat2()`.
* `rb_str_substr()` and `rb_str_subseq()` now share middle of a string,
but not only the end of a string. Therefore, result strings may not
be NUL-terminated, `StringValueCStr()` is needed calling to obtain a
NUL-terminated C string.
|