summaryrefslogtreecommitdiff
path: root/NEWS
blob: 1e31e581bcdaf8aff93e6225a4dc4a5e2c918f7e (plain)
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# -*- rd -*-
= NEWS

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 1.9.3 release

=== C API updates
* NUM2SHORT() and NUM2USHORT() added. They are similar to NUM2INT, but short.
* rb_newobj_of() and NEWOBJ_OF() added. They create a new object of a given class.

=== Library updates (outstanding ones only)

* builtin classes

  * Array
    * incompatible changes:
      * random parameter of Array#shuffle! and Array#sample now
        will be called with one argument, maximum value.

  * Enumerable
    * added method:
      * added Enumerable#lazy method for lazy enumeration.

  * ENV
    * aliased method:
      * ENV.to_h is a new alias for ENV.to_hash

  * File:
    * extended method:
      * File.fnmatch? now expands braces in the pattern if
        File::FNM_EXTGLOB option is given.

  * Hash
    * added method:
      * added Hash#to_h as explicit conversion method, like Array#to_a.
    * extended method:
      * Hash#default_proc= can be passed nil to clear the default proc.

  * Kernel
    * added method:
      * added Kernel#Hash conversion method like Array() or Float().
      * added Kernel#using, which imports refinements into the current scope.
        [experimental]
      * added Kernel#__dir__ which returns a current dirname.
    * extended method:
      * Kernel#warn accepts multiple args in like puts.
      * Kernel#caller accepts second optional argument `n' which specify
        required caller size.
    * incompatible changes:
      * system() and exec() closes non-standard file descriptors
        (The default of :close_others option is changed to true by default.)
      * respond_to? against a protected method now returns false unless
        the second argument is true.
      * __callee__ has returned to the original behavior, and now
        returns the called name but not the original name in an
        aliased method.
      * Kernel#inspect does not call #to_s anymore
        (it used to call redefined #to_s).

  * LoadError
    * added method:
      * added LoadError#path method to return the file name that could not be
        loaded.

  * Module
    * added method:
      * added Module#prepend which is similar to Module#include,
        however a method in the prepended module overrides the
        corresponding method in the prepending module.
      * added Module#refine, which extends a class or module locally.
        [experimental]
      * added Module#refinements, which returns refinements defined in the
        receiver. [experimental]
      * added Module#using, which imports refinements into the receiver.
        [experimental]
    * extended method:
      * Module#define_method accepts a UnboundMethod from a Module.
      * Module#const_get accepts a qualified constant string, e.g.
        Object.const_get("Foo::Bar::Baz")

  * NilClass
    * added method:
      * added nil.to_h which returns {}

  * Signal
    * incompatible changes:
      * Signal.trap raises ArgumentError when :SEGV, :BUS, :ILL, :FPE, :VTALRM
        are specified.

  * Struct
    * added method:
      * added Struct#to_h returning values with keys corresponding to the
        instance variable names.

  * Thread
    * added method:
      * added Thread#thread_variable_get for getting thread local variables
        (these are different than Fiber local variables).
      * added Thread#thread_variable_set for setting thread local variables.
      * added Thread#thread_variables for getting a list of the thread local
        variable keys.
      * added Thread#thread_variable? for testing to see if a particular thread
        variable has been set.

  * Time
    * change return value:
      * Time#to_s returned encoding defaults to US-ASCII but automatically
        transcodes to Encoding.default_internal if it is set.

  * Fiber
    * incompatible changes:
      * Fiber#resume cannot resume a fiber which invokes "Fiber#transfer".

  * GC::Profiler
    * added method:
      * added GC::Profiler.raw_data which returns raw profile data for GC.

  * toplevel
    * added method:
      * added main.define_method which defines a global function.

* net/http
  * new features:
    * Proxies are now automatically detected from the http_proxy environment
      variable.  See Net::HTTP::new for details.
    * gzip and deflate compression are now requested for all requests by
      default.  See Net::HTTP for details.
    * SSL sessions are now reused across connections for a single instance.
      This speeds up connection by using a previously negotiated session.
  * new methods:
    * Net::HTTP#local_host
    * Net::HTTP#local_host=
    * Net::HTTP#local_port
    * Net::HTTP#local_port=
  * extended method:
    * Net::HTTP#connect uses local_host and local_port if specified.

* net/imap
  * new methods:
    * Net::IMAP.default_port
    * Net::IMAP.default_imap_port
    * Net::IMAP.default_tls_port
    * Net::IMAP.default_ssl_port
    * Net::IMAP.default_imaps_port

* ostruct
  * new methods:
    * OpenStruct#[], []=
    * OpenStruct#each_pair
    * OpenStruct#eql?
    * OpenStruct#hash
    * OpenStruct#to_h converts the struct to a hash.
  * extended method:
    * OpenStruct.new also accepts an OpenStruct / Struct.

* pathname
  * extended method:
    * Pathname#find returns an enumerator if no block is given.

* resolv
  * new methods:
    * Resolv::DNS#timeouts=
    * Resolv::DNS::Config#timeouts=

* shellwords
    * Shellwords#shellescape() now stringifies the given object using to_s.
    * Shellwords#shelljoin() accepts non-string objects in the given
      array, each of which is stringified using to_s.

* syslog
  * Added Syslog::Logger which provides a Logger API atop Syslog.
  * Syslog::Priority, Syslog::Level, Syslog::Option and Syslog::Macros
    are introduced for easy detection of available constants on a
    running system.

* lib/tmpdir.rb
  * incompatible changes:
    * Dir.mktmpdir uses FileUtils.remove_entry instead of
      FileUtils.remove_entry_secure.  This means that applications should not
      change the permission of the created temporary directory to make
      accessible from other users.

* zlib
  * Added streaming support for Zlib::Inflate and Zlib::Deflate.  This allows
    processing of a stream without the use of large amounts of memory.
  * Added support for the new deflate strategies Zlib::RLE and Zlib::FIXED.
  * Zlib streams are now processed without the GVL.  This allows gzip, zlib and
    deflate streams to be processed in parallel.

* openssl
  * Consistently raise an error when trying to encode nil values. All instances
    of OpenSSL::ASN1::Primitive now raise TypeError when calling to_der on an
    instance whose value is nil. All instances of OpenSSL::ASN1::Constructive
    raise NoMethodError in the same case. Constructing such values is still
    permitted.
  * TLS 1.1 & 1.2 support by setting OpenSSL::SSL::SSLContext#ssl_version to
    :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client or :TLSv1_1, :TLSv1_1_server
    :TLSv1_1_client. The version being effectively used can be queried
    with OpenSSL::SSL#ssl_version. Furthermore, it is also possible to
    blacklist the new TLS versions with OpenSSL::SSL:OP_NO_TLSv1_1 and
    OpenSSL::SSL::OP_NO_TLSv1_2.
  * Added OpenSSL::SSL::SSLContext#renegotiation_cb. A user-defined callback
    may be set which gets called whenever a new handshake is negotiated. This
    also allows to programmatically decline (client) renegotiation attempts.
  * Support for "0/n" splitting of records as BEAST mitigation via
    OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS.
  * OpenSSL requires passwords for decrypting PEM-encoded files to be at least
    four characters long. This led to awkward situations where an export with
    a password with fewer than four characters was possible, but accessing the
    file afterwards failed. OpenSSL::PKey::RSA, OpenSSL::PKey::DSA and
    OpenSSL::PKey::EC therefore now enforce the same check when exporting a
    private key to PEM with a password - it has to be at least four characters
    long.
  * SSL/TLS support for the Next Protocol Negotiation extension. Supported
    with OpenSSL 1.0.1 and higher.
  * OpenSSL::OPENSSL_FIPS allows client applications to detect whether OpenSSL
    is running in FIPS mode and to react to the special requirements this
    might impy.

* yaml
  * Syck has been removed.  YAML now completely depends on libyaml being
    installed.

* objspace
  * new method:
    * ObjectSpace.reachable_objects_from(obj)

* rexml
  * REXML::Document#write supports Hash arguments.
  * REXML::Document#write supports new :encoding option. It changes
    XML document encoding. Without :encoding option, encoding in
    XML declaration is used for XML document encoding.

* cgi
  * Add HTML5 tag maker.
  * incompatible changes:
    * CGI#header has been renamed to CGI#http_header.
      CGI#header is now used by the HTML5 tag maker to
      create a <header> element.

=== Language changes

  * Added %i and %I for symbol list creation (similar to %w and %W).

=== Compatibility issues (excluding feature bug fixes)

  * Signal.trap

    See above.

  * Merge Onigmo.
    https://github.com/k-takata/Onigmo

  * The :close_others option is true by default for system() and exec().
    Also, the close-on-exec flag is set by default for all new file descriptors.
    This means file descriptors doesn't inherit to spawned process unless
    explicitly requested such as system(..., fd=>fd).

  * Kernel#respond_to? against a protected method now returns false
    unless the second argument is true.

  * Dir.mktmpdir in lib/tmpdir.rb

    See above.

  * OpenStruct new methods can conflict with custom attributes named
    "each_pair", "eql?", "hash" or "to_h".