'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
输出中。
在这种情况下,我指的是 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 仍然得到积极支持甚至开发。
这不是答案,但根据 --lint
调用 gawk 时,我要求 gawk 人员提供警告:
请注意,除了 POSIX 兼容性之外,还有其他可移植性问题。例如 [[:digit:]]
之类的字符 类 是所有 POSIX awk 的 table,但至少没有一个常见的 awk 支持,即命名不当的 nawk
(与 70 年代中期的旧 awk 相比,它在 80 年代中期问世时是新的 - 现在,没那么多了!)。
此外,上述 table 不包括明确记录为 gawk 扩展并被 --posix
禁用的功能,例如 gensub()
也不包括 --lint
已经报告的任何内容 - 的我创建它的目的是让 "missing" 未定义的行为包含在 --lint
输出中。