Now, I add "disable RGENGC feature".
A macro USE_RGENGC in include/ruby/ruby.h enable/disable RGENGC completely.

If performance of RGENGC is not enough, then it can be disabled easily.

It is a big change. So I hope someone verify our algorithm and approach.
And merge it ASAP.

---
Note:
After discussion with Magnus Holm (*1), I changed OBJ_WB(a, b) interface
to OBJ_WRITE(a, ptr, b). This interface do two:
 (1) *ptr = b
 (2) make write barrier with a and b

In some cases (*2), we can't get ptr to store b, so I add another
interface OBJ_CONNECT(a, oldval, b). This only makes wb.

(*1) [ruby-core:54671] Re: [ruby-trunk - Feature #8339][Open]
Introducing Geneartional Garbage Collection for CRuby/MRI

(*2) st_insert()

Thank you,
Koichi

(2013/04/28 3:19), ko1 (Koichi Sasada) wrote:
> 
> Issue #8339 has been reported by ko1 (Koichi Sasada).
> 
> ----------------------------------------
> Feature #8339: Introducing Geneartional Garbage Collection for CRuby/MRI
> https://bugs.ruby-lang.org/issues/8339
> 
> Author: ko1 (Koichi Sasada)
> Status: Open
> Priority: Normal
> Assignee: ko1 (Koichi Sasada)
> Category: core
> Target version: current: 2.1.0
> 
> 
> |  One day a Rubyist came to Koichi and said, "I understand how to improve 
> |  CRuby's performance. We must use a generational garbage collector." Koichi
> |  patiently told the Rubyist the following story: "One day a Rubyist came 
> |  to Koichi and said, 'I understand how to improve CRuby's performance..."
> |  [This story is an homage of an introduction in a paper:
> |   "A real-time garbage collector based on the lifetimes of objects"
> |   (by Henry Lieberman, Carl Hewitt)
> |   <http://dl.acm.org/citation.cfm?id=358147&CFID=321285546&CFTOKEN=10963356>]
> 
> We Heroku Matz team developed a new generational mark&sweep garbage
> collection algorithm RGenGC for CRuby/MRI.
> (correctly speaking, it is generational marking algorithm)
> 
> What goods are:
> 
>   * Reduce marking time (yay!)
>   * My algorithm doesn't introduce any incompatibility into normal C-exts.
>   * Easy to development
> 
> Please read more details in attached PDF file.
> Code is: https://github.com/ko1/ruby/tree/rgengc
> 
> How about to introduce this new GC algorithm/implementation into Ruby 2.1.0?
> 
> Thanks,
> Koichi


-- 
// SASADA Koichi at atdot dot net