Project

General

Profile

Actions

Feature #6733

open

New inspect framework

Added by akr (Akira Tanaka) over 12 years ago. Updated almost 3 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:46442]

Description

After we discussed http://bugs.ruby-lang.org/issues/6291 at a developer meeting,
we re-realized new inspect framework may be useful.

Problem:

  • inspect method may generate too long string but sometimes whole string is not required.
    For example, first 70 characters are enough for error messages (backtrace).
  • inspect can't know a encoding to be expected.
  • inspect generates may short strings and discard them immediately.

If we have a new method, inspect_to(buffer), and
it (or overridden method in subclass) adds the inspected result to buffer,
we can solve above problems.
buffer has a method, <<.
It may be a string, IO or other object.

For too long string, buffer itself can throw (or raise) when buffered output is reached to a specified limit.

For encoding, buffer can record an encoding.
(p method creates a buffer object using $stdout's encoding.)

For small strings, in C level, we can create a rb_buffer_add(VALUE buffer, const char *p, long len) and
it don't need to allocate a String object.

This is big change but we can preserve compatibility by following default inspect_to method:

class Object
def inspect_to(buffer)
buffer << self.inspect
end
end

If legacy class which has inspect but not inspect_to,
Object#inspect_to calls inspect and use the result.


Related issues 2 (1 open1 closed)

Related to Ruby master - Feature #6783: Infinite loop in inspect, not overriding inspect, to_s, and no known circular references. Stepping into inspect in debugger locks it up with 100% CPU.OpenActions
Related to Ruby master - Feature #18285: NoMethodError#message uses a lot of CPU/is really expensive to callClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0