Update compatibility.md

Add a note on light C functions that Lua 5.2 added; suggested by #512.
This commit is contained in:
Arseny Kapoulkine 2022-06-01 14:19:17 -04:00 committed by GitHub
parent 61766a692c
commit 10ed02470c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 0 deletions

View File

@ -69,6 +69,7 @@ Sandboxing challenges are [covered in the dedicated section](sandbox).
| `\0` in patterns | ✔️ | | | `\0` in patterns | ✔️ | |
| `bit32` library | ✔️ | | | `bit32` library | ✔️ | |
| `string.gsub` is stricter about using `%` on special characters only | ✔️ | | | `string.gsub` is stricter about using `%` on special characters only | ✔️ | |
| light C functions | 😞 | this changes semantics of fenv on C functions and has complex implications wrt runtime performance |
Two things that are important to call out here are various new metamethods for tables and yielding in metamethods. In both cases, there are performance implications to supporting this - our implementation is *very* highly tuned for performance, so any changes that affect the core fundamentals of how Lua works have a price. To support yielding in metamethods we'd need to make the core of the VM more involved, since almost every single "interesting" opcode would need to learn how to be resumable - which also complicates future JIT/AOT story. Metamethods in general are important for extensibility, but very challenging to deal with in implementation, so we err on the side of not supporting any new metamethods unless a strong need arises. Two things that are important to call out here are various new metamethods for tables and yielding in metamethods. In both cases, there are performance implications to supporting this - our implementation is *very* highly tuned for performance, so any changes that affect the core fundamentals of how Lua works have a price. To support yielding in metamethods we'd need to make the core of the VM more involved, since almost every single "interesting" opcode would need to learn how to be resumable - which also complicates future JIT/AOT story. Metamethods in general are important for extensibility, but very challenging to deal with in implementation, so we err on the side of not supporting any new metamethods unless a strong need arises.