如何禁用 SML/NJ 中的非标准功能

How to disable non-standard features in SML/NJ

SML/NJ提供了一系列non-standard features,例如高阶模块、向量字面量语法等

有没有办法禁用 SML/NJ 中的这些非标准功能,可能是通过一些命令行参数,或者理想情况下,使用 CM 指令?

只要看看解析器使用的语法,我就会说没有办法做到这一点。来自 "admin/base/compiler/Parse/parse/ml.grm":

apat'   : OP ident      (VarPat [varSymbol ident])
| ID DOT qid        (VarPat (strSymbol ID :: qid varSymbol))
| int           (IntPat int)
| WORD          (WordPat WORD)
| STRING        (StringPat STRING)
| CHAR          (CharPat CHAR)
| WILD          (WildPat)
| LBRACKET RBRACKET (ListPat nil)
| LBRACKET pat_list RBRACKET    (ListPat pat_list)
| VECTORSTART RBRACKET  (VectorPat nil)
| VECTORSTART pat_list RBRACKET (VectorPat pat_list)
| LBRACE RBRACE     (unitPat)
| LBRACE plabels RBRACE (let val (d,f) = plabels
                         in RecordPat{def=d,flexibility=f}
                         end)

VectorPat 内容与其余模式完全混合。 VectorPat 的递归 grep 也将显示没有任何选项可以在其他任何地方关闭它。