Skip to content

Releases: benhoyt/goawk

v1.29.0: opt-in Unicode chars mode

18 Sep 20:56
Compare
Choose a tag to compare

This release adds Unicode chars mode with goawk -c (or by setting Config.Chars to true when using the Go API). The default is bytes mode as it was before (except that printf %c used chars mode by default as of v1.28.0 -- now it only does if chars mode is enabled). Note that this is the same default as mawk, but the opposite of Gawk (which uses gawk -b to switch to bytes mode).

Chars mode applies to index(), length(), match() (including RSTART and RLENGTH), substr(), and printf's %c verb.

For example, as of version v1.29.0, you can do this:

$ goawk 'BEGIN { print length("a"), length("絵") }'
1 3
$ goawk -c 'BEGIN { print length("a"), length("絵") }'
1 1

Full Changelog: v1.28.1...v1.29.0

v1.28.1

15 Sep 21:58
Compare
Choose a tag to compare

I forgot to bump up the version number for the v1.28.0 release, so this is a patch release with a single commit to do just that.

See also the release notes for the v1.28.0 release.

v1.28.0

14 Sep 05:23
Compare
Choose a tag to compare

NOTE: The original binaries were for the v1.28.0 tag, but had the old v1.27.0 version number in the file names (and in the goawk -version output). I've uploaded corrected v1.28.0 binaries here, but there's also a new v1.28.1 patch release with this fixed.

What's Changed

  • Fix evaluation of empty {} and END{} by @benhoyt in #230
  • fix: close file in Cover.WriteProfile by @testwill in #232
  • Fix number formatting on non-64bit architectures by @guilherme-puida in #235
  • Make printf %c work on Unicode codepoints by @oliverkwebb in #236
  • Improve error message when missing -H or in BEGIN by @benhoyt in #239
  • Add printf %i, %a, %A; Fix %o, %x, %X (they should be unsigned) by @benhoyt in #240
  • Make srand() use unix time in seconds, and set seed for next srand() by @benhoyt in #241
  • Bump up minimum supported Go version to 1.18, and test on 1.23 by @benhoyt in 7f49055

New Contributors

Full Changelog: v1.27.0...v1.28.0

v1.27.0: allow redirection to /dev/stderr on Windows, more

20 Apr 04:46
Compare
Choose a tag to compare

What's changed

  • Fix wrong precedence of 'expr | getline' expressions by @fioriandrea in #216
  • Use C.UTF-8 as locale when invoking external awk program by @guilherme-puida in #226 (first-time contributor)
  • New feature: Make redirecting to /dev/stderr work on Windows by @benhoyt in #225

Full Changelog: v1.26.0...v1.27.0

v1.26.0

28 Feb 19:26
Compare
Choose a tag to compare

What's Changed

  • Fix rare race in pipe-to-command close() result test by @juster in #213
  • Fix #190: FS regex [^,]* fails on empty field by @fioriandrea in #214
  • Fix issue #79: Incorrect parsing of complex ++ expressions by @fioriandrea in #215
  • Allow optional newline between "do {}" and "while" by @benhoyt in #220
  • Distinguish between /regexp/ and "regexp" in stringified output by @ypdn in #222

New Contributors

  • @ypdn made their first contribution in #222

Full Changelog: v1.25.0...v1.26.0

v1.25.0: PGO, better exit codes, \u escape

26 Sep 08:56
Compare
Choose a tag to compare

This release includes several minor changes:

  • Build binaries with PGO on Go 1.21. GoAWK on Go 1.21 is about 10% faster than on Go 1.20, and PGO makes it another 5-6% faster.
  • Bumps up the minimum supported Go version from 1.15 to 1.16.
  • Makes the return value of system() and close() for pipes more closely match Gawk's. Internal refactoring of the input and output stream implementation to make this happen. See issues #203 #204 #205 and thanks @juster!
  • Support the \u Unicode string escape that's been added to onetrueawk and Gawk recently. #212

Version 1.24.0: --csv and bug fixes

14 Jul 20:35
Compare
Choose a tag to compare

This release contains several minor fixes and the addition of --csv (it's an alias for -i csv). This is for compatibility with onetrueawk and Gawk, which are both adding that option soon.

It also contains a minor backwards-incompatible change: in CSV input mode (-i csv), the behaviour of the two-argument form of split() now parses using CSV splitting, rather than FS. This is also in line with the upcoming --csv feature of onetrueawk and Gawk. This is very unlikely to affect anyone, as CSV mode is relatively recent, and it seems unlikely that anyone is using the two-argument form of split() in CSV mode in any case.

Full list of changes:

  • Allow { blocks } with just semicolons in them in #192 -- thanks @raygard for the bug report
  • Ensure exit without status code doesn't set exit code in #193 -- thanks @raygard for the bug report
  • Make two-argument split() respect CSV input mode in #198
  • Add --csv option, in line with upcoming AWK and Gawk feature in #199
  • Update CSV doc to mention --csv in #200
  • Wait for command to finish when a pipe is closed in #201 -- thanks @xonixx for the bug report

Version 1.23.3

11 Jun 08:25
Compare
Choose a tag to compare

This is a patch version that fixes panics when compiling AWK code that uses complex, mutually-recursive functions (fixed in PR #187). Thanks @xonixx for the test case.

Version 1.23.2

05 Jun 23:07
92e0799
Compare
Choose a tag to compare

This is patch release to fix a bug where mutually-recursive functions would cause an "undefined function" error in the resolver (PR #184). Thanks @xonixx for the bug report (#183).

Version 1.23.1

18 May 05:52
230d423
Compare
Choose a tag to compare

This is a patch release that fixes a bug in 1.23.0 -- there was a bug that caused a panic in the resolver step with code like function f1(A) {} function f2(x, A) { x[0]; f1(a); f2(a) }. Fixed in #178.

While we're at it, also fix a panic with certain obscure regexes (#179) and limit ARGC to a reasonable maximum (#180).

All three of these issues were found by fuzzing: go test ./interp -fuzz=FuzzSource