Sha256: e0fe9c6c47c26c5ff7cd464f2d3a3c6ef291aacb7c4d7ae008edf3be45e29af9

Contents?: true

Size: 1.99 KB

Versions: 2

Compression:

Stored size: 1.99 KB

Contents

# IseqCollector

This gem introduce several methdos to `ObjectSpace` to operate all of iseq objects in a process.

## 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
gem 'iseq_collector'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install iseq_collector

## Usage

`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.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/iseq_collector.


## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
iseq_collector-0.3.0 README.md
iseq_collector-0.2.0 README.md