可选尾随逗号的缺点是什么?

What are the downsides of optional trailing commas?

许多语言在其语法中都有如下几条规则,禁止尾随逗号:

call-expr: ident '(' expr-list? ')';
expr-list: expr | expr-list ',' expr;

但是,以下公式允许(但不要求)尾随逗号,其中有 well-known advantages:

call-expr: ident '(' expr-list? expr? ')';
expr-list: expr ',' | expr-list expr ',';

总是使用它是否有任何缺点,至少在内部?

缺点是允许空条目的歧义。考虑 Javascript 中的以下数组:

  • [1,,3]
  • [1,,3,]

它们相同吗?它们的长度相同吗?应该吗? (答案:是的,但在 IE<=7 中不是)

允许省略过程参数的语言(我特别想到旧的 HP 系统语言 SPL;可能还有其他语言)会失败,因为编译器会假定在该过程不需要的尾随逗号。我承认这是一个小缺点 - 另一方面,IMO 所述的好处同样很小。