'original-awk' Debian 软件包是否足以验证 AWK 脚本的 POSIX 兼容性?

Is the 'original-awk' Debian package sufficient to verify the POSIX compatibility of an AWK script?

在这种情况下,我指的是 original-awk/stable,now 2012-12-20-6

换句话说,是否有任何重要版本的 *nix/BSD 可能是 运行 The Awk Programming Language(Aho、Weinberger、Kernighan)未准确描述的 AWK 版本?

您似乎在这里做出了几个假设并提出了几个问题。

https://github.com/onetrueawk/awk 是否完全实现了 POSIX 规范而没有其他任何东西?

我认为答案是否定的;会有POSIX没有描述的行为,要么是因为规范不够详细,要么是因为作者实现了标准没有规定的特性。

另请注意,FIXES 描述了从今年早些时候开始的 POSIX 兼容性增强;大概这不是最后一个,即使维护者的意图很可能是坚持 POSIX.

POSIX也是移动靶。虽然进展缓慢,但它得到更新。

1988年的书对应2019年的POSIX标准吗?

不,显然不是。它们是两种完全不同的文档类型,用途截然不同。

最初的 Awk 实现是否影响了 POSIX?很明显。他们有没有接受它并将其宣布为一个真正的参考实施?显然不是。一方面,这肯定会危及他们的使命 - 如果您希望互操作性委员会的工作在该领域取得成功,您不能以牺牲其他人为代价来支持任何特定的实施。

POSIX 是一个合理的兼容性基准吗?

它最终应该是,但总会有一些情况,比如说,小内存占用比实际互操作性更重要,更不用说需要花费时间和金钱才能获得的橡皮图章了。

(不要误会我的意思,在很多情况下,我和许多其他人会为该认证付费,或者如果它丢失了,我们会把我们的钱带到别处。我只是指出在很多情况下我们不在乎。)

无论如何,您似乎从错误的角度来处理这个问题。除非您比 Awk 作者更了解 POSIX 规范,否则您的脚本中可能存在互操作性错误,如果您的脚本在完美实现相关 POSIX 规范的 Awk 实现下运行,这些错误不会消失。你的测试套件应该测试特定的行为,而不是相信规范及其实现从你的角度来看没有错误。

bwk Awk 是兼容性的最低基准吗?

不,我想您会发现还有其他几种 Awk 实现,在某些情况下它们更原始。

我的记忆是模糊的,但我记得 Awk 领先的情况(也许是支持 Unicode 的东西?)和 mawk 而不是 nawk 的情况这不能表现。

在后台,有人在舞台上窃窃私语"Busybox."

是2012年的代表作吗?

绝对不是。如上所述,bwk 的 Awk 仍然得到积极支持甚至开发。

这不是答案,但根据 这是 POSIX 未定义的项目列表,当你用 --lint 调用 gawk 时,我要求 gawk 人员提供警告:

请注意,除了 POSIX 兼容性之外,还有其他可移植性问题。例如 [[:digit:]] 之类的字符 类 是所有 POSIX awk 的 table,但至少没有一个常见的 awk 支持,即命名不当的 nawk(与 70 年代中期的旧 awk 相比,它在 80 年代中期问世时是新的 - 现在,没那么多了!)。

此外,上述 table 不包括明确记录为 gawk 扩展并被 --posix 禁用的功能,例如 gensub() 也不包括 --lint 已经报告的任何内容 - 的我创建它的目的是让 "missing" 未定义的行为包含在 --lint 输出中。