[TransWarp] TransWarp subpackage re-orgs

Phillip J. Eby pje at telecommunity.com
Sat Jan 19 18:59:31 EST 2002

Hi all.  I've just checked in a change to TransWarp to make a 'Utils' 
package which is a home for modules which can be used outside of TransWarp 
and which do not needed to be imported in order to use TransWarp 
API's.  Mostly, these are modules formed by splitting up the old 
'TW.Utilities' module.

I'm planning to create another major subpackage for what is now referred to 
as the TransWarp "kernel" - the API for generative, meta-, and 
aspect-oriented programming.  All the current kernel modules (or their 
equivalents) will move to that subpackage.  I'm trying to decide on a name 
and an import strategy, however.

The purpose of this is that I'm trying to emulate Zope 3's fine example of 
making packages separately importable, by having side-effect-free 
'__init__' modules.  Currently, you can't use anything from any 'TW' 
subpackage without causing the kernel to be imported, which makes the 
'TW.Utils' package somewhat less useful as a set of standalone utilities.

I see two alternatives for the import strategy:

1. Make the kernel a subpackage, from which you normally "import *".  This 
would replace the current "from TW import *" with "from TW.X import *" 
(where X is an as-yet undecided name).  This would require you to also 
"from TW import SEF" if you wanted to use the SEF module the way it's 
currently used.

2. Make the kernel a subpackage named "TW" or something similarly short, 
and keep "from TW import *", but now use the subpackage name as a 
prefix.  So, where you currently "from TW import *; build(someSpec)", you 
would now "from TW import *; TW.build(someSpec)", or "from TW.TW import *; 

No matter what I do, this is going to be backward-incompatible, because 
right now you can get away with "from TW import *" and no prefixing of 
names.  The only possible way to get around this would be to make 
"TW.Utils" into "TWUtils" or some such, and make it a peer of "TW", which 
I'm rather disinclined to do, since it would break everyone's CVS 
checkouts, but also because it's ugly.

I'd like to get some feedback on this issue before I proceed with the 
re-org.  Especially, I'd like a good name for the thing I keep calling the 
"kernel".  I've thought of making it TW.Core (which could be confused with 
WarpCORE later), TW.Kernel, TW.Meta, TW.GP, and various others...  nothing 
seems to me to quite fit.  Please send your suggestions.  Thanks!

More information about the PEAK mailing list