Every way Ember departs from Lua 5.4, with an id, a reason, and a kind.
This page is a template and a discipline, not a finished document — you write it as you go, one
line at a time, and two tests keep it honest:
A corpus case may skip the lua comparison only by naming an id that exists here
(Lab 26).
Every entry with a global name produces a help: line in the diagnostic renderer
(Lab 24).
The kinds matter. A divergence is a decision; a limitation is unfinished work. Conflating
them is how a limitations document becomes an apology and a divergence list becomes an excuse.
Kind
Meaning
DIVERGENCE
We deliberately do something else, for a stated reason
LIMITATION
Not implemented. Belongs in docs/limitations.md too
UNSPECIFIED
Lua does not define it; we do. Ours is a narrowing, not a conflict
Coercion from string is a parse that can fail, turning a type error into a wrong answer far from its cause. Coercion to string in .. is kept, because it is total
D-string-order
DIVERGENCE
Byte-wise comparison
strcoll — locale-dependent
table.sort on strings must not differ between machines. ADR-009
D-pairs-order
DIVERGENCE
Insertion order, guaranteed
unspecified
Reproducible output and non-flaky tests. ADR-008. A promise we cannot withdraw
U-length-holes
UNSPECIFIED
#t is the array part after trailing nils are trimmed
"any border"
Deterministic. A narrowing of Lua's licence, not a conflict
D-eval-order
DIVERGENCE
Operands evaluate left to right, always
unspecified for most expressions
Determinism, and it makes the two backends comparable
An id, and it is referenced from a corpus case or a test. An entry nothing exercises is an
entry nobody can trust.
A reason, not a restatement. "We do it differently" is not a reason. "Coercion from string is
a parse that can fail" is.
The right kind. If the honest reason is "we ran out of time", it is a LIMITATION and it goes
in docs/limitations.md too. Calling unfinished work a divergence is the one dishonest move
available on this page.
A help: line where it applies. A user who types os.time() should be told what happened and
what to do, not just that os is nil.