Tcl Source Code

View Ticket
Login
Ticket UUID: 3397978
Title: Ensembles force argument sharing
Type: RFE Version: None
Submitter: dgp Created on: 2011-08-25 12:43:55
Subsystem: 21. [namespace] Assigned To: dkf
Priority: 5 Medium Severity: Minor
Status: Open Last Modified: 2017-08-16 16:14:19
Resolution: None Closed By: nobody
    Closed on:
Description:
Was observed while pursuing 3396731 that
[string reverse $foo] always reaches the command
procedure with $foo a shared value while
[tcl::string::reverse $foo] can deliver an unshared
value to the command procedure.

If using ensembles reduces value sharing in this
way, that might have unwelcome impacts.  Request
we examine and see what's possible here.

Unexamined, off-the-wall thought:  do we need to
implement ensemble dispatch in terms of tailcall
to improve this?
User Comments: sebres added on 2017-08-16 16:14:19:

Just as notice to me. Fixed in sebres-rewrite-ensemble resp. sebres-perf-branch (should be still rebased to fossil from git).

Reason: - the first reference increment occurred if the parameters going in the call stack of "ens cmd" (mostly not compiled only, but sometimes compiled also); - the second increment by the ensemble rewrite (within instruction INST_INVOKE_REPLACE), if replaced to the call "::tcl::ens::cmd" during the execution.

Annoying that this affects currently the performance in 2 ways: - firstly it causes an unnecessary handling, because of the shared state of given objects (objects duplication, memory effort, cpu-cache washout etc). - secondly causes additional execution overhead (create/release the list of arguments), see my last comment (2017-01-04) on ticket [3485833].


ferrieux added on 2011-08-25 22:32:50:
Copying miguel's comment from 3396731 on that matter:

> If we find a way to fixt that and do "frame surgery", we should make sure
> to also use elsewhere - the [interp alias] implementation is a definite
> candidate