Новая версия языка программирования GNU Awk 4.2.0

После четырёх с половиной лет разработки доступен новый значительный выпуск реализации языка программирования AWK от проекта GNU — Gawk 4.2.0. AWK был разработан в 70-х годах прошлого века и не претерпел значительных изменений с середины 80-х годов, в которых был определен основной костяк языка, что позволило на протяжении последних десятилетий сохранить первозданную стабильность и простоту языка. Несмотря на преклонный возраст, AWK до сих пор активно используется администраторами для выполнения рутинных работ, связанных с парсингом различного рода текстовых файлов и генерации несложной результирующей статистики.

Ключевые изменения:

  • Пои запуске не в режиме POSIX переменные в ENVIRON теперь отражаются в окружение gawk и дочерних программ, запущенных через вызов system ();
  • Увеличено качество псевдослучайных числе, выдаваемых функцией rand (). Порядок чисел в последовательности по-прежнему повторяем, поэтому rand () не подходит для криптографических нужд;
  • Улучшена работа режима вывода отформатированного кода программы. При указании опции »--pretty-print» AWK-программа теперь не запускается;
  • Добавлена возможность сборки с использованием CMake, который теперь позиционируется в качестве альтернативного сборочного инструментария;
  • Добавлена настройка PROCINFO[«NONFATAL»] при которой ошибки ввода/вывода не приводят к завершению выполнения. По аналогии PROCINFO[«redirection», «NONFATAL»] действует для перенаправленных потоков;
  • Добавлена опция PROCINFO[input-file, «RETRY»], при установке которой в случае ошибки ввода/вывода предпринимается повторная попытка выполнения операции;
  • Нарушена бинарная совместимость для C API, Си-приложения связанные с gawk требуют пересборки;
  • Добавлена поддержка строго типизированных констант с регулярными выражениями, задаваемых в виде »@/…/». Такие константы можно присвоить переменным и использовать справа от операторов »~» и »!~», а также в составе выражений «case»;
  • Добавлена функция typeof () для определения типа переменной (array, regexp, string, number);
  • Прекращена поддержка старого механизма подключения расширений, основанного на применении функции «extension»;
  • Прекращена поддержка платформы GNU/Linux на системах Alpha;
  • Прекращена поддержка операционной системы MirBSD;
  • Возвращён в строй порт для DJGPP, для которого нашёлся сопровождающий;
  • Включена по умолчанию оптимизация кода выполняемых приложений, для отключения которой следует использовать опцию »-s/--no-optimize';
  • При наличии задействован механизм fwrite_unlocked, позволяющий на 7% — 18% поднять скорость вывода gawk '{ print }' для больших файлов;
  • Ускорены операции в режиме IGNORECASE;
  • Использование отрицательных значений в битовых функциях теперь приводит к завершению работы с ошибкой;
  • В mktime добавлен второй аргумент для включения преобразования времени в UTC вместо локального часового пояса;
  • Добавлен массив PROCINFO[«argv»], в котором сохраняются все аргументы командной строки.

© OpenNet