I just compared proc names and signature of my local robin hood hash table with Nim's table implementation.
In the later we have
proc `[]`*[A, B](t: var Table[A, B], key: A): var B {.deprecatedGet.} =
## retrieves the value at ``t[key]``. The value can be modified.
## If `key` is not in `t`, the ``KeyError`` exception is raised.
get(t, key)
proc `[]=`*[A, B](t: var Table[A, B], key: A, val: B) =
## puts a (key, value)-pair into `t`.
putImpl(enlarge)
For me it is not really obvious which of both is called when I would write something like
myTable["myExistingString"] = myIntValue
Both procs seems to allow assignment, if key already exists in table. Is the undocumented {.deprecatedGet.} pragma important for behaviour?
As far as I know, proc [] returning var can only be used in this kind of expression
list[index].this_proc_require_var_arg()
deprecatedGet looks like a custom pragma to change behaviour depending on compile time flags