# Reset the whole state

**URL:** <https://www.ruby-forum.com/t/reset-the-whole-state/140404>\
**Category:** Ruby\
**Created:** [June 13, 2008, 5:02pm UTC](https://www.ruby-forum.com/t/reset-the-whole-state/140404 "2008-06-13T17:02:13Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Remi\_Gillig](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/439d5e/32.png) [@Remi\_Gillig](https://www.ruby-forum.com/u/Remi_Gillig)\
**Post date:** [June 13, 2008, 5:02pm UTC](https://www.ruby-forum.com/t/reset-the-whole-state/140404/1 "2008-06-13T17:02:13Z")

</div>

Hello,

I just seached about this problem and found two 2 years old threads :  
[http://groups.google.com/group/comp.lang.ruby/browse\_thread/thread/875a099efd08f70d](http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/875a099efd08f70d)  
[http://groups.google.com/group/comp.lang.ruby/browse\_thread/thread/3e6fa1a935e50697](http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/3e6fa1a935e50697)

Each of these talk about how to reset the whole Ruby state, like  
starting from a clean interpreter but without rerunning it. More or  
less like emptying everything and putting back the predefined  
constants, modules and classes.

The first thread has a solution which is using remove\_const to not be  
able to create classes anymore but this actually does not work  
properly because you can still do this :

# class Hello end

# $hello = Hello

# Object.instance\_eval(“remove\_const :Hello”)

# h = $hello.new

I’m quite surprised that there was nothing about this in over 2 years  
of development. Maybe there are some explanation inside the Ruby  
Hacking Guide but most of it is in Japanese.

Anybody has any idea on how to implement this? Thanks.

Remi Gillig.

---

<div class="post-metadata">

**Author:** ![Remi\_Gillig](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/439d5e/32.png) [@Remi\_Gillig](https://www.ruby-forum.com/u/Remi_Gillig)\
**Post date:** [June 13, 2008, 6:10pm UTC](https://www.ruby-forum.com/t/reset-the-whole-state/140404/2 "2008-06-13T18:10:57Z")

</div>

On 13.06.2008 16:57, Remi Gillig wrote:

> Hacking Guide but most of it is in Japanese.
> 
> Anybody has any idea on how to implement this? Thanks.

I am wondering what you need that for. I guess removal is pretty  
complex and thus time consuming because even a freshly started Ruby  
interpreter does contain some classes and method definitions. And  
creating a process isn’t that expensive.

Having said that, maybe you can look at how Ruby can be embedded in C  
programs. Then you could create a new initial context if something like  
that exists.

Cheers

robert

---

<div class="post-metadata">

**Author:** ![Remi\_Gillig](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/439d5e/32.png) [@Remi\_Gillig](https://www.ruby-forum.com/u/Remi_Gillig)\
**Post date:** [June 14, 2008, 12:50pm UTC](https://www.ruby-forum.com/t/reset-the-whole-state/140404/3 "2008-06-14T12:50:52Z")

</div>

On Jun 13, 6:09 pm, Robert K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Each of these talk about how to reset the whole Ruby state, like
> > 
> > # h = $hello.new
> 
> creating a process isn’t that expensive.
> 
> Having said that, maybe you can look at how Ruby can be embedded in C  
> programs. Then you could create a new initial context if something like  
> that exists.
> 
> Cheers
> 
> ```
> robert
> 
> ```

It’s actually embedding that I’m using right now. I am using Ruby as a  
script language for a code editor to perform operations on text etc.  
There is a script which is loaded when the program loads which  
contains  
some classes defined by the user for example. I would like to be able  
to  
reload this script without having warnings about constants, having  
classes mixed together if the user changed the name of a function  
between the loadings or still having the same global variables.

Remi Gillig.

---

<div class="post-metadata">

**Author:** ![Remi\_Gillig](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/439d5e/32.png) [@Remi\_Gillig](https://www.ruby-forum.com/u/Remi_Gillig)\
**Post date:** [February 9, 2010, 10:40pm UTC](https://www.ruby-forum.com/t/reset-the-whole-state/140404/4 "2010-02-09T22:40:08Z")

</div>

Hi Remi,

I have the same approach that you describe in your post regarding  
embedded Ruby interpreter. I did some trial based on dl library in C to  
dynamically open and close Ruby interpreter but I had some issue due to  
dlclose() behavior when a so library is loaded into Ruby.

Do you find any solution to restart your Ruby interpreter?

Thanks,  
David

Remi Gillig wrote:

> On Jun 13, 6:09 pm, Robert K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > > Each of these talk about how to reset the whole Ruby state, like
> > > 
> > > # h = $hello.new
> > 
> > creating a process isn’t that expensive.
> > 
> > Having said that, maybe you can look at how Ruby can be embedded in C  
> > programs. Then you could create a new initial context if something like  
> > that exists.
> > 
> > Cheers
> > 
> > ```
> > robert
> > 
> > ```
> 
> It’s actually embedding that I’m using right now. I am using Ruby as a  
> script language for a code editor to perform operations on text etc.  
> There is a script which is loaded when the program loads which  
> contains  
> some classes defined by the user for example. I would like to be able  
> to  
> reload this script without having warnings about constants, having  
> classes mixed together if the user changed the name of a function  
> between the loadings or still having the same global variables.
> 
> Remi Gillig.
