Feature #9614

Updated by nobu (Nobuyoshi Nakada) over 5 years ago

Hi matz, I would like your permission to remove the order preservation from
any or all of the following currently implemented using `st_table`: st_table:

* method tables
* global symbols (`Symbol.all_symbols`) (Symbol.all_symbols)
* constant tables
* instance variable tables
* `global_variables` global_variables method
* `Thread#keys` Thread#keys
* anything besides the `Hash` Hash class

I am currently working on a patch series to reduce internal memory usage,
so far I have only converted three pieces:

1. 1) method tables (~200K reduction)
2. 2) symbol table (`global_symbols.`{`id_str`,`sym_id`}) (global_symbols.{id_str,sym_id}) (~200K)
3. `frozen_strings` 3) frozen_strings (~100K)

n.b. `frozen_strings` frozen_strings ordering is never exposed to users, so I expect
it to be OK.

Memory reduction is just based on "`ruby "ruby -e exit`" exit" (which loads RubyGems);
bigger programs with more methods/symbols will save more memory.

Work-in-progress patches attached (0002 describes implementation details)