|
I still don't understand how "org.conman.errno" contends with
"org.conman.env". Okay, I understand that you assume that both are part of
a module called "org" but that's incorrect. It's *NOT*. They are two
separate modules that happen to share a common prefix. I'm guessing that
had I named them org-conman-env and org-conman-errno then there would be be
no issue, right? But why, if they contain periods, are they suddenly one
module?
> require "org.conman.errno"
> require "org.conman.env"
> require "org.conman.table"
> require "org.conman.net"
> require "org.conman.syslog"
> require "org.conman.math"
> require "org.conman.signal"
> org.conman.table.show(package.loaded)
org.conman.signal-posix table: 0x9579178
string table: 0x955b618
org.conman.table table: 0x956eff8
package table: 0x955ba50
_G table: 0x955a450
os table: 0x955d3c8
table table: 0x955b100
math table: 0x955df90
coroutine table: 0x955b718
org.conman.syslog table: 0x956f5e0
org.conman.env table: 0x9570ec0
io table: 0x955cbc0
org.conman.errno table: 0x956cd20
debug table: 0x955e990
org.conman.signal table: 0x9579178
org.conman.math table: 0x957c260
org.conman.net table: 0x95780e0
Yes, the dots are significant in that they label both a table (within Lua)
and a path (on the system) to where the module resides. But that's (in my
opinion) an internal detail. Yes, there are some modules where loading the
top level will load all the "sub-modules" (for lack of a better term) but
not all. You cannot load "org" and get all my modules. There *IS* no
module "org" (there is no module "org.conman" either).
And your project shows *why* I went with namespacing my modules the way I
did. You have "math-evol", but not "math-rugekutta" because the former
claimed the "Math" module. And the only reason why "math-evol" didn't
conflich with "math-rugekutta" is because of the order you process the
modules. *This* is where I can see a "contending module", because "Math" ==
"Math". "org.conman.env" ~= "org.conman.errno". You need to treat the
entire module name (dots included) as the name.
You have "org.conman.env" listed as "org", which is wrong. You have
"love-ora" listed as "ora", which is wrong. You have a bunch of "lusty-*"
modules, which is correct, but you let that slide because it's a "flat"
namespace.
Sorry to harp on this, but how you determine "contending modules" is
partially broken.
-spc (Don't worry, I have more comments ... )