在这种情况下,我指的是original-awk/stable,now 2012-12-20-6
。
换句话说,是否有任何重要版本的* nix / BSD可能正在运行AWK版本,而Awk编程语言(Aho,Weinberger,Kernighan)没有准确描述?
你好像在做几个假设并在这里问几个问题。
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仍然得到积极支持甚至发展。
这不是一个答案,但根据my comment这里是POSIX未定义的项目列表,我要求gawk家伙提供警告,当你用--lint
调用gawk时:
请注意,除了POSIX兼容性之外,还有其他可移植性问题。例如,像[[:digit:]]
这样的字符类可以移植到所有POSIX awk但是至少有一个常见的awk不支持,名字很差的nawk
(与80年代中期的awk相比,它在80年代中期出现时是新的 - 现在,不是那么多!)。
此外,上表还没有明确记录为gawk扩展并被--posix
禁用的功能,例如gensub()
以及--lint
已经报告的任何内容 - 我创建的目的是为了获得--lint
输出中包含的“缺失”未定义行为。