From: SourceForge.net <no...@so...> - 2003-08-25 16:56:41
|
Feature Requests item #793779, was opened at 2003-08-23 10:58 Message generated for change (Comment added) made by dgp You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=360894&aid=793779&group_id=10894 Category: 18. Commands M-Z Group: None >Status: Closed Resolution: Rejected Priority: 5 Submitted By: Markus Elfring (elfring) Assigned to: Don Porter (dgp) Summary: Include source files only once Initial Comment: Multiple inclusion of source files can be avoided in compiled programming languages like C++ by preprocessor statements. ... #if !defined(_my_text_included) #include "my_text.h" #endif ... The TCL function "source" includes files, too. But there are no preprocessor directives in a scripting language like TCL. Their statements get executed every time. The language PHP provides the function "http://de.php.net/manual/en/function.include- once.php". I suggest to add the option "-once" to avoid multiple inclusions of TCL code. ... if {_my_text_included == 0} \ { source "my_text.h" } ... # Write just one line to achieve the same as before with more safety source -once "my_text.h" ---------------------------------------------------------------------- >Comment By: Don Porter (dgp) Date: 2003-08-25 10:24 Message: Logged In: YES user_id=80530 OK, let me try putting is a different way then. [source] is, and should remain, a fairly primitive operation. The kind of one-time loading constraint is better implemented as a higher level routine that calls on [source] just to do the sourcing work, and maintains its own store of already sourced file names to avoid duplication. This can be achieved in a [proc] of less than 20 lines, so I don't see any need for changes to the core interface. When writing that [proc], consider applying [file normalize] to the file names before storing. ---------------------------------------------------------------------- Comment By: Markus Elfring (elfring) Date: 2003-08-25 07:59 Message: Logged In: YES user_id=572001 Sorry - I've got an opposite opnion. "... Auto Loading If you're building a library of tcl scripts, you should consider using utilizing one of Tcl's auto-loading mechanisms. ..." I do not want to build a library. I do not think that a function [source -once $file] is "magic". It may be seen a little bit as a convenience feature. But it can provide more speed and safety. ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2003-08-24 19:43 Message: Logged In: YES user_id=80530 Perhaps auto-loading is a more attractive alternative for you? http://wiki.tcl.tk/tclindex Either auto-loading or packages is the right answer. Adding this kind of magic to [source] is not a good idea. ---------------------------------------------------------------------- Comment By: Markus Elfring (elfring) Date: 2003-08-24 15:41 Message: Logged In: YES user_id=572001 I do not want to create a package for every file that needs to be inluded once. I think that is to much work. ---------------------------------------------------------------------- Comment By: Donal K. Fellows (dkf) Date: 2003-08-24 11:32 Message: Logged In: YES user_id=79902 I'd suggest using packages instead, and [package require] works a bit like [source -once] would except it uses a slightly more abstract notion (package name) and works with things other than single Tcl script files. dgp: Please reopen if you disagree. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=360894&aid=793779&group_id=10894 |