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 |