backports 3.18.0 → 3.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +435 -292
  3. data/Gemfile +3 -16
  4. data/README.md +306 -156
  5. data/backports.gemspec +1 -1
  6. data/lib/backports/2.0.0.rb +1 -1
  7. data/lib/backports/2.1.0/module/singleton_class.rb +8 -0
  8. data/lib/backports/2.1.0.rb +1 -1
  9. data/lib/backports/2.2.0/string/unicode_normalize.rb +3 -3
  10. data/lib/backports/2.2.0.rb +1 -1
  11. data/lib/backports/2.3.0/queue/close.rb +48 -0
  12. data/lib/backports/2.3.0/string.rb +3 -0
  13. data/lib/backports/2.3.0/struct/dig.rb +2 -0
  14. data/lib/backports/2.3.0.rb +1 -1
  15. data/lib/backports/2.4.0/bignum/dup.rb +5 -0
  16. data/lib/backports/2.4.0/bignum.rb +3 -0
  17. data/lib/backports/2.4.0/string/unpack1.rb +7 -0
  18. data/lib/backports/2.4.0.rb +1 -1
  19. data/lib/backports/2.5.0/dir/children.rb +4 -0
  20. data/lib/backports/2.5.0/dir/each_child.rb +7 -0
  21. data/lib/backports/2.5.0/hash/transform_keys.rb +10 -3
  22. data/lib/backports/2.5.0/string/undump.rb +2 -2
  23. data/lib/backports/2.5.0.rb +1 -1
  24. data/lib/backports/2.5.rb +1 -1
  25. data/lib/backports/2.6.0/enumerable/chain.rb +2 -0
  26. data/lib/backports/2.6.0.rb +2 -2
  27. data/lib/backports/2.6.rb +1 -1
  28. data/lib/backports/2.7.0/complex/{comparision.rb → comparison.rb} +0 -0
  29. data/lib/backports/2.7.0/enumerable/tally.rb +4 -3
  30. data/lib/backports/2.7.0/symbol/end_with.rb +9 -0
  31. data/lib/backports/2.7.0/symbol.rb +3 -0
  32. data/lib/backports/2.7.0.rb +2 -2
  33. data/lib/backports/3.0.0/env/except.rb +10 -0
  34. data/lib/backports/3.0.0/env.rb +3 -0
  35. data/lib/backports/3.0.0/hash/except.rb +10 -0
  36. data/lib/backports/3.0.0/hash/transform_keys.rb +48 -0
  37. data/lib/backports/3.0.0/hash.rb +3 -0
  38. data/lib/backports/3.0.0/ractor.rb +19 -0
  39. data/lib/backports/3.0.0/symbol/name.rb +21 -0
  40. data/lib/backports/3.0.0/symbol.rb +3 -0
  41. data/lib/backports/3.0.0.rb +3 -0
  42. data/lib/backports/3.0.rb +1 -0
  43. data/lib/backports/3.1.0/array/intersect.rb +16 -0
  44. data/lib/backports/3.1.0/array.rb +3 -0
  45. data/lib/backports/3.1.0/class/descendants.rb +11 -0
  46. data/lib/backports/3.1.0/class/subclasses.rb +11 -0
  47. data/lib/backports/3.1.0/class.rb +3 -0
  48. data/lib/backports/3.1.0/enumerable/compact.rb +5 -0
  49. data/lib/backports/3.1.0/enumerable/tally.rb +18 -0
  50. data/lib/backports/3.1.0/enumerable.rb +3 -0
  51. data/lib/backports/3.1.0/file/dirname.rb +16 -0
  52. data/lib/backports/3.1.0/file.rb +3 -0
  53. data/lib/backports/3.1.0/integer/try_convert.rb +7 -0
  54. data/lib/backports/3.1.0/integer.rb +3 -0
  55. data/lib/backports/3.1.0/match_data/match.rb +5 -0
  56. data/lib/backports/3.1.0/match_data/match_length.rb +6 -0
  57. data/lib/backports/3.1.0/match_data.rb +3 -0
  58. data/lib/backports/3.1.0/struct/keyword_init.rb +5 -0
  59. data/lib/backports/3.1.0/struct.rb +3 -0
  60. data/lib/backports/3.1.0.rb +3 -0
  61. data/lib/backports/3.1.rb +1 -0
  62. data/lib/backports/latest.rb +1 -1
  63. data/lib/backports/ractor/cloner.rb +103 -0
  64. data/lib/backports/ractor/errors.rb +20 -0
  65. data/lib/backports/ractor/filtered_queue.rb +205 -0
  66. data/lib/backports/ractor/queues.rb +66 -0
  67. data/lib/backports/ractor/ractor.rb +272 -0
  68. data/lib/backports/ractor/sharing.rb +97 -0
  69. data/lib/backports/version.rb +1 -1
  70. metadata +51 -8
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Backports Library [<img src="https://travis-ci.org/marcandre/backports.svg?branch=master">](https://travis-ci.org/marcandre/backports) [<img src="https://badge.fury.io/rb/backports.svg" alt="Gem Version" />](http://badge.fury.io/rb/backports) [![Tidelift](https://tidelift.com/badges/package/rubygems/backports)](https://tidelift.com/subscription/pkg/rubygems-backports?utm_source=rubygems-backports&utm_medium=referral&utm_campaign=readme)
2
2
 
3
- Yearning to use some of the new cool features in Ruby 2.7 while using 2.3.x?
3
+ Yearning to write a gem using some new cool features in Ruby 3.1 while
4
+ still supporting Ruby 2.5.x?
4
5
  Have some legacy code in Ruby 1.8 but can't live without `flat_map`?
5
6
 
6
7
  This gem is for you!
@@ -9,20 +10,20 @@ The goal of 'backports' is to make it easier to write ruby code that runs
9
10
  across different versions of Ruby.
10
11
 
11
12
  Note: [Next major version (X-mas
12
- 2020)](https://github.com/marcandre/backports/issues/139) will drop support
13
+ 2021?)](https://github.com/marcandre/backports/issues/139) may drop support
13
14
  for Ruby < 2.2.
14
15
 
15
16
  ## Loading backports
16
17
 
17
18
  ### Explicitly (recommended)
18
19
 
19
- For example, if you want to use transform_values and transform_keys, even in
20
+ For example, if you want to use `transform_values` and `transform_keys`, even in
20
21
  Ruby implementations that don't include it:
21
22
 
22
23
  require 'backports/2.4.0/hash/transform_values'
23
24
  require 'backports/2.5.0/hash/transform_keys'
24
25
 
25
- This will enable Hash#transform_values and Hash#transform_keys, using the
26
+ This will enable `Hash#transform_values` and `Hash#transform_keys`, using the
26
27
  native versions if available or otherwise provide a pure Ruby version.
27
28
 
28
29
  ### By Module
@@ -32,32 +33,31 @@ Class:
32
33
 
33
34
  require 'backports/2.3.0/hash'
34
35
 
35
- This will make sure that Hash responds to dig, fetch_values, <, <=, >, >= and
36
- to_proc
36
+ This will make sure that Hash responds to `dig`, `fetch_values`, `to_proc` and comparisons.
37
37
 
38
38
  ### Up to a specific Ruby version (for quick coding)
39
39
 
40
40
  You can load all backports up to a specific version.
41
- For example, to bring any
42
- version of Ruby mostly up to Ruby 2.7.0's standards:
41
+ For example, to bring any version of Ruby mostly up to Ruby 3.1.0's standards:
43
42
 
44
- require 'backports/2.7.0'
43
+ require 'backports/3.1.0'
45
44
 
46
45
  This will bring in all the features of 1.8.7 and many features of Ruby 1.9.x
47
- all the way up to Ruby 2.7.0 (for all versions of Ruby)!
46
+ all the way up to Ruby 3.1.0 (for all versions of Ruby)!
48
47
 
49
48
  You may `require 'backports/latest'` as a
50
49
  shortcut to the latest Ruby version supported.
51
50
 
52
- *Note*: For production / public gems, it is highly recommended you only require
51
+ _Note_: For production / public gems, it is highly recommended you only require
53
52
  the backports you need explicitly.
54
53
 
55
- *Note*: Although I am a Ruby committer, this gem is a personal project and is
54
+ _Note_: Although I am a Ruby committer, this gem is a personal project and is
56
55
  not endorsed by ruby-core.
57
56
 
58
57
  ## What's inside
59
58
 
60
59
  Goals for backported features:
60
+
61
61
  1. Won't break older code
62
62
  2. Pure Ruby (no C extensions)
63
63
  3. Pass [ruby/spec](https://github.com/ruby/spec)
@@ -109,328 +109,467 @@ itself, JRuby and Rubinius.
109
109
 
110
110
  # Complete List of backports
111
111
 
112
+ ## Ruby 3.1 backports
113
+
114
+ #### Array
115
+
116
+ - `intersect?`
117
+
118
+ #### Class
119
+
120
+ - `descendants`
121
+ - `subclasses`
122
+
123
+ #### Enumerable
124
+
125
+ - `compact`
126
+ - `tally` (with hash argument)
127
+
128
+ ### File
129
+
130
+ - `dirname` (with depth argument)
131
+
132
+ #### Integer
133
+
134
+ - `try_convert`
135
+
136
+ #### MatchData
137
+
138
+ - `match`
139
+ - `match_length`
140
+
141
+ #### Struct
142
+
143
+ - `keyword_init?`
144
+
145
+ ## Ruby 3.0 backports
146
+
147
+ #### Env
148
+
149
+ - `except`
150
+
151
+ #### Hash
152
+
153
+ - `except`
154
+ - `transform_keys`, `transform_keys!` (with hash argument)
155
+
156
+ #### Ractor
157
+
158
+ - All methods, with the caveats:
159
+ - uses Ruby's `Thread` internally
160
+ - will not raise some errors when `Ractor` would (in particular `Ractor::IsolationError`)
161
+ - supported in Ruby 2.0+ only
162
+
163
+ #### Symbol
164
+
165
+ - `name`
166
+
112
167
  ## Ruby 2.7 backports
113
168
 
114
169
  #### Array
115
- - `intersection`
170
+
171
+ - `intersection`
116
172
 
117
173
  #### Comparable
118
- - `clamp` (with range)
174
+
175
+ - `clamp` (with range)
119
176
 
120
177
  #### Complex
121
- - +<=>+
178
+
179
+ - `<=>`
122
180
 
123
181
  #### Enumerable
124
- - `filter_map`
125
- - `tally`
182
+
183
+ - `filter_map`
184
+ - `tally`
126
185
 
127
186
  #### Enumerator
128
- - `produce` (class method)
187
+
188
+ - `produce` (class method)
189
+
190
+ #### Symbol
191
+ - `end_with?`
129
192
 
130
193
  #### Time
131
- - `floor`, `ceil`
194
+
195
+ - `floor`, `ceil`
132
196
 
133
197
  ## Ruby 2.6 backports
134
198
 
135
199
  #### Array
136
- - `difference`, `union`
137
- - `to_h` (with block)
200
+
201
+ - `difference`, `union`
202
+ - `to_h` (with block)
138
203
 
139
204
  #### Enumerable
140
- - `chain`
141
- - `to_h` (with block)
205
+
206
+ - `chain`
207
+ - `to_h` (with block)
142
208
 
143
209
  #### Enumerator::Chain (use Enumerable#chain)
144
210
 
145
211
  #### Hash
146
- - `merge`, `merge!`/`update` (with multiple arguments)
147
- - `to_h` (with block)
212
+
213
+ - `merge`, `merge!`/`update` (with multiple arguments)
214
+ - `to_h` (with block)
148
215
 
149
216
  #### Kernel
150
- - `then`
217
+
218
+ - `then`
151
219
 
152
220
  #### Method
153
- - +<<+, +>>+
221
+
222
+ - `<<`, `>>`
154
223
 
155
224
  #### Proc
156
- - +<<+, +>>+
225
+
226
+ - `<<`, `>>`
157
227
 
158
228
  #### Range
159
- - `cover?` (with `Range` argument)
229
+
230
+ - `cover?` (with `Range` argument)
160
231
 
161
232
  ## Ruby 2.5 backports
162
233
 
163
234
  #### Array
164
- - `append`, `prepend`
235
+
236
+ - `append`, `prepend`
165
237
 
166
238
  #### Dir
167
- - `children`, `each_child`
239
+
240
+ - `children`, `each_child`
168
241
 
169
242
  #### Enumerable
170
- - `any?`, `all?`, `none?`, `one?` (with pattern argument)
243
+
244
+ - `any?`, `all?`, `none?`, `one?` (with pattern argument)
171
245
 
172
246
  #### Hash
173
- - `slice`
174
- - `transform_keys`
247
+
248
+ - `slice`
249
+ - `transform_keys`
175
250
 
176
251
  #### Integer
177
- - `sqrt`
178
- - `allbits?`, `anybits?` and `nobits?`
252
+
253
+ - `sqrt`
254
+ - `allbits?`, `anybits?` and `nobits?`
179
255
 
180
256
  #### Kernel
181
- - `yield_self`
257
+
258
+ - `yield_self`
182
259
 
183
260
  #### Module
184
- - `attr`, `attr_accessor`, `attr_reader`, `attr_writer` (now public)
185
- - `define_method`, `alias_method`, `undef_method`, `remove_method` (now
186
- public)
261
+
262
+ - `attr`, `attr_accessor`, `attr_reader`, `attr_writer` (now public)
263
+ - `define_method`, `alias_method`, `undef_method`, `remove_method` (now
264
+ public)
187
265
 
188
266
  #### String
189
- - `delete_prefix`, `delete_prefix!`
190
- - `delete_suffix`, `delete_suffix!`
191
- - `undump`
267
+
268
+ - `delete_prefix`, `delete_prefix!`
269
+ - `delete_suffix`, `delete_suffix!`
270
+ - `undump`
192
271
 
193
272
  #### Struct
194
- - `new` (with `keyword_init: true`)
273
+
274
+ - `new` (with `keyword_init: true`)
195
275
 
196
276
  ## Ruby 2.4 backports
197
277
 
198
278
  #### Comparable
199
- - `clamp`
279
+
280
+ - `clamp`
200
281
 
201
282
  #### Enumerable
202
- - `sum`
203
- - `uniq`
283
+
284
+ - `sum`
285
+ - `uniq`
204
286
 
205
287
  #### Hash
206
- - `compact`, `compact!`
207
- - `transform_values`, `transform_values!`
288
+
289
+ - `compact`, `compact!`
290
+ - `transform_values`, `transform_values!`
291
+
292
+ #### Queue
293
+
294
+ - `close`, `closed?`
208
295
 
209
296
  #### Regexp
210
- - `match?`
297
+
298
+ - `match?`
211
299
 
212
300
  #### String
213
- - `match?`
214
301
 
215
- #### FalseClass, Fixnum, Float, NilClass, TrueClass
216
- - `dup`
302
+ - `match?`
303
+ - `unpack1`
304
+
305
+ #### FalseClass, Fixnum, Bignum, Float, NilClass, TrueClass
306
+
307
+ - `dup`
217
308
 
218
309
  ## Ruby 2.3 backports
219
310
 
220
311
  #### Array
221
- - `bsearch_index`
222
- - `dig`
312
+
313
+ - `bsearch_index`
314
+ - `dig`
223
315
 
224
316
  #### Enumerable
225
- - `chunk_while`
226
- - `grep_v`
317
+
318
+ - `chunk_while`
319
+ - `grep_v`
227
320
 
228
321
  #### Hash
229
- - `dig`
230
- - `fetch_values`
231
- - `to_proc`
232
- - <=, <, >=, >
322
+
323
+ - `dig`
324
+ - `fetch_values`
325
+ - `to_proc`
326
+ - <=, <, >=, >
233
327
 
234
328
  #### Numeric
235
- - `negative?`
236
- - `positive?`
329
+
330
+ - `negative?`
331
+ - `positive?`
237
332
 
238
333
  #### String
239
- - unary + and -
334
+
335
+ - unary + and -
240
336
 
241
337
  #### Struct
242
- - `dig`
338
+
339
+ - `dig`
243
340
 
244
341
  ## Ruby 2.2 backports
245
342
 
246
343
  #### Enumerable
247
- - `slice_after`
248
- - `slice_when`
344
+
345
+ - `slice_after`
346
+ - `slice_when`
249
347
 
250
348
  #### Float
251
- - `prev_float`
252
- - `next_float`
349
+
350
+ - `prev_float`
351
+ - `next_float`
253
352
 
254
353
  #### Kernel
255
- - `itself`
354
+
355
+ - `itself`
256
356
 
257
357
  #### Method
258
- - `curry`
259
- - `super_method`
358
+
359
+ - `curry`
360
+ - `super_method`
260
361
 
261
362
  #### String
262
- - `unicode_normalize`
263
- - `unicode_normalize!`
264
- - `unicode_normalize?`
363
+
364
+ - `unicode_normalize`
365
+ - `unicode_normalize!`
366
+ - `unicode_normalize?`
265
367
 
266
368
  ## Ruby 2.1 backports
267
369
 
268
370
  #### Array
269
- - `to_h`
371
+
372
+ - `to_h`
270
373
 
271
374
  #### Bignum
272
- - `bit_length`
375
+
376
+ - `bit_length`
273
377
 
274
378
  #### Enumerable
275
- - `to_h`
379
+
380
+ - `to_h`
276
381
 
277
382
  #### Fixnum
278
- - `bit_length`
383
+
384
+ - `bit_length`
279
385
 
280
386
  #### Module
281
- - `include` (now public)
387
+
388
+ - `include` (now public)
389
+ - `singleton_class?`
282
390
 
283
391
  ## Ruby 2.0 backports
284
392
 
285
393
  #### Array
286
- - `bsearch`
394
+
395
+ - `bsearch`
287
396
 
288
397
  #### Enumerable
289
- - `lazy`
398
+
399
+ - `lazy`
290
400
 
291
401
  #### Enumerator::Lazy
292
- - all methods
402
+
403
+ - all methods
293
404
 
294
405
  #### Hash
295
- - `default_proc=` (with nil argument)
296
- - `to_h`
406
+
407
+ - `default_proc=` (with nil argument)
408
+ - `to_h`
297
409
 
298
410
  #### `nil.to_h`
299
411
 
300
412
  #### Range
301
- - `bsearch`
413
+
414
+ - `bsearch`
302
415
 
303
416
  #### Struct
304
- - `to_h`
417
+
418
+ - `to_h`
305
419
 
306
420
  ## Ruby 1.9.3 backports
307
421
 
308
422
  #### File
309
- - `NULL`
423
+
424
+ - `NULL`
310
425
 
311
426
  #### IO
312
- - `advise` (acts as a noop)
313
- - `write`, `binwrite`
427
+
428
+ - `advise` (acts as a noop)
429
+ - `write`, `binwrite`
314
430
 
315
431
  #### String
316
- - `byteslice`
317
- - `prepend`
432
+
433
+ - `byteslice`
434
+ - `prepend`
318
435
 
319
436
  ## Ruby 1.9.2 backports
320
437
 
321
438
  #### Array
322
- - `rotate, rotate!`
323
- - `keep_if, select!`
324
- - `product` (with block)
325
- - `repeated_combination`, `repeated_permutation`
326
- - `sort_by!`
327
- - `uniq, uniq!` (with block)
439
+
440
+ - `rotate, rotate!`
441
+ - `keep_if, select!`
442
+ - `product` (with block)
443
+ - `repeated_combination`, `repeated_permutation`
444
+ - `sort_by!`
445
+ - `uniq, uniq!` (with block)
328
446
 
329
447
  #### Complex
330
- - `to_r`
448
+
449
+ - `to_r`
331
450
 
332
451
  #### Dir
333
- - `home`
452
+
453
+ - `home`
334
454
 
335
455
  #### Enumerable
336
- - `chunk`
337
- - `flat_map`, `collect_concat`
338
- - `join`
339
- - `slice_before`
456
+
457
+ - `chunk`
458
+ - `flat_map`, `collect_concat`
459
+ - `join`
460
+ - `slice_before`
340
461
 
341
462
  #### Float::INFINITY, NAN
342
463
 
343
464
  #### Hash
344
- - `keep_if`, `select!`
465
+
466
+ - `keep_if`, `select!`
345
467
 
346
468
  #### Object
347
- - `singleton_class`
469
+
470
+ - `singleton_class`
348
471
 
349
472
  #### Random (new class)
350
473
 
351
- *Note*: The methods of `Random` can't be required individually; the class
474
+ _Note_: The methods of `Random` can't be required individually; the class
352
475
  can only be required whole with `require 'backports/1.9.2/random'`.
353
476
 
354
477
  ## Ruby 1.9.1 backports
355
478
 
356
479
  Additionally, the following Ruby 1.9 features have been backported:
480
+
357
481
  #### Array
358
- - `try_convert`
359
- - `sample`
482
+
483
+ - `try_convert`
484
+ - `sample`
360
485
 
361
486
  #### Enumerable
362
- - `each_with_object`
363
- - `each_with_index` (with arguments)
487
+
488
+ - `each_with_object`
489
+ - `each_with_index` (with arguments)
364
490
 
365
491
  #### Enumerator
366
- - `new` (with block)
492
+
493
+ - `new` (with block)
367
494
 
368
495
  #### File
369
- - `binread`
370
- - `to_path`
371
- - All class methods accepting filenames will accept files or anything
372
- with a `#to_path` method.
373
- - `File.open` accepts an options hash.
496
+
497
+ - `binread`
498
+ - `to_path`
499
+ - All class methods accepting filenames will accept files or anything
500
+ with a `#to_path` method.
501
+ - `File.open` accepts an options hash.
374
502
 
375
503
  #### Float
376
- - `round`
504
+
505
+ - `round`
377
506
 
378
507
  #### Hash
379
- - `assoc`, `rassoc`
380
- - `key`
381
- - `try_convert`
382
- - `default_proc=`
508
+
509
+ - `assoc`, `rassoc`
510
+ - `key`
511
+ - `try_convert`
512
+ - `default_proc=`
383
513
 
384
514
  #### Integer
385
- - `magnitude`
386
- - `round`
515
+
516
+ - `magnitude`
517
+ - `round`
387
518
 
388
519
  #### IO
389
- - `bin_read`
390
- - `try_convert`
391
- - `ungetbyte`
392
- - `IO.open` accepts an options hash.
520
+
521
+ - `bin_read`
522
+ - `try_convert`
523
+ - `ungetbyte`
524
+ - `IO.open` accepts an options hash.
393
525
 
394
526
  #### Kernel
395
- - `require_relative`
527
+
528
+ - `require_relative`
396
529
 
397
530
  #### Math
398
- - `log` (with base)
399
- - `log2`
531
+
532
+ - `log` (with base)
533
+ - `log2`
400
534
 
401
535
  #### Numeric
402
- - `round`
536
+
537
+ - `round`
403
538
 
404
539
  #### Object
405
- - `define_singleton_method`
406
- - `public_method`
407
- - `public_send`
540
+
541
+ - `define_singleton_method`
542
+ - `public_method`
543
+ - `public_send`
408
544
 
409
545
  #### Proc
410
- - `yield`
411
- - `lambda?`
412
- - `curry`
413
- - `===`
546
+
547
+ - `yield`
548
+ - `lambda?`
549
+ - `curry`
550
+ - `===`
414
551
 
415
552
  #### Range
416
- - `cover?`
553
+
554
+ - `cover?`
417
555
 
418
556
  #### Regexp
419
- - `try_convert`
557
+
558
+ - `try_convert`
420
559
 
421
560
  #### String
422
- - `ascii_only?`
423
- - `chr`
424
- - `clear`
425
- - `codepoints`, `each_codepoint`
426
- - `get_byte`, `set_byte`
427
- - `ord`
428
- - `try_convert`
561
+
562
+ - `ascii_only?`
563
+ - `chr`
564
+ - `clear`
565
+ - `codepoints`, `each_codepoint`
566
+ - `get_byte`, `set_byte`
567
+ - `ord`
568
+ - `try_convert`
429
569
 
430
570
  `Enumerator` can be accessed directly (instead of `Enumerable::Enumerator`)
431
571
 
432
- To include *only* these backports and those of the 1.8 line, `require
433
- "backports/1.9.1"`.
572
+ To include _only_ these backports and those of the 1.8 line, `require "backports/1.9.1"`.
434
573
 
435
574
  Moreover, a pretty good imitation of `BasicObject` is available, but since it
436
575
  is only an imitation, it must be required explicitly:
@@ -444,8 +583,11 @@ Complete Ruby 1.8.7 backporting (core language). Refer to the official list of
444
583
  backports!
445
584
 
446
585
  Only exceptions:
586
+
447
587
  #### String#gsub (the form returning an enumerator)
448
- #### GC.stress= (not implemented)
588
+
589
+ #### GC.stress= (not implemented)
590
+
449
591
  #### Array#choice (removed in 1.9, use 1.9.1's Array#sample instead)
450
592
 
451
593
  ## Libraries
@@ -457,7 +599,9 @@ The backports would be automatically used after requiring 'backports/std_lib' bu
457
599
  The following libraries are up to date with Ruby 1.9.3:
458
600
 
459
601
  #### Matrix
602
+
460
603
  #### Prime
604
+
461
605
  #### Set
462
606
 
463
607
  The following library is to date with Ruby 2.0.0:
@@ -468,6 +612,7 @@ I am aware of the following backport gem, which probably won't make it into
468
612
  this gem:
469
613
 
470
614
  #### Net::SMTP for Ruby 1.8.6:
615
+
471
616
  [smtp_tls](http://seattlerb.rubyforge.org/smtp_tls/)
472
617
 
473
618
  Requiring backports for a given version of Ruby will also load
@@ -480,13 +625,16 @@ but could be useful in some projects. It is possible to request such
480
625
  incompatible changes. Backports currently supports the following:
481
626
 
482
627
  #### Hash
483
- - `select` (returns a Hash instead of an Array)
628
+
629
+ - `select` (returns a Hash instead of an Array)
484
630
 
485
631
  #### Enumerable / Array
486
- - `map` (returns an enumerator when called without a block)
632
+
633
+ - `map` (returns an enumerator when called without a block)
487
634
 
488
635
  #### String
489
- - `length`, `size` (for UTF-8 support)
636
+
637
+ - `length`, `size` (for UTF-8 support)
490
638
 
491
639
  These must be imported in addition to the backports gem, for example:
492
640
 
@@ -498,8 +646,11 @@ These must be imported in addition to the backports gem, for example:
498
646
  Thanks for the bug reports and patches, in particular the repeat offenders:
499
647
 
500
648
  #### Arto Bendiken ( [bendiken](http://github.com/bendiken) )
649
+
501
650
  #### Konstantin Haase ( [rkh](https://github.com/rkh) )
651
+
502
652
  #### Roger Pack ( [rdp](http://github.com/rdp) )
653
+
503
654
  #### Victor Shepelev ( [zverok](http://github.com/zverok) )
504
655
 
505
656
  ## Contributing
@@ -525,5 +676,4 @@ Failures that are acceptable are added the to `tags` file.
525
676
  LICENSE file.
526
677
 
527
678
  Author
528
- : Marc-André Lafortune
529
-
679
+ : Marc-André Lafortune