mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[Feature #13884] Reduce number of memory allocations for "and", "or" and "diff" operations on small arrays Very often, arrays are used to filter parameters and to select interesting items from 2 collections and very often these collections are small enough, for example: ```ruby SAFE_COLUMNS = [:id, :title, :created_at] def columns @all_columns & SAFE_COLUMNS end ``` In this patch, I got rid of unnecessary memory allocations for small arrays when "and", "or" and "diff" operations are performed. name | HEAD | PATCH -----------------+------:+------: array_small_and | 0.615 | 0.263 array_small_diff | 0.676 | 0.282 array_small_or | 0.953 | 0.463 name | PATCH -----------------+------: array_small_and | 2.343 array_small_diff | 2.392 array_small_or | 2.056 name | HEAD | PATCH -----------------+------:+------: array_small_and | 1.429 | 1.005 array_small_diff | 1.493 | 0.878 array_small_or | 1.672 | 1.152 name | PATCH -----------------+------: array_small_and | 1.422 array_small_diff | 1.700 array_small_or | 1.452 Author: Dmitry Bochkarev <dimabochkarev@gmail.com> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60057 b2dd03c8-39d4-4d8f-98ff-823fe69b080e |
||
|---|---|---|
| .. | ||
| argf | ||
| array | ||
| basicobject | ||
| bignum | ||
| binding | ||
| builtin_constants | ||
| class | ||
| comparable | ||
| complex | ||
| dir | ||
| encoding | ||
| enumerable | ||
| enumerator | ||
| env | ||
| exception | ||
| false | ||
| fiber | ||
| file | ||
| filetest | ||
| fixnum | ||
| float | ||
| gc | ||
| hash | ||
| integer | ||
| io | ||
| kernel | ||
| main | ||
| marshal | ||
| matchdata | ||
| math | ||
| method | ||
| module | ||
| mutex | ||
| nil | ||
| numeric | ||
| objectspace | ||
| proc | ||
| process | ||
| random | ||
| range | ||
| rational | ||
| regexp | ||
| signal | ||
| string | ||
| struct | ||
| symbol | ||
| systemexit | ||
| thread | ||
| threadgroup | ||
| time | ||
| true | ||
| unboundmethod | ||