Hi Mathieu,
I don't believe you. Anything which adds functionality to an optimally implemented proc must add overhead to it. You might argue that proc as implemented is sub-optimal, in which case thank you for finding a way to optimise it. You might argue that you cannot measure any difference between the optimal and the extended versions, in which case you need to measure more closely. You might argue that the difference is insignificant, or that it's worth the cost, which begs the question of why using proc to provide the extension is significant or not worth the cost.
If you're honestly arguing that you have two (otherwise identical) pieces of code, one of which implements a discriminator and one of which doesn't and the one which performs more computation does so with no additional computation time, then either I have a fundamentally flawed view of what computation is, or you do.
I simply cannot buy it.
Colin.
I think the [eatargs] thing is fine, and clearly FAProc could trivially be implemented in terms of it.
A real show-stopper for me with the "let's extend proc" approach (if I had any actual say in the matter of what Tcl as implemented becomes, which I don't) is that [proc] as [FAProc] becomes radically dissimilar to all the other command-generating commands [CGCs].
If the fundamental script-level CGC is no longer able to simulate, or be simulated by, the others then Tcl loses enormously.
Colin
On, now, to the next element of overhead, which you haven't dealt with (here. I haven't been following closely, I'm sorry if you have dealt with it elsewhere) which is the *considerably* more complex documentation. Not significant?
Finally, and for me this really would end the matter (I think it's just that important), the loss of ability to bisimulate CGCs in Gcl.
Colin.
Argh, I meant "in Tcl", of course.
Oh, and I think I may have misused "bisimulate" ... I meant that every CGC form should be able to imitate every other so that it's impossible for the caller to tell when one CGC-command has been substituted by another of identical functionality simply by calling it. They should all look the same. It matters.
Excuse me, Mathieu, but I'm not simply "against it."
I have raised what I consider to be cogent criticisms of a proposed course of action, and as far as I can tell you have addressed none of them. I sought to understand why our opinions differ about what is best.
To denigrate my analysis as 'flaming' doesn't discredit it, and to fail to meaningfully engage with it surely only undermines your proposal.
I believe that you have misread the bounty's stated requirements, if you believe that modifying [proc] is essential to satisfying them.
Whence did the idea arise that distorting proc was the best way to add the functionality you appear to desire, or desire to implement?
Colin
I forgot: increased implementation complexity of proc is the other deoptimisation your proposal must obviously entail. All the same defences are available to you as for performance degredation.
I would expect any proposal such as yours to have considered and addressed these issues. I didn't expect that countering my critique would be onerous if you had already considered them.
I certainly didn't think that politely raising some fairly obvious objections could be called a "flame-war." Not with a straight face, anyway.
Colin
*degradation
In an ideal implementation of this, the overhead, for procs that do not
use the new functionality, will be all in proc definition, not proc
execution.
Since proc definition is a vanishingly rare event compared with churning
away in inner loops, I expect that for typical scripts the overhead will
not be measurable.
It would appear that Mathieu thought that you were speaking of
execution-time overhead.
Colin,
My intent was not to denigrate your analysis but to try to calm things
down. Sorry for having triggered the opposite...
We have a disagreement on how this should have been implemented. I
have chosen to modify proc argument specifiers after having proposed
other options (including a dedicated command to call a proc :
http://www.tcl.tk/cgi-bin/tct/tip/view/457?ver=1.7) and received
feedback in that way. The initial FA bounty description was requiring
that it must work with unmodified proc, so the spirit of the bounty
seems to favor keeping proc and not adding a separate command.
Having chosen to modify proc, this implies impact on code, performance
and documentation, which I have tried to keep minimal, but are
inherent to that decision. I have carefully ensured that the new code
is well separated so that it is easy to review and maintain and that
the proc not using extended specifiers are not impacted in any way.
Regarding the two proposals made by Alexandre :
- Adding a new FAproc command will require to duplicate a lot of code
already present in proc, leading to more maintenance. Users may find
confusing to have a separate command and new users may not find it.
- Adding a runtime handler seems to be limited to argument parsing,
where the current proposal is a base framework which can be easily
extended to later support other usecase on proc arguments (type
assertion, doc-string, ...).
Unless I don't get the intent, it seems
necessary to specify the named arguments when calling the command.
Users may find counter-intuitive to have to specify the arguments in a
second time (I assume proc only use 'args' in that case).
I don't have any strong positions on any alternate proposal, I only
want to give my current proposal a chance to be considered.
Colin McCormack <mcc...@gmail.com> wrote (mix of some mail)
> I am also really dismayed that one might be able to bid for mods to core
> commands.
The bid may have been motivation for mlafon to spend his time to fine-design and implement it, but it has not more impact on TCT's decision, than a mere suggestion of someone. IOW, you can bid someone to implement something, but you cannot "bid something into the core".
> I have no reason to cast aspersions on your code. I merely seek to
> criticise your quite arbitrary choice to modify proc to insert
> functionality like this.
This looks really strange, Colin: you write you wouldn't want it in the
core "for it would then have proc interfaces be different from apply's
or OO-method's." The opposite is true: if the named arguments were done as a separare faproc, *then* faproc-generated commands would be singly more powerful than plain proc/apply/methods.
The current implementation is done at a level so that apply and oo-methods also benefit for free from it, just like proc, so most (if not all) of
these CGC would still be equivalent! And then they're also a step closer
towards equivalence to what standard compiled commands do.
That the TIP also covers apply and oo-methods has been repeatedly stated
here...
Another more fundamental aspect of TIPs in general:
A TIP is a proposal, with the author's intention to "improve Tcl".
Apparently, there is not always a consensus about whether something *is* an improvement or not, but it makes no sense at all to say: "but you
could do some of it in <this-roundabout-way> or <that-roundabout-way>."
The very point of a TIP is, that the respective author is *not* fine
with the workarounds, and *therefore* suggests a change to *improve*
Tcl towards *not* needing the workarounds.
Without "improvements" we still wouldn't have $var, {*}-expansion,
and maybe "proc" itself would be an extension to download and compile
separately...
> I don't believe ...
and discussions here would be more compact, if some of these beliefs or
disbeliefs were checked against facts before being thrown in as arguments.
Even if FA's bounty *could* be met with a different solution, then this
TIP proposes a particular solution, and this solution shall be judged,
or an alternative proposal made (if the objective is agreed but only the
approach disapproved).
That "FA demands introspectability" is not the only point against some
parseargs-approach. The point is rather that introspection *is* a worthy
concept to care for. And FA just added it as a condition, as they appa-
rently didn't fancy a half-a..ed solution - neither would I.
Given that Colin elaborated verbosely on his speculations about all the
tip457 business being solely bounty-triggered, and dismissing the thought that it might be even considered a good thing,
I'll counter with the
speculation that Colin is just principially against any change to Tcl
whatsoever, and he actively tries to turn this into a flame-war merely
to discredit the topic.
> It was a throw-away line on my part, but I think it's worth saying.
I copy your words for this paragraph.
Now, about CGC, PAP and the scope of TIP-457:
CGC: Code Generated Commands (iirc), seems to address all commands that come into existence as consequence of already existing commands being called. That would include Tk/Ttk widgets, interp aliases, namespace ensembles, oo-classes&objects, proc and oo-methods. ("apply" isn't a CGC, for that matter)
Obviously, most of them have no relation whatsoever to the "PAP" - the "::proc argument protocol", which for now is shared by apply and oo-methods, and potentially by any extension that uses Tcl_CreateProc().
If your intended meaning of CGC is a different one, then let us know what
it includes besides those that involve Tcl_CreateProc() at creation.
Tcl as a language consists of three(!) parts: the syntax, the standard
commands, and the "infrastructure". The infrastructure is what makes the
commands mostly consistent in acceptance of numbers, booleans, lists,
dicts, ...
If we were to enhance list syntax (how strings get parsed to lists), we'd
rather not add a new xlindex, xlappend, xlset, xforeach,... but instead
enhance the appropriate Tcl_...List... function.
Tcl_CreateCommand is also infrastructure. It is used by ::proc, ::apply
and oo's method and probably almost every extension that intends to wrap
some lines of tcl code to run in their own stackframe with a specified
set of local variables pre-assigned.
Now, if the PAP *were* to be enhanced, then most obviously Tcl_CreateProc
(and/or its internally called helpers) is the thing to modify.
So much for the actual motivation for TIP 457's target.
On Sat, May 20, 2017 at 11:37:36PM +0000, Colin McCormack wrote:
> A major problem of this TIP is that it exploits the fact that the ::proc
> argument protocol [PAP] is very loose, by restricting it and imposing
> consequential and potential incompatibility on *every* PAP forever after.
It is well known, that there is only one chance to ever define a meaning
for argument specifiers of length > 2. The TIP does a good job of leaving
"hooks" for further enhancements as options to be added lateron.
It may preclude other means to enhance arg-specs, but given that:
- "1 or 2 elements" is already taken,
- decorated param-name is not precluded by the tip, and
- adding even just a third element would imply presence of a default,
then it seems that any reasonable alternative wouldn't be all that
fundamentally different from 457.
I'd be curious about even rough sketches of alternatives to enhance the
PAP compatibly, that would be *precluded* by acceptance of tip 457.
This is not about laying the burden on proof on you, but it is about
pointing out mistakes in my above reasoning about possible alternatives.
> I think Alexandre's counter-proposal for a generic arg-handler at runtime
> is better for precisely that reason. Any user of the other CGCs could
> elect to follow FA's arg protocol [FAP] if the author wished.
Having non-introspectable proc foo args ... is just not the objective.
No, FA seems not to mention it - anymore? - ... no idea where I picked that
up ... anyway, as I said it wasn't for them, anyway, but because introspect-
ability *should* have been a requirement, imho.
> > The very point of a TIP is, that the respective author is *not* fine
> > with the workarounds, and *therefore* suggests a change to *improve*
> > Tcl towards *not* needing the workarounds.
> And of course the problem with any improvement is that if it forecloses
> other changes it can be a local maximum.
That's some curse of the world as it is. If you never change anything
out of fear that it could preclude something not-even-yet-fathomed later,
then it grinds to a halt ways below even the local maximum.
> Is this the best of all possible ::procs? I doubt it, but I don't know,
> and I see no evidence in the TIP that the authors have considered that
> weighty question.
The discussion has passed various stages and suggestions have been
added, refined, dropped. Almost all of my own suggestions have been
replaced by better (as I now understand) alternatives - something that
at least makes me confident that I'm not merely "defending my own stuff".
> That a given author has elected to implement their proposed command
> improvement in a certain way is really no guarantee that the improvement
> couldn't be improved.
It has been improved a lot during the discussions.
IMHO, another month or so of discussion might still improve it, in
particular for making sure that the other TIP's [info linkedname] actually
can fill the gap of dropped "-varname" (I really hope it can!)
> I see absolutely no argument even attempted that the arbitrary choice to
> modify ::proc in (a way which practically cannot be reversed) is necessary,
> or desirable, or minimal or an improvement to Tcl ...
I'm sorry to read about that physical condition of yours.
> > Without "improvements" we still wouldn't have $var, {*}-expansion,
> > and maybe "proc" itself would be an extension to download and compile
> > separately...
> Those were genuine improvements, and *much* more consideration was given to
> their Tcl-wide effects than has been given to this.
"*much* more consideration" was indeed necessary because (at least) $var
was obviously not "compatible" in the strict sense.
> Moreover: {*} went through rapid revision from {expand}, demonstrating that
> its authors were flexible enough to reconsider their initial design choices
> when presented with better ones (see Alexandre's counter-proposal.)
{*} was proposed nearly same time as {expand}. It was during discussion that
the {expand} was preferred for verbal clarity, but pragmatic rationality
fortunately came back just in time, even if only after the {expand}-vote.
Alexander's counter-proposal isn't "better", because it lacks introspecta-
bility. And i15y is obviously *not* for any FAB, but because it makes sense.
> If I were you, I wouldn't cite $var in support of your radical language
> mod, because it too easily leads to a discussion about $() and WTF is
> between those parentheses.
Despite the flaws of current $... spec-/implementation, I'm ways happy
to have it, and I've written a TIP to try to amend some of the flaws.
Offered an alternate timeline where $var wasn't added, but instead still
waiting for the perfect change, I'd choose ours.
And I'd prefer a future timeline of enhanced PAP to one of leaving PAP
as it is (in expectation of some utopic perfect enhancement).
OK, I'm not going to quibble about no impact versus no overhead
versus immeasurable effect.
One thing that did strike me, though, in the recent exchange was
that the new proposed proc would be harder to emulate. It is
ironic that a feature designed to avoid "scaffolding" prevents
other scaffolding. I don't think that is a show-stopper though.
PS to Colin: "invoke a proc" is perfectly clear. Hint: look at
[info proc]. That comment gets you on the threshold of my *plonk*
bin.
On Sun, May 21, 2017 at 12:52:56PM +0000, Colin McCormack wrote:
> What I have said is that I see no justification in the tip, nor anywhere
> else, for the decision to make tip457 extend/modify/mutilate ::proc, rather
> than simlly make a parallel command.
Since you've "not seen" it the other umpty hundred times: tip457 targets
Tcl_CreateProc exactly to extend/modify/mutilate *not only* ::proc, but
also ::apply, oo-methods/constructors, and extensions using Tcl_Create-
Proc to implement their own variants of custom CGC leaving the argument
initialization bit to Tcl. I've yet to see a proc-alike in the wild that
isn't directly or indirectly built on Tcl_CreateProc().
You may (or more likely not) agree to this, but you cannot truthfully
say, that you "saw" no such justification "anywhere else", unless, you have
that physical condition of being blind and have a screen-reader to read
these messages. In that case, it would be fair to clarify if you not
only saw no justification but actually don't see anything at all.
> The important relationship I am referring to is that, as the PAP *calling*
> protocol comprises a list of values, any imposition of a protocol involving
> named parameters, call by name, etc, results in the possibility of creation
> of commands by ::proc which simply cannot be simulated (or cannot simply)
> be stimulated with other CGCs such as ::apply, ::coroutine, etc.
You lost me shortly after "imposition". In case you attempt to put it in
easier words, maybe you could also provide an example for such a case of
proc-s(t?)imulation in the wild. If it looks like a reasonable usecase,
then I don't see how this wouldn't be convincing. But since you mention
s(t?)imulating it with apply, then you seem to once again have forgotten
that apply is also covered by the tip, and that coroutines "inherit"
the argument parsing from the coroutinized command/proc/lambda, and that
the result of yieldto is already non-trivial (and also not meant) to be
used for initializing local variables, as the local stackframe is no
longer fresh at that time.
> > If we were to enhance list syntax (how strings get parsed to lists), we'd
> > rather not add a new xlindex, xlappend, xlset, xforeach,... but instead
> > enhance the appropriate Tcl_...List... function.
> I don't think I would recommend 'enhancing' list parsing by modifying the
> [list] command,
As if [list] even *did* any list *parsing*...
> and I would strenuously counsel against doing so if your
> objective was to create dicts.
I expected that you'd try to twist the point towards absurdity, and
that's why I put an explanation to what would be enhanced: "how strings
get parsed to lists". That obviously doesn't involve dicts, except as
a red herring.
> Perhaps my usage of "protocol" in this has been unclear. I am using it in
> the same sense Occam used it.
You're certainly aware that William of Ockham wouldn't have accepted the
excessively redundant form of $var, when there was already [set var].
A "protocol" that is perfect by Occam's Razor is not necessarily the one
that anyone would enjoy directly using.
> a reasonable job of limiting the imposition of overhead incurred by the
> unnecessary modification so it 'only' impacts every script that has ever
> used $args (as I understand it, this is not stated in the TIP.)
Ah, nice! Yet another wild speculation far off the facts...
> > Having non-introspectable proc foo args ... is just not the objective.
> Oh, you have determined that [eatargs] is absolutely not susceptible to
> introspection? Remarkable. How did you determine that?
Because proc-bodies are (except for machine- and "int"- limits) algorithms
specified in a turing-complete language, so, unless the param-spec is
reflected rather than merely duplicated somewhere else, it can not be
considered generally available.
> > No, FA seems not to mention it - anymore? - ... no idea where I picked that
> > up ...
I think I remember now, that Karl Lehenbauer confirmed the requirement
in a message on this list, but apparently didn't (yet?) put it on the
bounties-page.
> Measure twice, cut once.
Yes, during the time it's being discussed it has been measured 100
times, and may yet need another 100 measurements. It won't get all
the [expr {Inf}] measurements, though, that you might consider
necessary for an exactly 100% optimum cut.
> For what it's worth, I haven't so much as scanned your months of continuous
> improvement, and I found a pretty amazing hole straight away ... no attempt
> to justify coopting ::proc. Imagine what a long-term analysis might find.
Would be interesting if you actually *had* found any "amazing hole"
and were not just putting your disapproval of the tip's scope in fancy
words.
> Alexandre's counter-proposal doesn't even address the issue,
Yes, that's exactly my perceived problem with his [eatargs].
> > And I'd prefer a future timeline of enhanced PAP to one of leaving PAP
> > as it is (in expectation of some utopic perfect enhancement).
> Justify why FAP needs to displace PAP in ::proc, or I respectfully disagree.
That has also been said a lots of times:
The point is to improve the natural use of "proc" and the other CGCs.
The point is to make named options a "normal" part of Tcl. As "normal"
as defining and using procedures in the first place. That's why it is
indeed an TIP, and not a CAP (Command Addition Proposal).
> Colin (wow that was boring)
Would be less boring if you didn't just play the "I see no justification ..."
clip in auto-repeat mode.
On Sun, May 21, 2017 at 04:12:29PM +0000, Colin McCormack wrote:
> Every time I use a coroutine, I am simulating a proc.
You probably mean "resume a coroutine" here, and my empathy is quite
limited for this abuse of coroutines.
> > > Perhaps my usage of "protocol" in this has been unclear. I am using it
> > > in the same sense Occam used it.
> > You're certainly aware that William of Ockham ...
> The language, mate, not the historical personage. FFS.
99.9% of mentions of Occam are about the historical person and his "razor".
Also, the language occam seems to be written with lowercase "o".
If you mean anything else than the algorithm by which call-arguments
get assigned to formal parameter initializations in the proc's stack
frame, you might want to use English or Tcl language to describe it.
This protocol is the TIP's target.
It is so, because it is an
enhancement in the real sense (unlike your ridiculous claim of
dicts being enhancements of lists)
and it is meant (by the TIP-
authors and supporters) to become the standard PAP
to make it easy even for new users
to create more conveniently callable procedures/lambdas/oo-methods/...
and not something special that you need a special command for and that cannot be used in the other CGC contexts or requires an extra boilerplate in the body.
> > > a reasonable job of limiting the imposition of overhead incurred by the
> > > unnecessary modification so it 'only' impacts every script that has ever
> > > used $args (as I understand it, this is not stated in the TIP.)
> > Ah, nice! Yet another wild speculation far off the facts...
> I believe I derived this from something your co-author said. I may of
> course be mistaken.
> You're able to assure me, from your awareness of the facts, that there is
> no execution overhead for scripts which do not use the FAP?
Tcl_CreateProc currently creates some internal object to represent a
defined procedure/lambda/oo-method/... that upon invocation (calling
one of the structure's function pointers) will create a new stackframe,
do the "PAP" and run the body.
With TIP457, Tcl_CreateProc will classify the param-spec as either being
compatible with old style (then create the standard object for it), or
as actively using the new features, in which case it creates a different
object with a pointer to a different function that implements the enhanced
PAP.
There might be fractions of a millisecond spent on determining compati-
bility of the param-spec during execution of the [proc] command itself,
but once the internal object is there, it doesn't even know that there
is also another one.
So, since the code path doesn't change for unchanged procedures, what
slowdown would you expect?
> > > > Having non-introspectable proc foo args ... is just not the objective.
> > > Oh, you have determined that [eatargs] is absolutely not susceptible to
> > > introspection? Remarkable. How did you determine that?
> > Because proc-bodies are (except for machine- and "int"- limits) algorithms
> > specified in a turing-complete language, so, unless the param-spec is
> > reflected rather than merely duplicated somewhere else, it can not be
> > considered generally available.
> Alexandre disagrees, elsewhere.
Nope, Alexandre merely considers introspection as not important and some
hacks to examine the body in sunny-weather cases as sufficient.
> > > > No, FA seems not to mention it - anymore? - ... no idea where I picked
> > > > that up ...
> > I think I remember now, that Karl Lehenbauer confirmed the requirement
> > in a message on this list, ...
> Wow. So *this* is the justification for co-opting ::proc ??? Just Wow.
Nope, it was just about why I even assumed FA's interest in introspection.
> > > Measure twice, cut once.
> > Yes, during the time it's being discussed it has been measured 100
> > times, and may yet need another 100 measurements. It won't get all
> > the [expr {Inf}] measurements, though, that you might consider
> > necessary for an exactly 100% optimum cut.
> I think you've missed some stuff ... like 'why'.
Because of my subjective judgement of the case. That's why. And your
judgement is different, as is hard not to notice. And that's where
our judgements are both irrelevant, anyway, because we're both not in
the TCT.
> No justification that modding ::proc improves Tcl ... not a hole?
> No comparison with perfectly servicable alternatives ... not a hole?
Nope. Both are subjective judgements of the options: to be able to
make option/switch-accepting procedures easily is either favorable,
or it is not.
... and about importance of sound i15y.
In the meantime some details may be changed about the TIP in hope
to nudge the scale towards favorability by the TCT majority.
> Might be interesting to read an actual justification, beyond "but that's
> what we did." OTOH, maybe not, too ... I'm speculating.
I'm still struggling about what defines a "justification" for you.
Maybe you could add a sample justification that you would use for
adding $var if it weren't already there. I might then find something
on par for why named arguments should be done in Tcl_CreateProc()
and not in some eatargs or faproc.
I guess you haven’t been following the discussion. For procs not using the new syntax there is no increase in overhead. The new syntax has been carefully designed to not conflict with existing procs in any way. Unless an argument has three or more elements the new code will never be called at any point.
From:
Colin McCormack <mcc...@gmail.com>
Date: Friday, May 19, 2017 at 10:11 PM
To: Tcl Core List <tcl-...@lists.sourceforge.net>
Subject: [TCLCORE] There is no justification for modifying [proc] for named parameters
I don't think modifying [proc] to support a particular protocol for names args is a good idea.
I think the protocol [proc] currently has for args is sufficient and I don't think any extension of it is warranted, nor required by the Flight Aware Bounties [FABs].
I think that the challenges outlined by FABs would be amply met by defining a different command FAProc in C and packing whatever functionality is required into FAProc.
I think that the notion that [proc] needs to be extended (at a runtime cost and at documentation and implementation complexity cost) to cover a particular calling protocol is really a co-opting of the [proc] name, and not an addition of functionality.
I think that the remedy for "but I want *all* my proc to be FAProc" is [rename]. I am not aware of what, in the FABs, actually require proc to be pre-[renamed] as it were.
I am not aware of what benefit there is in adding processing cost to traditional proc, either for the users of FAProc or the users of proc.
I will now closely paraphrase the FABs to try to understand why redefining the verb proc might gain FlightAware (or anyone) anything substantive.
I paraphrase the FABs for clarity:
"A first class, high-performance, non-hackish way to do named parameters" which "must be first class, i.e. can't be a proc that wraps procs with a bunch of scaffolding" and a Named Parameter Protocol (example FAProc declaration given) which would 'replace' (traditional proc declaration given) and which is to be (and here's the kicker) "implemented as a first class thing in the Tcl code" and not to be implemented as "some proc that generates a proc or something lame like that"
The bounty is attracted to a "first class thing" which implements a names parameter protocol, which is not itself implemented as a call to proc 'or something lame like that' ... vague much?
Analysis: any "first class thing" could be either a command or some kind of modification to the parser which applied only to calls to the proc command. I'm going to assume the former, because the latter seems particularly poorly conceived.
It seems to me that the 'replace' part of the bounty specification is amply satisfied by [replace proc AFProc] and that the AFProc command, if implemented in C or some other method which is not "lame" would satisfy the bounty requirements.
The requirements of the bounty seem to have been reinterpreted somehow as an imperative to modify the implementation of proc. They are not.
This re-implementation will by its nature drag on proc, will by its nature slow proc definitions which don't use the extended facilities specified by AFProc. This overhead would arise and be imposed for no good reason, but simply because the bounty was poorly phrased.
Unless FA get to pay $10k to impose new overhead on every proc call ever, for no concomitant benefit, I think the idea of modifying [proc] to save FA (et al) the time it takes to run [rename] is a *very* bad idea. I should state, clearly, that I don't think FA get to pay $10k to impose new overhead, nor that FA want that, nor that they would obtain any benefit at all from doing that ... I think they just got carried away with how implementing language extensions in Tcl is 'lame' (which I doubt) and forgot to properly specify what they mean by "first class thing."
I have no personal desire to prevent FA from getting their "first class Tcl thing" which isn't "lame like a proc", but I really don't feel any impetus to impose a FA performance load on every [proc] call so their requirements might be satisfied in what seems to be the lamest way possible.
Colin
Hi Peter,
I don't know why you feel the need to add that. That TclX has some cool stuff in it has no bearing on whether *this* proposal has merit, or what merit it has.
Colin.