8
8
reference information is supplied with. For a full list of changes
9
9
with all sufficient information, see the ChangeLog file.
11
== Changes since the 1.9.1 release
11
== Changes since the 1.9.2 release
14
* Ruby's License is changed from a dual license with GPLv2
15
to a dual license with 2-clause BSDL.
17
=== Known platform dependent issues
20
* You have to configure ruby with '--with-gcc=gcc-4.2' if you're using
21
Xcode 4.1, or, if you're using Xcode 4.2, you have to configure ruby
22
with '--with-gcc=clang'.
26
* rb_scan_args() is enhanced with support for option hash argument
29
* ruby_vm_at_exit() added. This enables extension libs to hook a VM
32
* rb_reserved_fd_p() added. If you want to close all file descriptors,
33
check using this API. [ruby-core:37759]
12
35
=== Library updates (outstanding ones only)
19
* Array#repeated_combination
20
* Array#repeated_permutation
27
* Array#{uniq,uniq!,product} can take a block.
51
* Array#pack supports endian modifiers
54
* Multiplication algorithm for Bignums with a large number of digits over
55
150 BDIGITs is changed in order to reduce its calculation time.
56
Now such large Bignums are multiplied by using Toom-3 algorithm.
55
* Enumerable#collect_concat
56
* Enumerable#each_entry
58
* Enumerable#slice_before
63
* Enumerator#next_values
64
* Enumerator#peek_values
66
* StopIteration#result
69
* #with_index accepts an optional argument that specifies the
70
index number to start with, defaulted to 0.
72
* incompatible changes:
73
* #rewind now calls the "rewind" method of the enclosed object
75
* #next doesn't clear the position at end.
78
* Uses locale's encoding
79
* ENV.[]= raises Errno::{EINVAL,ENOMEM} etc. on failure.
98
* GC::Profiler.total_time
114
* IO.pipe can take a block.
119
They are used to extend non-blocking exceptions.
76
* IO#putc supports multibyte characters
123
* Integer#rationalize
79
* IO.write(name, string, [offset] )
80
Write `string` to file `name`.
81
Opposite with File.read.
82
* IO.binwrite(name, string, [offset] )
83
binary version of IO.write.
127
* Kernel#respond_to_missing?
128
* Kernel#singleton_class
129
* Kernel#require_relative
132
* Kernel#respond_to? can be used to detect methods not implemented.
133
For example, Process.respond_to?(:fork) returns false on Windows.
135
* incompatible changes:
136
* Kernel#instance_eval yields the receiver.
144
On Windows, the current directory is no longer implicitly
145
prepended to the default command search path, just like other
154
* NilClass#rationalize
158
* Float() supports hexadecimal floating point format.
159
* printf() supports %a/%A format.
163
* Proc#source_location returns location even if receiver is a method
164
defined by attr_reader / attr_writer / attr_accessor.
168
* Process.spawn accepts [:child, FD] for a redirect target.
170
* Random (new class to generate pseudo-random numbers)
174
* Rational#rationalize
86
* move #__id__ to BasicObject.
88
* Kernel#rand supports range argument
92
* Module#private_constant
93
* Module#public_constant
97
* Random.rand supports range argument
178
* string[regexp, name] is supported for named capture.
182
* Thread#add_trace_func
183
* Thread#set_trace_func
101
* String#unpack supports endian modifiers
187
* time_t restriction is removed to represent before 1901 and after 2038.
188
Proleptic Gregorian calendar is used for old dates.
189
* Time.new have optional arguments to specify date with time offset.
190
* Time#getlocal, Time#localtime have optional time offset argument.
197
* incompatible changes:
198
* The year argument of Time.{utc,gm,local,mktime} is now interpreted as
199
the value itself. For example, Time.utc(99) means the year 99 AD,
108
* Time#strftime supports %:z and %::z.
111
* Process#maxgroups and Process#maxgroups= now raise NotImplementedError if
112
the platform don't support supplementary groups concept.
116
* BigDecimal#power and BigDecimal#** support non-integral exponent.
118
* Kernel.BigDecimal and BigDecimal.new now accept instances of Integer,
119
Rational, Float, and BigDecimal. If you pass a Rational or a Float to
120
them, you must specify the precision to produce the digits of a BigDecimal.
122
* The behavior of BigDecimal#coerce with a Rational is changed. It uses
123
the precision of the receiver BigDecimal to produce the digits of a
124
BigDecimal from the given Rational.
128
* BigDecimal#to_d and Integer#to_d are added.
130
* Float#to_d accepts a precision.
132
* Rational#to_d raises ArgumentError when passing zero or negative
137
* Zero and an implicit precision is deprecated.
138
This feature is removed at the next release of bigdecimal.
140
* A negative precision isn't supported.
141
Be careful it is an incompatible change.
145
* Accepts flonum explicitly with limitations.
146
* If the given offset is flonum, DateTime assumes its precision is
149
DateTime.new(2001,2,3,0,0,0,3.0/24) ==
150
DateTime.new(2001,2,3,0,0,0,'+03:00')
153
* If the given operand for -/+ is flonum, DateTime assumes its
154
precision is at most nanosecond.
156
DateTime.new(2001,2,3) + 0.5 == DateTime.new(2001,2,3,12)
159
* Precision of offset is always at most second.
161
Rational('0.5') == Rational('0.500001') #=> false
162
DateTime.new(2001,2,3,0,0,0,Rational('0.5')) ==
163
DateTime.new(2001,2,3,0,0,0,Rational('0.500001'))
166
* Ignores long offset and far reform day (with warning).
170
-1<=offset<=1 (-24:00..+24:00)
171
2298874<=start<=2426355 or -/+oo
172
(proleptic Gregorian/Julian mean -/+oo)
174
* A method strftime cannot produce huge output (same as Time's one).
176
* Even though Date/DateTime can handle far dates, the following causes
179
DateTime.new(1<<10000).strftime('%Y') # Errno::ERANGE
181
* Changed the format of inspect.
182
* Changed the format of marshal (but, can load old dumps).
204
* Digest::Class.base64digest
205
* Digest::Instance#base64digest
206
* Digest::Instance#base64digest!
208
* Digest::HMAC (digest/hmac) has been marked as deprecated because
209
it was unintentional for the experimental library to be included
210
in the final release of 1.9.1. Please use OpenSSL::HMAC instead.
217
* raise an exception not returns nil for invalid feed making.
221
* new method to return maker class.
223
* RSS::Maker.supported?(version)
224
* new method to check whether given version is supported.
226
* RSS::Maker: item.guid.permanent_link?
227
* new alias of item.guid.isPermaLink
228
* RSS::Maker: item.guid.permanent_link=
229
* new alias of item.guid.isPermaLink=
232
* Now uses libffi as a backend if avaiable.
233
It means DL works fine on more platforms.
236
* A lightweight wrapper for libffi.
239
* Now uses libyaml as a backend if available.
240
It means YAML library supports new standards for YAML.
243
* A wrapper for libyaml.
246
* Update to JSON 1.1.9
250
* REXML::Document.entity_expansion_limit=
252
New method to set the entity expansion limit. By default the limit is
253
set to 10000. See the following URL for details.
255
http://www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/
259
* Updated to RDoc 2.5.8
263
* Updated to RubyGems 1.3.7
267
* imported upstream version (logger/1.2.7)
268
* do not raise an exception even if log writing failed.
269
* do not raise ShiftingError if an aged file already exists.
270
(no ShiftingError will be raised from 1.2.7, just warn() instead)
273
* API change to adhere strictly to mathematical definitions:
274
* Matrices must now be rectangular.
275
* trace, regular?, singular? are defined only for square matrices
276
* support for empty matrices
277
* all integer matrices now have the right determinant (also an integer)
279
* Matrix and Vector include Enumerable.
200
* Matrix::EigenvalueDecomposition
201
* Matrix::LUPDecomposition
287
* Matrix#each_with_index
207
* Matrix#lower_triangular?
209
* Matrix#lup_decomposition
212
* Matrix#permutation?
216
* Matrix#upper_triangular?
218
* Vector#magnitude, #norm
221
* Matrix#each and #each_with_index can iterate on a subset of the elements
222
* Matrix#find_index returns [row, column] and can iterate on a subset
224
* Matrix#** implements Numeric exponents (using the eigensystem)
225
* Matrix.zero can build rectangular matrices
228
* Minitest has been updated to version 2.2.2.
229
* For full details, see https://github.com/seattlerb/minitest/blob/master/History.txt
309
* Open3.pipeline_start
316
* deprecated methods:
232
* SNI (Server Name Indication) supported for HTTPS.
234
* Allow to configure to wait server returning '100 continue' response
235
before sending HTTP request body. Set Net::HTTP#continue_timeout AND pass
236
'expect' => '100-continue' to a extra HTTP header.
238
For example, the following code sends HTTP header and waits for getting
239
'100 continue' response before sending HTTP request body. When 0.5 [sec]
240
timeout occurs or the server send '100 continue', the client sends HTTP
242
http.continue_timeout = 0.5
243
http.request_post('/continue', 'body=BODY', 'expect' => '100-continue')
246
* Net::HTTPRequest#set_form): Added to support
247
both application/x-www-form-urlencoded and multipart/form-data.
251
* ObjectSpace::memsize_of_all
322
* OpenSSL::Buffering#read_nonblock
323
* OpenSSL::Buffering#write_nonblock
324
* OpenSSL::SSL::SSLSocket#connect_nonblock
325
* OpenSSL::SSL::SSLSocket#accept_nonblock
328
* support %a/%A format.
333
* incompatible changes:
334
* Socket#{recvfrom,recvfrom_nonblock,accept,accept_nonblock,sysaccept}
335
returns a sender address as Addrinfo object instead of a binary sockaddr string.
336
Addrinfo#to_s returns the old binary sockaddr string.
337
* BasicSocket#getsockopt returns Socket::Option object instead of a binary string.
338
Socket::Option#to_s returns the old binary string.
339
* Socket.do_not_reverse_lookup is turned on by default now.
344
* Socket::AncillaryData
347
* Socket.ip_address_list
349
* Socket.tcp_server_loop
350
* Socket.tcp_server_sockets
351
* Socket.udp_server_sockets
352
* Socket.udp_server_loop_on
353
* Socket.udp_server_loop
355
* Socket.unix_server_loop
356
* Socket.unix_server_socket
359
* BasicSocket#local_address
360
* BasicSocket#remote_address
361
* BasicSocket#connect_address
362
* BasicSocket#sendmsg
363
* BasicSocket#sendmsg_nonblock
364
* BasicSocket#recvmsg
365
* BasicSocket#recvmsg_nonblock
366
* BasicSocket#getpeereid
369
* Socket.new's 3rd argument is optional now.
370
* Socket.pair's 3rd argument is optional now.
371
* Socket.pair and UNIXSocket.pair can take a block.
372
* BasicSocket#send, UDPSocket#send, Socket.getnameinfo, Socket#bind, and
373
Socket#{connect,connect_nonblock} accepts an Addrinfo object as sockaddr.
374
* BasicSocket#getsockopt accepts a Socket::Option object.
375
* Socket.getaddrinfo and IPSocket#{addr,peeraddr} accept an optional
376
argument to turn reverse lookup on/off.
378
* constant names can be accepted as well as constant values.
379
i.e. Socket.new(:PF_INET, :SOCK_STREAM, 0)
380
The constant names can be specified without the prefix.
381
i.e. Socket.new(:INET, :STREAM, 0)
382
* protocol/address family
384
* socket option protocol level
386
* shutdown's argument
254
* PKey::RSA and PKey::DSA now use the generic X.509 encoding scheme
255
(e.g. used in a X.509 certificate's Subject Public Key Info) when
256
exporting public keys to DER or PEM. Backward compatibility is
257
ensured by (already existing) fallbacks during creation.
258
* OpenSSL::ASN1::Constructive#new and OpenSSL::ASN1::Primitive#new
259
(and the constructors of their sub-classes) will no longer force
260
tagging to be set to :EXPLICIT when tag and/or tag_class are passed
261
as parameters. tagging must be set explicitly.
262
* Support for infinite length encodings via infinite_length attribute.
263
* OpenSSL::PKey.read( file | string [, pwd] ) allows to read arbitrary
264
public/private keys in DER-/PEM-encoded form with an optional password
265
for encrypted PEM encodings.
266
* Add new method OpenSSL::X509::Name#hash_old as a wrapper of
267
X509_NAME_hash_old() defined from OpenSSL 1.0.0. It returns OpenSSL 0.9.8
268
compatible hash value.
271
* support for bash/zsh completion.
274
* Rake has been upgraded from 0.8.7 to 0.9.2.2. For full release notes see
275
https://github.com/jimweirich/rake/blob/master/CHANGES
278
* RDoc has been upgraded to version 3.9.4. For full release notes see
279
http://docs.seattlerb.org/rdoc/History_txt.html
282
* Support Ruby native encoding mechanism and iconv dependency is dropped.
285
* RubyGems has been upgraded to version 1.8.10. For full release notes see
286
http://rubygems.rubyforge.org/rubygems-update/History_txt.html
390
* StringIO#read_nonblock
391
* StringIO#write_nonblock
395
* Pathname#realdirpath
396
* Pathname#each_child
399
* Pathname#realpath and Pathname#realdirpath takes optional basedir
404
* Readline.set_screen_size
405
* Readline.get_screen_size
408
* Readline.completion_proc= accepts nil.
409
nil means to use default completion proc.
417
* incompatible changes:
418
* Time.parse raises ArgumentError when no date information.
421
289
* extended method:
422
* ConditionVariable#wait takes timeout argument.
426
* SecureRandom.urlsafe_base64
430
* URI.encode_www_form
431
* URI.decode_www_form
432
* URI.encode_www_form_component
433
* URI.decode_www_form_component
290
* StringIO#set_encoding can get 2nd argument and optional hash.
294
* -j N, --jobs=N: Allow run N testcases at once.
295
* --jobs-status: Show status of jobs when parallel running.
296
* --no-retry: Don't retry testcases which failed when parallel running.
297
* --ruby=RUBY: path to ruby for job(worker) process. optional.
298
* --hide-skip: Hide skip messages. You'll see the number of skips at end of
303
* URI::Generic#hostname
304
* URI::Generic#hostname=
308
* WEBrick::HTTPRequest#continue for generating '100 continue' response.
309
* new logging directive:
310
* %{remote}p for remote (client) port number.
313
* The default YAML engine is now Psych. You may downgrade to syck by setting
314
YAML::ENGINE.yamler = 'syck'.
447
* Zlib::GzipFile#path
448
* Zlib.#adler32_combine
449
* Zlib.#crc32_combine
323
* FileUtils#chmod supports symbolic mode argument.
455
325
=== Language changes
457
* Regexp properties (\p{}) names now ignore underscores, spaces, and case, so
458
\p{ol chiki} is the same as \p{Ol_Chiki}
459
* Regexps now support Unicode 5.2 (new characters and scripts)
460
* \d, \s, and \w are now ASCII only; use POSIX bracket classes and \p{} for
462
* $: no longer includes the current directory, use require_relative
463
* Symbol with an invalid encoding is forbidden to exist.
465
=== Compilation options
467
* --program-prefix and --program-suffix no longer act on the shared object
468
names nor paths to libraries.
470
use --with-rubylibprefix='${libruby}/${RUBY_INSTALL_NAME}' and
471
--with-soname='${RUBY_INSTALL_NAME}' for the same result as Ruby 1.9.1.
473
* --with-arch is added for universal binary, instead of
474
--enable-fat-binary option.
327
* Regexps now support Unicode 6.0. (new characters and scripts)
329
* [experimental] Regexps now support Age property.
330
Unlike Perl, current implementation takes interpretation of the
331
interpretation of UTS #18.
332
http://www.unicode.org/reports/tr18/
334
* Turning on/off indentation warnings with directives.
335
("# -*- warn-indent: true -*-" / "# -*- warn-indent: false -*-")
476
337
=== Compatibility issues (excluding feature bug fixes)
480
* Socket#recvfrom_nonblock
482
* Socket#accept_nonblock
484
* BasicSocket#getsockopt
490
* --program-prefix and --program-suffix
491
* --enable-fat-binary
498
Deprecated. See above.