Am 13.02.2016 um 14:23 schrieb Philipp Janda <firstname.lastname@example.org>:
Am 12.02.2016 um 18:36 schröbte Peter Aronoff:
Philipp Janda wrote:
I'm sure we all agree that a general table should be able to hold any
string key including ones starting with _ + uppercase letter. However,
a module table is not a general table, and there already has been Lua-Rio
code in Lua 5.1 that used the `_M`, `_NAME`, and `_PACKAGE` fields in
module tables, so the reservation of those names probably does not apply
to global variables (and the registry) only.
But those tables and the tables that my module exports are by definition
distinct, aren't they? I'm worried that I'm missing something painfully
obvious, but I don't see how a clash could occur.
I just wanted to mention that there is official code out there that sets fields with reserved names in module tables. At the moment there will be no clash, because `module` is deprecated (5.2) or gone (5.3), and it didn't set `_VERSION` anyway. But I take that as a hint that you use reserved names in module tables at your own risk.
A user of my module has
to require the module and save the table it returns, using an identifier.
That identifier holds one specific table and is distinct from any other
table from Lua-Rio or any other code.
local split = require('split')
if split._VERSION == 'whatever' then
How can the _VERSION identifier in the one table ever clash with one in
It won't clash with fields in other tables, but it could clash with future Lua code, because as suggested by the implementation of the `module` function `_VERSION` is a reserved name in module tables.
While we are talking standardization:
1) LPeg (which I consider semi-official) has a `version()` function.
2) Is a string (especially if it also contains non-version info like the package name) really the most useful representation for a module version? Should we maybe make the semver module the most often used dependency in the LuaRocks universe?