It would be simpler to have the very basic syntax "t[] = newElement" instead of
"t[#t+1] = newElement" ... No need to introduce any "@" (ambiguous in your example) or "#+1".
We could also have "t:append(newElement)", but this could conflict with an existing append() method existing as a member "t.append" in "t", or found by an __index access method in its metatable. Instead the "t[]=value" syntax could be bound to an __append(t,value) method settable in the metatable of tables (allowing that method to determine which new index key to assign, if it should be different from #t+1 by default).