From: Charlie Somerville Date: 2013-05-20T18:21:45+09:00 Subject: [ruby-core:55083] Re: [ruby-trunk - Feature #8426][Open] Implement class hierarchy method caching --5199eb22_614fd4a1_168 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Monday, 20 May 2013 at 1:35 PM, SASADA Koichi wrote: > Could you explain the data stracture? Patch seems to introduce new data > structure `sparse array'. What is this and how to use it on this patch? > > funny_falcon explained this well. It's significantly faster in this case when compared to st_table. > And another consern is verification mechanism of the result. Complex > methoc caching mechanism introduces bugs because: > - Everyone make bugs. > - If someone who doesn't care method cache mechanism adds new > core feature such as refinement and so on, it will break assumption > about method caching. > And this bug is difficult to find out because they may be rare. > > My proposal is to add verify mode (on/off by macro, of course off as > default) which check the cached result using a naive method search. > > #define verify 0 > result = ... > #if verify > if (naive_method_search() != result) rb_bug(...); > #endif > > It will help debugging. I think this is a reasonable proposal. I'll add it. > # minor comment: `sa_' prefix is too short :P What would you suggest? Ruby already exports symbols with short prefixes, eg. st_. > # minor comment: change of ext/extmk.rb seems not needed > https://github.com/charliesome/ruby/compare/trunk...klasscache-trunk#L4L219 > > Whoops, fixed! Thanks for pointing this out. > # minor comment: using uint64_t directly is not preferable. > for example: > #if HAVE_UINT64_T > typedef version_t uint64_t; > #else > typedef version_t uint_t; > #endif > > This is also a reasonable suggestion. I have introduced a new vm_state_version_t typedef. Thanks for your feedback! --5199eb22_614fd4a1_168 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline
On M= onday, 20 May 2013 at 1:35 PM, SASADA Koichi wrote:
Could you explain the data stracture=3F Patch seems t= o introduce new data
structure =60sparse array'. What= is this and how to use it on this patch=3F
funny=5Ffalcon explained this well. It's significantly faste= r in this case when compared to st=5Ftable.
 
And another consern is verificati= on mechanism of the result. Complex
methoc caching me= chanism introduces bugs because:
- Everyone make bugs.
- If someone who doesn't care method cache mechanism adds new
core feature such as refinement and so on, it will break assumption
about method caching.
And this bug is difficult to fi= nd out because they may be rare.

My proposal is = to add verify mode (on/off by macro, of course off as
default) = which check the cached result using a naive method search.

=
=23define verify 0
result =3D ...
=23= if verify
if (naive=5Fmethod=5Fsearch() =21=3D result) rb=5F= bug(...);
=23endif

It will help debu= gging.
I think this is a reason= able proposal. I'll add it. 
 
=23 minor comment: =60sa=5F' prefix is too sh= ort :P
What would you suggest=3F Ruby already exports sy= mbols with short prefixes, eg. st=5F. 
 
=23 minor co= mment: change of ext/extmk.rb seems not needed
Whoops, fixed=21 = Thanks for pointing this out. 
 
=23 minor comment: u= sing uint64=5Ft directly is not preferable.
for example:
=23if HAVE=5FUINT64=5FT
typedef version=5Ft uint64=5F= t;
=23else
typedef version=5Ft uint=5Ft;
<= div> =23endif
This is also a r= easonable suggestion. I have introduced a new vm=5Fstate=5Fversion=5Ft ty= pedef.

Thanks for your feedback=21
--5199eb22_614fd4a1_168--