Домой Софт macOS и Linux Библиотека pugixml 1.16: новые функции и исправления к 20-летию проекта

Библиотека pugixml 1.16: новые функции и исправления к 20-летию проекта

К юбилею проекта разработчики выпустили крупное обновление: поддержка новых стандартов, ускорение парсинга и улучшение безопасности кода.

Библиотека pugixml 1.16: новые функции и исправления к 20-летию проекта
Библиотека pugixml 1.16: новые функции и исправления к 20-летию проекта — иллюстрация к материалу. Источник: linux.org.ru

16 июня состоялся релиз версии 1.16 библиотеки pugixml — популярного кроссплатформенного инструмента для парсинга и обработки XML-файлов. Выход обновления ознаменовал важную веху: проекту исполняется 20 лет. Библиотека распространяется под лицензией MIT и известна высокой производительностью и гибкостью.

Pugixml предоставляет пользователям DOM-подобный интерфейс, позволяющий легко обходить узлы документа и изменять их структуру. Инструмент поддерживает стандарт XPath 1.0 и обладает встроенной поддержкой всех основных кодировок Юникода (UTF-8, UTF-16, UTF-32, UCS-2) с функцией автоматического преобразования. Библиотеку можно использовать в режиме «только заголовочные файлы», при этом она не требует наличия стандартной библиотеки C++ или поддержки исключений.

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

Изменение поведения

  • При наличии в элементе одного пустого дочернего PCDATA-узла теперь используются пустые теги (если не активирован параметр format_no_empty_element_tags).

Функциональные улучшения

  • Добавлена опция PUGIXML_CHARCONV_FLOAT, требующая C++17. Она позволяет преобразовывать числа с плавающей запятой независимо от локали, что положительно сказывается на производительности.
  • Появились новые функции xml_node::ensure_child и xml_node::ensure_attribute, которые автоматически создают дочерний элемент или атрибут, если таковой отсутствует.
  • Оптимизирована скорость поиска узлов и атрибутов по имени.
  • Исключено выделение памяти при попытке загрузки документа из пустого буфера.

Развитие XPath и исправленные ошибки

  • Повышена скорость выполнения XPath-запросов, включающих вычисления или сравнение значений атрибутов (например, @attr > 5), а также запросов, ориентированных на выборку узлов по имени.
  • Устранено переполнение стека, возникавшее при удалении сильно вложенных поддеревьев.
  • Исправлены ошибки целочисленного переполнения, способные привести к сбоям при загрузке файлов размером более 1 ГБ на 32-разрядных системах (в режиме PUGIXML_WCHAR_MODE).
  • Исправлено некорректное разыменование указателя в объектах xpath_variable_set при работе с неинициализированными строковыми переменными.

Совместимость и поддержка сборки

  • Расширена поддержка CMake, включая опцию PUGIXML_INSTALL_SOURCE для инсталляции pugixml.cpp.
  • Добавлены пакеты NuGet и файлы проекта для Visual Studio 2026.
  • Решены проблемы совместимости с модулями C++20, а также исправлены предупреждения компиляторов Clang и GCC 16.
  • Устранены ошибки компиляции для старых сред, таких как Embarcadero C++ XE5, и исправлен ряд ложных срабатываний статических анализаторов.
Источник: https://www.linux.org.ru