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.