From: Andreas L. <av...@lo...> - 2006-12-05 16:52:15
|
On Tue, Dec 05, 2006 at 11:15:02AM -0500, Donald G Porter wrote: > Andreas Leitgeb wrote: > >I noticed, that importing commands into ::tcl::mathfunc > Don't Do That. > You don't put your custom function commands into > ::tcl::mathfunc either directly or via [namespace import]. My understanding of this stuff is not yet mature enough for a bugreport: My experiments were done at global namespace, and I'd have thought that if I'm on global namespace, then ::tcl and tcl would be the same. Changing only this line to omit the first "::" namespace eval tcl::mathfunc { namespace import ::list } does not change the result significantly. Placing the time-commands into proc's makes the times a bit better, but relatively, nothing changes: namespace export list namespace eval tcl::mathfunc { namespace import ::list } set a 42; time { expr {list($a+2,$a+6)} } 1000000 ;# --> 4.069574 proc foo a {time { expr {list($a+2,$a+6)} } 1000000} proc bar a {time { list [expr {$a+2}] [expr {$a+6}] } 1000000} foo 42 ;# --> 3.213488 microseconds per iteration bar 42 ;# --> 1.661782 microseconds per iteration > You put your custom function commands into tcl::mathfunc > Note that's a *relative* namespace, relative to the > namespace where you will evaluate expressions needing the > custom functions. I wasn't aware of that. It's good to know, although I hardly ever use namespaces for my own code, since I haven't written anything but standalone scripts, yet. > If the recommended technique is also (too) slow, file a > bug report on it. If the example shown above confirms to the recommended technique, then just let me know (e.g. per off-list email), and I'll "sourceforge" it tomorrow. |