mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
Update read-only-environment.md
This commit is contained in:
parent
d9d3b1dc20
commit
7ac31cfd8c
1 changed files with 4 additions and 17 deletions
|
@ -2,32 +2,19 @@
|
|||
|
||||
## Summary
|
||||
|
||||
Add a way to access a read-only version of the environment without disabling `safeenv`.
|
||||
Add `_ENV` as a safe alternative to `getfenv`.
|
||||
|
||||
## Motivation
|
||||
|
||||
There are valid use cases for accessing the environment in a read-only way. As defined in the [RFC](https://github.com/Roblox/luau/blob/master/rfcs/deprecate-getfenv-setfenv.md) for deprecating
|
||||
getfenv and setfenv there are outlined cases where reading the environment is useful.
|
||||
|
||||
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.
|
||||
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.
|
||||
A read-only global table `_ENV` with clones of all base functions and libraries.
|
||||
|
||||
## Drawbacks
|
||||
|
||||
Type-checking can be difficult.
|
||||
|
||||
Roblox's marketplace currently hides assets that use `getfenv` so it would need to be updated to hide assets with `_ENV`/`getenv`/`getrenv`.
|
||||
|
||||
Environments can have metamethods of their own which may not interface well with a read-only `getenv`/`getrenv`.
|
||||
Roblox's marketplace currently hides assets that use `getfenv` so it would need to be updated to hide assets with `_ENV`.
|
||||
|
|
Loading…
Add table
Reference in a new issue