aboutsummaryrefslogtreecommitdiff
path: root/lgc.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2018-11-01 13:21:00 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2018-11-01 13:21:00 -0300
commite8c779736f3029df353038352c14c8ab63728811 (patch)
tree23f75fa455ec333677650198cd889b187228b735 /lgc.h
parent2fc6b55dae7a120b4272ca0e9c356d1f96053bd9 (diff)
downloadlua-e8c779736f3029df353038352c14c8ab63728811.tar.gz
lua-e8c779736f3029df353038352c14c8ab63728811.tar.bz2
lua-e8c779736f3029df353038352c14c8ab63728811.zip
Removed internal cache for closures
The mechanism of "caching the last closure created for a prototype to try to reuse it the next time a closure for that prototype is created" was removed. There are several reasons: - It is hard to find a natural example where this cache has a measurable impact on performance. - Programmers already perceive closure creation as something slow, so they tend to avoid it inside hot paths. (Any case where the cache could reuse a closure can be rewritten predefining the closure in some variable and using that variable.) - The implementation was somewhat complex, due to a bad interaction with the generational collector. (Typically, new closures are new, while prototypes are old. So, the cache breaks the invariant that old objects should not point to new ones.)
Diffstat (limited to 'lgc.h')
-rw-r--r--lgc.h4
1 files changed, 0 insertions, 4 deletions
diff --git a/lgc.h b/lgc.h
index e0a8806b..6b1c2861 100644
--- a/lgc.h
+++ b/lgc.h
@@ -164,9 +164,6 @@
164 (isblack(p) && iswhite(o)) ? \ 164 (isblack(p) && iswhite(o)) ? \
165 luaC_barrier_(L,obj2gco(p),obj2gco(o)) : cast_void(0)) 165 luaC_barrier_(L,obj2gco(p),obj2gco(o)) : cast_void(0))
166 166
167#define luaC_protobarrier(L,p,o) \
168 (isblack(p) ? luaC_protobarrier_(L,p) : cast_void(0))
169
170LUAI_FUNC void luaC_fix (lua_State *L, GCObject *o); 167LUAI_FUNC void luaC_fix (lua_State *L, GCObject *o);
171LUAI_FUNC void luaC_freeallobjects (lua_State *L); 168LUAI_FUNC void luaC_freeallobjects (lua_State *L);
172LUAI_FUNC void luaC_step (lua_State *L); 169LUAI_FUNC void luaC_step (lua_State *L);
@@ -175,7 +172,6 @@ LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency);
175LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz); 172LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz);
176LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v); 173LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v);
177LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o); 174LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o);
178LUAI_FUNC void luaC_protobarrier_ (lua_State *L, Proto *p);
179LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt); 175LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt);
180LUAI_FUNC void luaC_changemode (lua_State *L, int newmode); 176LUAI_FUNC void luaC_changemode (lua_State *L, int newmode);
181 177