lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



A quick skim over your site results in quotes like this:

"Idle is not Lua. Sure, Idle is *based* on Lua and it
tries to be as compatible as possible. But in the end
it is a separate application..."

It IS lua [...snip...]

[...snip...]

You did not write a scripting language, stop stating that you did.

Release this stuff as proper lua modules [...snip...]

C'mon...give the bloke a break. Every time Idle comes up on this list there's a harsh backlash which boils down to "how dare you do something you thought was useful."

_I_ have some problems with Idle, including:

1. It's _definitely_ a silly name, since Idle is already fairly well known as a basic IDE in the Python world, so the choice was poor.

2. It's _possibly_ a slightly arrogant name, and I'm sure most of us would be happier if it were "LuaSomething" or "SomethingLua."

3. It's Windows only, which happens to make it useless to me. (I am looking for portability across Windows, Linux and the BSDs.)

On the other hand:

4. It's palpably _isn't_ Lua, since there are some incompatibilities in the core, so "Luasomething" or "SomethingLua" would _probably_ be confusing.

Thomas, perhaps, if you explicitly labelled it "Idle, a Lua-based scripting language," you could please more of the people more of the time. (Of course, you need IMO to find a name other than Idle, but that's a separate issue.)

Another thing: if I were you I'd also offer an EXE which is statically linked, so you can make a single-file program (no DLL required). Where the DLL is useful is if you have multiple Idle EXEs, so each EXE is much smaller.

For these cases I suggest you also offer a non-UPXed version of the DLL. The usual reason for offering a DLL is so that multiple EXEs can load it at the same time, thus saving space. But a UPXed DLL can waste a lot of physical memory, since the DLL's decompressed code pages aren't shared between all the EXEs linking to it (as they are, for instance, with KERNEL32.DLL and USER32.DLL). This is because the in-memory UPX decompression causes a copy-on-write of all the code which is decompressed on the fly, even though that code ends up the same as in other instances of the DLL. After all, to the Windows loader they aren't code pages mapped in from the binary image -- the final in-memory code pages are marked as uninitialised data pages in the image file. These data pages are then written to separately by each copy of the DLL as it loads.

I haven't explained that very well. But UPXing a DLL which gets loaded more than once means you end up with the DLL's code in memory, as non-shared data, multiple times. A DLL with code pages that are identical across multiple instances of that DLL in memory will share those code pages amongst all the copies. This can save a lot of (physical) RAM.