From: SourceForge.net <no...@so...> - 2003-08-25 21:16:21
|
Feature Requests item #793779, was opened at 2003-08-23 15:58 Message generated for change (Comment added) made by dkf 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: Pending Resolution: Later 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: Donal K. Fellows (dkf) Date: 2003-08-25 22:16 Message: Logged In: YES user_id=79902 1.If your apps can't control their variables, they're in trouble. Seriously. And libraries should not be altering ::auto_path under normal circumstances. (I'm not convinced that you've got non-normal circumstances here.) 2.If you're building a library, use the facilities provided. They're tested and maintained. 3.I thought the PHP mechanism was for script libraries. But then where I work PHP is something of a byword for security holes. 4.Too right, and you have two people saying this isn't the Tcl Way 5.You can do *anything* you want in your own code. It's yours. Still waiting for that killer use-case. ---------------------------------------------------------------------- Comment By: Markus Elfring (elfring) Date: 2003-08-25 21:58 Message: Logged In: YES user_id=572001 4. It seems that this request runs into a discussion about the topic to do things the TCL way. 5. How do you think about a little "hack" that a developer creates a package that contains the requested function "include"? It will be a normal extension in this case. ---------------------------------------------------------------------- Comment By: Markus Elfring (elfring) Date: 2003-08-25 21:48 Message: Logged In: YES user_id=572001 1. The autoloading mechanism depends on the variable "auto_path". I see it as a system setting over which I have not the control all the time. - http://mini.net/tcl/1628 - http://tcl.tk/man/tcl8.4/TclCmd/tclvars.htm 2. The package mechanism needs even more configuration. 3. A new function [include $file] can give developers that are used to programming languages like PHP an easier way to source TCL code. ---------------------------------------------------------------------- Comment By: Donal K. Fellows (dkf) Date: 2003-08-25 20:20 Message: Logged In: YES user_id=79902 Given that neither dgp nor myself feel very happy about adding this feature, please could you tell us a bit more about a specific situation where this would be useful but existing solutions (based upon the package mechanism and autoloading) do not satisfy. I've had a think about this, and all I can really think of is some kind of (possibly per-application) library, which is already covered by the features already listed. ---------------------------------------------------------------------- Comment By: Markus Elfring (elfring) Date: 2003-08-25 17:45 Message: Logged In: YES user_id=572001 I understand your intention now. How do you think about to create a new command [include $file] that implements the "one-time loading constraint"? Can these "20 lines" be added to the standard TCL function library so that all the developers do not need to write several versions for it on their own? ---------------------------------------------------------------------- Comment By: Don Porter (dgp) Date: 2003-08-25 15: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 12: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-25 00: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 20: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 16: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 |