diff --git a/rfcs/read-only-environment.md b/rfcs/read-only-environment.md index 26b6555c..cd1275f2 100644 --- a/rfcs/read-only-environment.md +++ b/rfcs/read-only-environment.md @@ -12,16 +12,20 @@ getfenv and setfenv there are outlined cases where reading the environment is us Increased performance can be achieved for transpilers written in Luau that may not be able to have a static environment created to access functions from or cant directly transpile 1:1. Similarly interpreters written in Luau can benefit from being able to access functions without deoptimization, making other optimizations still active. -... - ## Design -... +A safe way to access the environment is with a read-only table with `__index` and `__iter` metamethods. + +a) `_ENV` table + +A read-only global table with metamethods that point to `LUA_ENVIRONINDEX`. + +b) `getenv` or `getrenv` function + +Works identically to `getfenv` but only provides read-only access to the function's environment. ## Drawbacks -... +Type-checking can be difficult. -## Alternatives - -... +Roblox's marketplace currently hides assets that use `getfenv` so it would need to be updated to hide assets with `_ENV`/`getenv`/`getrenv`.