www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - version(Main) like python's __name__ == "__main__"

reply Lionello Lunesu <lio lunesu.remove.com> writes:
I'd like to suggest a new predefined version identifier called "Main" 
which is defined on the main module only. The definition of "main 
module" would be:

* the first module on the command line, or
* the module whose name will be used for the executable, or
* the module mentioned after DMD's "-run"

The two issues with this suggestion are:

* vagueness of the definition of "main module"
* Main version identifier is set for one module only (by definition)

It's use would be similar to Python's "__main__" [1]:

version(Main)
{
void main()
{
   // test code
}
}

It would allow one to write small examples/tests in each module, that 
can be executed immediately, but won't cause conflicts when linked 
against in a larger project.

L.

[1] http://docs.python.org/lib/module-main.html
Nov 21 2007
next sibling parent "Chris Miller" <chris dprogramming.com> writes:
On Wed, 21 Nov 2007 06:38:21 -0500, Lionello Lunesu  
<lio lunesu.remove.com> wrote:

 I'd like to suggest a new predefined version identifier called "Main"  
 which is defined on the main module only. The definition of "main  
 module" would be:

 * the first module on the command line, or
 * the module whose name will be used for the executable, or
 * the module mentioned after DMD's "-run"

 The two issues with this suggestion are:

 * vagueness of the definition of "main module"
 * Main version identifier is set for one module only (by definition)

 It's use would be similar to Python's "__main__" [1]:

 version(Main)
 {
 void main()
 {
    // test code
 }
 }

 It would allow one to write small examples/tests in each module, that  
 can be executed immediately, but won't cause conflicts when linked  
 against in a larger project.

 L.

 [1] http://docs.python.org/lib/module-main.html

That's pretty cool, I'll vote for it.
Nov 21 2007
prev sibling next sibling parent Lars Ivar Igesund <larsivar igesund.net> writes:
Lionello Lunesu wrote:

 I'd like to suggest a new predefined version identifier called "Main"
 which is defined on the main module only. The definition of "main
 module" would be:
 
 * the first module on the command line, or
 * the module whose name will be used for the executable, or
 * the module mentioned after DMD's "-run"
 
 The two issues with this suggestion are:
 
 * vagueness of the definition of "main module"
 * Main version identifier is set for one module only (by definition)
 
 It's use would be similar to Python's "__main__" [1]:
 
 version(Main)
 {
 void main()
 {
    // test code
 }
 }
 
 It would allow one to write small examples/tests in each module, that
 can be executed immediately, but won't cause conflicts when linked
 against in a larger project.
 
 L.
 
 [1] http://docs.python.org/lib/module-main.html

We tend to add such simple tests within debug (ModuleName) { void main() { blah } } then compile with dmd -debug=ModuleName I find this solution more than easy enough and possibly more flexible? There may be other usecases where such a Main version identifier would be of interest though. -- Lars Ivar Igesund blog at http://larsivi.net DSource, #d.tango & #D: larsivi Dancing the Tango
Nov 21 2007
prev sibling parent reply Dan <murpsoft hotmail.com> writes:
Lionello Lunesu Wrote:

 I'd like to suggest a new predefined version identifier called "Main" 
 which is defined on the main module only. The definition of "main 
 module" would be:
 
 * the first module on the command line, or
 * the module whose name will be used for the executable, or
 * the module mentioned after DMD's "-run"
 
 The two issues with this suggestion are:
 
 * vagueness of the definition of "main module"
 * Main version identifier is set for one module only (by definition)
 
 It's use would be similar to Python's "__main__" [1]:
 
 version(Main)
 {
 void main()
 {
    // test code
 }
 }
 
 It would allow one to write small examples/tests in each module, that 
 can be executed immediately, but won't cause conflicts when linked 
 against in a larger project.
 
 L.
 
 [1] http://docs.python.org/lib/module-main.html

Walter implemented something better called "unittest". Although I wish you could execute JUST a unittest, and only for one unit...
Nov 21 2007
parent Lionello Lunesu <lio lunesu.remove.com> writes:
Dan wrote:
 Walter implemented something better called "unittest".
 
 Although I wish you could execute JUST a unittest, and only for one unit...

I agree that it's similar, but not quite: I think it's shady for a unittest to make internet connections and such, but it would be fine for a small test app. It could use command line arguments for the URL or any file it wants to open/create. That's not something a unittest can do. L.
Nov 22 2007