Table constructor

A table constructor is syntactic sugar for an array constructor:

  1. {"key1": "value1", "key2", "key3": "value2"}
  2. # is the same as:
  3. [("key1", "value1"), ("key2", "value2"), ("key3", "value2")]

The empty table can be written {:} (in contrast to the empty set which is {}) which is thus another way to write as the empty array constructor []. This slightly unusual way of supporting tables has lots of advantages:

  • The order of the (key,value)-pairs is preserved, thus it is easy to support ordered dicts with for example {key: val}.newOrderedTable.
  • A table literal can be put into a const section and the compiler can easily put it into the executable’s data section just like it can for arrays and the generated data section requires a minimal amount of memory.
  • Every table implementation is treated equal syntactically.
  • Apart from the minimal syntactic sugar the language core does not need to know about tables.