lexbor 2.5.0
13 августа, после девяти месяцев разработки, состоялся выпуск 2.5.0 высокопроизводительной библиотеки lexbor, предназначенной для парсинга HTML 5 и CSS.
( читать дальше... )
Всего сообщений: 8
13 августа, после девяти месяцев разработки, состоялся выпуск 2.5.0 высокопроизводительной библиотеки lexbor, предназначенной для парсинга HTML 5 и CSS.
( читать дальше... )
Состоялся выпуск 5.4.0 высокопроизводительной библиотеки Glaze, предназначенной для чтения и записи JSON с удобными возможностями сериализации и десериализации данных.
Также поддерживаются форматы CSV, BEVE и EETF (Erlang External Term Format) (опционально, для компиляции требуются библиотеки Erlang).
Библиотека написана на языке C++ (header-only, стандарт C++23) и распространяется по лицензии MIT.
( читать дальше... )
5 и 20 марта состоялись выпуски 5.0.0 и 5.0.1 высокопроизводительной библиотеки Glaze, предназначенной для чтения и записи JSON.
Также поддерживаются форматы CSV и BEVE.
Библиотека написана на языке C++ (header-only, стандарт C++23) и распространяется по лицензии MIT.
( читать дальше... )
6 января состоялся выпуск 4.3.0 одной из самых быстрых библиотек чтения и записи JSON, написанной на языке C++ (header-only, стандарт C++23) и распространяемой по лицензии MIT.
Также поддерживаются форматы CSV и BEVE.
( читать дальше... )
13 ноября, после более года разработки, состоялся выпуск 2.4.0 высокопроизводительной библиотеки парсинга HTML5 и CSS lexbor, написанной на языке C без сторонних зависимостей, и распространяемой по лицензии Apache 2.0.
Библиотека разделена на модули (Core, CSS, DOM, Encoding, HTML, NS, Punycode, Selectors, Tag, Unicode, URL, Utils), которые могут быть скомпилированы и использованы раздельно (с опцией CMake LEXBOR_BUILD_SEPARATELY=ON
).
Для библиотеки есть сторонние биндинги и врапперы для языков Elixir, Crystal, Python, D, Ruby и PHP.
( читать дальше... )
>>> Подробности
31-го марта и 17-го апреля состоялись выпуски 2.0.0 и 2.1.0 быстрой библиотеки парсинга URL для языка C++ (стандарт C++17).
( читать дальше... )
>>> Подробности
6 апреля, после 20 месяцев разработки, состоялся выпуск 2.2.0 библиотеки парсинга HTML и CSS lexbor, написанной на языке C.
( читать дальше... )
>>> Подробности
RE2C — генератор лексических анализаторов для языков C и C++, созданный в 1993 году Питером Бамбулисом в качестве альтернативы небезызвестному Flex. Основной целью RE2C является генерация очень быстрых лексеров: по скорости исполнения они должны не уступать коду, написанному и оптимизированному вручную (в пределах разумного). В отличие от Flex, RE2C не использует табличную модель лексера: он кодирует конечный автомат прямо в виде программы на С, состоящей из меток и условных переходов. Полученный лексер оказывается не только быстрее, но часто ещё и меньше [1] (RE2C минимизирует конечный автомат и применяет ряд других оптимизаций). Другая особенность RE2C — отсутствие жёсткого интерфейса: в отличие от Flex, он не генерирует код «обвязки» между лексером и внешним миром. Ответственность за написание этого кода остаётся на пользователе, что даёт большую свободу и позволяет приспосабливать лексеры к уже существующему программному окружению.
Смена мажорной версии (впервые за всю историю проекта) объясняется не поломкой обратной совместимости, а нетривиальным расширением возможностей генератора: кроме обычного распознавания регулярных грамматик (англ. recognition) RE2C теперь умеет частичный синтаксический разбор (англ. submatch extraction). Эта возможность легко реализуема на основе недетерминированных автоматов, и поэтому давно присутствует во многих утилитах (grep, sed), библиотеках регулярных выражений (RE2) и языках (Perl, JS). А вот в генераторах лексеров эта возможность обычно отсутствует (Lex, Flex, Quex), корректно работает только на малой части случаев (Ragel) или реализована путём серьёзного усложнения модели (Tlex). Одно из следствий невозможности синтаксического разбора средствами детерминированных конечных автоматов — изначально поломанный оператор предпросмотра в Lex и Flex.
Алгоритм разбора, заложенный в основе RE2C, был предложен Вилле Лаурикари в 2000 году [2]. Этот алгоритм хорош тем, что усложняет модель вычислений ровно настолько, насколько того требует детализация синтаксического разбора в каждом конкретном случае: для обычных задач распознавания модель Лаурикари соответствует простому детерминированному автомату. RE2C использует «улучшенную и дополненную» версию алгоритма, предложенную автором сего поста [3].
[1] Cтатья 1993 года, в которой проведён сравнительный анализ RE2C, Flex и других генераторов
[2] Статья 2000 года, которая описывает быстрый алгоритм разбора
[3] Статья 2017 года, которая описывает новый ещё более быстрый алгоритм разбора
>>> Подробности