The length() function was extended to accept an array argument
and return the number of elements in the array
(see String Functions).

The strftime() function acquired a third argument to
enable printing times as UTC
(see Time Functions).

Version 4.0 of gawk introduced the following features:

Variable additions:

- FPAT, which allows you to specify a regexp that matches
the fields, instead of matching the field separator
(see Splitting By Content).

- If PROCINFO["sorted_in"] exists, ‘for(iggy in foo)’ loops sort the
indices before looping over them. The value of this element
provides control over how the indices are sorted before the loop
traversal starts
(see Controlling Scanning).

- PROCINFO["strftime"], which holds
the default format for strftime()
(see Time Functions).

The special files /dev/pid, /dev/ppid, /dev/pgrpid
and /dev/user were removed.

Support for IPv6 was added via the /inet6 special file.
/inet4 forces IPv4 and /inet chooses the system
default, which is probably IPv4
(see TCP/IP Networking).

Optimizations are enabled by default. Use -s /
--no-optimize to disable optimizations.

For many years, POSIX specified that default field splitting
only allowed spaces and tabs to separate fields, and this was
how gawk behaved with --posix. As of 2013,
the standard restored historical behavior, and now default
field splitting with --posix also allows newlines to
separate fields.