README.md in iseq_collector-0.1.0 vs README.md in iseq_collector-0.2.0

- old
+ new

@@ -1,11 +1,16 @@ # IseqCollector -Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/iseq_collector`. To experiment with that code, run `bin/console` for an interactive prompt. +This gem introduce several methdos to `ObjectSpace` to operate all of iseq objects in a process. -TODO: Delete this and the text above, and describe your gem +## Background +Ruby (MRI) 2.2 and erlier, all of bytecode (iseq: instruction sequence) are `RubyVM::InstructionSequence` objects and we can touch them with `ObjectSpace.each_object` method. +However Ruby 2.3 and later does not expose iseqs by `RubyVM::InstructionSequence`. You need to use `RubyVM::InstructionSequence.of(proc or method object)` to get `RubyVM::InstructionSequence` and it is impossible to get all of iseqs in a process. + +This gem provides `ObjectSpace.each_iseq`, `ObjectSpace.count_iseq` and `ObjectSpace.memsize_of_all_iseq` to get all of iseqs in a process for Ruby 2.3, 2.4. Ruby 2.5 will provide same feature in `objspace` external lib. + ## Installation Add this line to your application's Gemfile: ```ruby @@ -20,10 +25,14 @@ $ gem install iseq_collector ## Usage -TODO: Write usage instructions here +`require 'iseq_collector'` adds the following singleton methods to `ObjectSpace` module. + +* `ObjectSpace.each_iseq{|iseq| ...}` +* `ObjectSpace.count_iseq #=> Integer` +* `ObjectSpace.memsize_of_all_iseq #=> Integer` (this feature can be implemented by `ObjectSpace.each_iseq`) ## Development After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.