LINUX.ORG.RU

lexbor 2.4.0

 , , , ,


2

3

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.

Список изменений:

  • Core: увеличена производительность с помощью SWAR (packed SIMD);
  • URL: добавлен API для изменения объекта URL;
  • URL: добавлена возможность клонирования url;
  • URL: удаление новых строк и табуляции перед парсингом;
  • Encoding: обновлён индекс GB18030-2022;
  • Encoding: уменьшен размер статических данных;
  • URL: увеличение производительности;
  • исправления ошибок и улучшения тестов.

>>> Сайт проекта

>>> Документация

>>> Исходный код

Автор библиотеки, Александр Борисов, ранее работал в NGINX, и участвовал в разработке JavaScript-движка NJS:

-- $ git-summary
authors     :
 1575  Dmitry Volyntsev      64.2%
  313  Igor Sysoev           12.8%
  156  Alexander Borisov     6.4%
  108  hongzhidao            4.4%

>>> Подробности

★★★★★

Проверено: CrX ()
Последнее исправление: dataman (всего исправлений: 5)

@lexbor, к сожалению, тег импортозамещение не поместился. :)

dataman ★★★★★
() автор топика

Мне не нужно, но за сишку и SWAR лайк. Можно ссылку не на википедию, а на примеры SWAR в данном проекте?

jpegqs
()
Ответ на: комментарий от jpegqs

https://github.com/lexbor/lexbor/pull/223
https://github.com/lexbor/lexbor/blob/master/source/lexbor/core/swar.h
Оказалось, что без использования SSE, AVX и т. д., в отличие от StringZilla 3.8.1.

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

Так себе SWAR, один маленький приём в одном макросе, еще и скопированный с известного сайта. Который используется в strlen как минимум с девяностых. Я считаю это слишком мелким для упоминания в новостях как SWAR.

Ситуация прям под мем «а разговоров то было».

А вот это, извините, что?

if (LEXBOR_SWAR_IS_LITTLE_ENDIAN) {

Почему для big endian нет никакого кода в функции? Этот метод работает и для BE, нужно лишь учитывать что байты в обратном порядке при получении индекса. Это какое-то дилетантство, лайк забираю.

jpegqs
()
Последнее исправление: jpegqs (всего исправлений: 1)
Ответ на: комментарий от jpegqs

слишком мелким для упоминания в новостях как SWAR

Есть в оригинале.

лайк забираю

Но на сишке же! :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Оказалось, что без использования SSE, AVX и т. д., в отличие от StringZilla 3.8.1.

Вы считаете не использование векторов плюсом? Делаешь платформо-независимый код с этим трюком, добавляешь для популярных платформ использование векторных инструкций. Будет быстро и портабельно.

jpegqs
()
Ответ на: комментарий от jpegqs

Вы считаете не использование векторов плюсом?

Нет, конечно. Как написал @lexbor в PR:

In the end, I came to the conclusion that there is no super performance gain here.
One thing is certain, the patch does not slow down the code, it speeds it up a bit.
I’m thinking of accepting the patch, and improving SWAR usage a bit in the future.
There are many places in the lexbor project where this approach can be used, for example in CSS.

добавляешь для популярных платформ использование векторных инструкций

Думаю, автор будет не против такого PR. ;)

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Хотелось бы еще заметить, что писал этот недо-SWAR не автор проекта, а какой-то левый человек.

Который решил для этого недо-SWAR создать аж отдельный хидер swar.h.

Код его, что делает «чуть лучше» не читает данные выровнено, а использует memcpy чтобы не решать эту проблему:

            size_t bytes;
            memcpy(&bytes, data, sizeof(size_t));

Если компилятор не соптимизирует вызов memcpy, то будет только хуже.

P.S.: Когда автор называет проект в честь себя и чем это плохо - советую посмотреть соседнюю тему про ReiserFS.

jpegqs
()
Ответ на: комментарий от jpegqs

Когда автор называет проект в честь себя и чем это плохо

Надеюсь, что он читает ЛОР:

Последнее посещение: 06.02.24
Число комментариев: 1

dataman ★★★★★
() автор топика
Ответ на: комментарий от jpegqs

Откуда столько критики на ровном месте?

Код завёз разработчик из PHP (Niels Dossche). Начинание хорошее, буст от этого есть, и вообще там ребята молодцы. В дальнейшем это направление будет развиваться.

Собственно, он затащим в новый релиз PHP (8.4 от 21.11) много кода с проекта lexbor для «Implement DOM HTML5 parsing and serialization RFC.»

Про название проекта. Я ничего, вообще ничего, не вижу «криминального» в том как проект назван.

P.S.: Если вы видите как можно улучшить то не стесняйтесь присылай PR. Там мы всё посмотрим и обсудим.

lexbor
()
Ответ на: комментарий от lexbor

С возвращением! :)

и обсудим

На английском? А то я читаю на нём хорошо, а пишу - плохо.


Вижу, в Discussions на GH почти ничего нет.


И советую заполнить здесь профиль, как будет время.

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

Лучше писать на английском, чтобы все понимали. Воспользуйтесь хорошим переводчиком https://www.deepl.com/. А так хоть лично на почту писать можете.

lexbor
()
Ответ на: комментарий от jpegqs

P.S.: Когда автор называет проект в честь себя и чем это плохо - советую посмотреть соседнюю тему про ReiserFS.

Хотел привести как контрпример Debian, потом вспомнил, как он кончил… Ну Линус живой пока и на свободе. Правда на старости слегка так лет головой тронулся, но кто из нас без греха…

CrX ★★★★★
()
Ответ на: комментарий от LamerOk

Спасибо, не знал. Ведь это было до моей линуксоизации. :)

dataman ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.