【緊急特集】gawk 4.0.1 リリース間近!

gawk 4.0.1 のベータ版がリリースされました。 主にバグ修正ですが、sub() や gsub() でのバックスラッシュの挙動が変わりますので注意が必要です。

リリースノート

This note is to announce the first BETA release of GNU Awk 4.0.1.

It is available from:

        http://www.skeeve.com/gawk/gawk-4.0.0h.tar.gz

This is a bug-fix release.

As far as I can tell, the documentation and code have both hit the
freeze point.

So, why do a beta release? So that you, yes you, the end user, can see
if anything I've done breaks gawk for you.  Then you can TELL ME ABOUT
IT so that I can fix it for the final release.

Thanks,

リリースノートの日本語訳

GNU Awk 4.0.1 の最初のベータリリースのアナウンスです。

以下から入手できます:

        http://www.skeeve.com/gawk/gawk-4.0.0h.tar.gz

バグ修正のリリースになります。

ドキュメントとコードの両方をフリーズしたいと思います。

ベータリリースとは何か? あなた方、エンドユーザーが修正した
gawk が変なことになっていないかを確認するものです。
最終リリースまでに修正できるように「問題点について報告して
ください」。

Changes

Changes from 4.0.0 to 4.0.1
---------------------------

1. The default handling of backslash in sub() and gsub() has been reverted to
   the behavior of 3.1. It was silly to think I could break compatibility that
   way, even for standards compliance.

XXX. Lots of minor bugs fixed and portability clean-ups along the way. See
   the ChangeLog for details.

Changes の日本語訳

4.0.0 から 4.0.1 への変更
-------------------------

1. sub() と gsub() のバックスラッシュのデフォルトの扱いを 3.1 の
   時と同じ振る舞いに戻します。標準を守るべきところなのに、互換性を
   なくしてしまったのは申し訳ないと思っています。
   ※訳注: 標準 = POSIX 2008

XXX. 多くの小さなバグを修正し、汎用性を見直しています。詳細は
     ChangeLog を参照してください。

どういうこと?

AWK Users JP :: 【緊急特集】最新の gawk 4.0.0 を追え! にも書いた内容ですが、gawk 4.0.0 ではバックスラッシュの扱いが変更になっています。 この中で「POSIX 2008 に合わせて修正」したはずなのに、元に戻すという事態になっています。

以下のようなプログラムで検証できます。

#! /usr/local/bin/gawk -f
# sub.awk

BEGIN {
    str = "abc";
    sub(/a/, "&", str);
    print str;

    str = "abc";
    sub(/a/, "\&", str);
    print str;

    str = "abc";
    sub(/a/, "\\\&", str);
    print str;

    str = "abc";
    sub(/a/, "\\\\\&", str);
    print str;

    str = "abc";
    sub(/a/, "\\\\", str);
    print str;

    str = "abc";
    sub(/a/, "\\q", str);
    print str;
}

gawk 4.0.0 の場合には以下のような挙動になります。

$ gawk4.0.0 -f sub.awk
abc
&bc
\abc
\&bc
\bc
\qbc

一方で gawk 4.0.1 では以下のような挙動になります。

$ gawk4.0.1 -f sub.awk
abc
&bc
\abc
\&bc
\\bc                    <-- ここが異なる
\qbc

gawk は様々なシステムに組み込まれているため、標準化すら自由にできなくなっているということでしょうか。 Solaris などの awk (通称 "broken awk") のように、互換性保持のためにバグを残すという事態にならないようにして欲しいものですね。

tag_gawk.png