Posted to tcl by sebres at Fri Sep 21 17:12:49 GMT 2018view pretty

In my opinion, the certain "immutability" of dict + EIAS (as well as the absence of weak/smart pointers) avoid the normal usage of the dict as real branch-tree (at least updatable one, e. g. if navigating over tree branches, etc)...

I have own native tcl-object-types in TclSE (struct, record, etc), that are dict-similar, where one can do things like:
  
% set t [new record from json {"a":{"aa":1,"ab":2},"b":{"ba":3,"bb":4},"c":{"ca":5,"cb":6}}]

% $t as string
a {aa 1 ab 2} b {ba 3 bb 4} c {ca 5 cb 6}
% $t as json -pretty
{
  "a" : {
    "aa" : 1,
    "ab" : 2
  },
  "b" : {
    "ba" : 3,
    "bb" : 4
  },
  "c" : {
    "ca" : 5,
    "cb" : 6
  }
}  

% set b [$t . b]

% $b set bc 5
% $t as string 
a {aa 1 ab 2} b {ba 3 bb 4 bc 5} c {ca 5 cb 6}

% $b clear
% $t as string
a {aa 1 ab 2} b {} c {ca 5 cb 6}

% $b set x x
% proc some-proc {branch args} { $branch update $args }
% some-proc $b y Y z Z
% $t as string
a {aa 1 ab 2} b {x x y Y z Z} c {ca 5 cb 6}

% $t . b unset z
% $b as string
y Y

% $b record z { bza 8 bzb 9 }
% $b . z set "a&c" [list [$t . a] [$t . c]]
% [lindex [$b . z . "a&c"] 0] set ac 3
% [lindex [$b . z . "a&c"] 1] set cc 7

% $t as json -pretty
{
  "a" : {
    "aa" : 1,
    "ab" : 2,
    "ac" : 3
  },
  "b" : {
    "x" : "x",
    "y" : "Y",
    "z" : {
      "bza" : 8,
      "bzb" : 9,
      "a&c" : [
        {
          "aa" : 1,
          "ab" : 2,
          "ac" : 3
        },
        {
          "ca" : 5,
          "cb" : 6,
          "cc" : 7
        }
      ]
    }
  },
  "c" : {
    "ca" : 5,
    "cb" : 6,
    "cc" : 7
  }
}  

Simply try to do the same using tcl dict's.