Regression mit unärem Plus

7

Bisher konnten numerische Konvertierungen entweder durch Hinzufügen von Null (+0), unärem Plus (+) oder unärem Minus (-) ausgelöst werden:

$ gawk --version
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.6-p1, GNU MP 6.1.2)

$ gawk 'BEGIN {print "01" + 0}'
1

$ gawk 'BEGIN {print +"01"}'
1

$ gawk 'BEGIN {print -"01"}'
-1

Die Konvertierung erfolgt jetzt jedoch nur durch Hinzufügen von Null und unärem Minus:

$ gawk --version
GNU Awk 4.2.0, API: 2.0 (GNU MPFR 3.1.6-p1, GNU MP 6.1.2)

$ gawk 'BEGIN {print "01" + 0}'
1

$ gawk 'BEGIN {print +"01"}'
01

$ gawk 'BEGIN {print -"01"}'
-1

Weiß jemand, wo diese Änderung erwähnt wurde oder warum sie vorgenommen wurde?

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html

Steven Penny
quelle
5
FWIW, das von Brian Kernighan gepflegte awk hatte das Problem, dass +es sich um ein No-Op handelte und keine Konvertierung in numerische Werte verursachte (aus diesem Grund empfehle ich, es aus Gründen der x+0Portabilität hier zu verwenden , auch wenn + xes gemäß POSIX funktionieren sollte). Ich habe es vor einiger Zeit bwk gemeldet. Es sieht so aus, als ob das neue Verhalten in Gawk nicht beabsichtigt ist. Ein Kommentar im Code sagt, // Force argument to be numericgefolgt von etwas, das es nicht tut. Vielleicht möchten Sie es melden.
Stéphane Chazelas
1
Quellcode- Suche nach 'case Op_unary_plus:'
Isaac
@ StéphaneChazelas jetzt behoben github.com/onetrueawk/awk/commit/32093f5
Steven Penny

Antworten:

6

Dies ist sicherlich unbeabsichtigt. Wir (die Gawk- Betreuer) werden versuchen , das Problem zu beheben.

In Zukunft würde es VIEL helfen, wenn solche Fragen an die Gawk-Fehlerberichterstattungsadresse gesendet würden ( [email protected]siehe gawk --help), damit die Entwickler mehr über diese Probleme erfahren und sie beheben könnten.

Arnold Robbins
quelle
1
@ Pierre.Vriens Wie Arnold sagt, war es unbeabsichtigt. Unbeabsichtigte Änderungen können in Versionshinweisen usw. kaum erwähnt werden. Ich gehe jedoch davon aus, dass sie in Zukunft als Fehlerbehebung erwähnt werden können, wenn die Autoren der Meinung sind, dass es sich um einen ausreichend signifikanten Fehler handelt.
Kusalananda
2
Es ist schwierig zu entscheiden, ob etwas an die Adresse für die Fehlerberichterstattung gesendet werden soll, wenn Sie wirklich den Verdacht haben, dass es sich um eine absichtliche Änderung handelt. Sie könnten argumentieren, dass dies in diesem Fall einen Fehler in der Dokumentation darstellt, aber es ist natürlich, die Zeit, die Entwickler damit verbringen, Nicht-Fehler zu testen, minimieren zu wollen.
Toby Speight