Мне кажется или троллят нас, — "на более живые языки Ruby, Perl, Go.". Мне перл нравится. Он стабилен и надежен. Он помогает решать очень много задач + к нему можно прикрутить С и вообще стать непобедимым (к другим тоже можно, да) :)
Задачи у нас разные. Он (Gumbo) работает по третьему типу (описано в статье). «Парсим и Умираем» — эта особенность всех парсеров. Именно эта особенность не позволяет им развиться во что-то большее, у них есть потолок. Городить надстройки над этим — костыль. Парень из гугла молодец, он решил конкретную задачу — парсить HTML 5.
Все тестирование сводится к проверки что всё работает по спецификации, и поиску ошибок, пока вручную. Руки не доходят прогнать html5lib тесты, сделать не сложно, но вот руки пока не дошли. Будут обязательно в ближайшее время. Это крайне важная часть, чтобы дальнейшие изменения не ломали логику построения дерева. Если руководство разрешит то завтра же и сделаю. Спасибо, что напомнили.
Нет. Ничего не имею против гугла или его парсера, но нет. Я смотрел его, правда когда всё это задумывалось и реализовывалось про гугл парсер ничего не было слышно, его ещё не было. Мне не нравится как написан их парсер. Мы с ним в разных весовых категориях.
Gumbo is intentionally designed to turn an HTML document into a parse tree, and free that parse tree all at once.
Более того, первый мой парсер так и был написан. Так как не надо было заботиться о последующей работе с деревом, парсер работал крайне быстро, делал 1000 страниц за ~0.300 сек.
Да, я даже скачал её, но это было дней 20 назад, наверное она уже всё, не успел. На данном этапе я активно ищу баги. Гоняю valgrind. Статические анализаторы следующие. + покрытие тестами. Работы много.
Мне предоставили 7ГБ порнушных html страничек (~62000 штук), минимальный размер 3 938 Б (таких не много), а максимальный 64 738 525 Б (таких тоже не много). Парсер обрабатывает их за ~100 сек. на 2,3 GHz Intel Core i7.
Я ставил себе задачу парсить 1000 за секунду. Рандомно брал 1000 страниц, среднее время парсинга составило 0.8 сек. Вообще, наверное, сейчас про скорости говорить не совсем корректно. Сейчас основная задача обеспечить нужный функционал и стабильность работы. Мест где можно разогнать там очень много. Старался писать код так чтобы в дальнейшем можно было «разогнать» его. По скоростям с другими не сравнивал, но мне тут сказали, что даже в однопоточном режиме он быстрее гугловского, возможно это правда.
В недалёком будущем, как все леса сниму, обязательно проведу тесты, построю графики и прочее. Сейчас это beta. Суть её в том чтобы получить фитбэк. Ведь возможно, что это никому не нужно и тогда что-то делать дальше не будет иметь смысла.
А если серьезно, Си мне нравиться. Вначале начинал писать на плюсах, ничего против плюсов не имею, но плюсы всегда меня уводили в сторону. В том плане, что если я делал что-то не так, грубо говоря «конструктор» не сходился, то плюсы всегда предлагали что-то чтобы решить проблему. В какой-то момент код стал состоять из костылей, точнее выглядело всё как костыли. Появлялась ЛЕНЬ, зачем переделывать затык (а порой переделывать приходилось много, сложно рассчитать архитектуру такого проекта с разбега) если можно использовать какую-то фишку плюсов. Да и говоря откровенно, — я не знаю плюсы на столько чтобы писать на них что-то серьёзное. Знаю в плюсах, как наверное и многие, какой-то срез которым могу пользоваться.
Где-то читал такой забавный аргумент — компилятор Си можно написать в одну рожу, а вот Спп нет. Не хочу развивать флейм про языки. Мне нравится Си.
Память не выделаю на каждый чих, там есть что-то вроде «псевдо-менеджера» памяти.
Там есть функции у которых в конце имени есть "_single" — это значит что будет фигачить без тредов.
Вообще, меня просили сделать опцию сборки для выключения тредов вообще, на моменте компиляции. Сделаю на этих выходных.
Про винду. Я всё писал так, чтобы под студией собиралось. Даже есть созданный проект. Но с того времени были добавлены всякие файлы которых в VS проект не включены. В общем, проще говоря, нужно немного манипуляций и будет работать. Сам код (и трэды) должны корректно собираться и работать под Windows. Так же, на этих выходных оформлю, это не займёт много времени.
Gumbo is intentionally designed to turn an HTML document into a parse tree, and free that parse tree all at once.
Более того, первый мой парсер так и был написан. Так как не надо было заботиться о последующей работе с деревом, парсер работал крайне быстро, делал 1000 страниц за ~0.300 сек.
Буду разбираться.
Я ставил себе задачу парсить 1000 за секунду. Рандомно брал 1000 страниц, среднее время парсинга составило 0.8 сек. Вообще, наверное, сейчас про скорости говорить не совсем корректно. Сейчас основная задача обеспечить нужный функционал и стабильность работы. Мест где можно разогнать там очень много. Старался писать код так чтобы в дальнейшем можно было «разогнать» его. По скоростям с другими не сравнивал, но мне тут сказали, что даже в однопоточном режиме он быстрее гугловского, возможно это правда.
В недалёком будущем, как все леса сниму, обязательно проведу тесты, построю графики и прочее. Сейчас это beta. Суть её в том чтобы получить фитбэк. Ведь возможно, что это никому не нужно и тогда что-то делать дальше не будет иметь смысла.
Во-первых это красиво! :)
А если серьезно, Си мне нравиться. Вначале начинал писать на плюсах, ничего против плюсов не имею, но плюсы всегда меня уводили в сторону. В том плане, что если я делал что-то не так, грубо говоря «конструктор» не сходился, то плюсы всегда предлагали что-то чтобы решить проблему. В какой-то момент код стал состоять из костылей, точнее выглядело всё как костыли. Появлялась ЛЕНЬ, зачем переделывать затык (а порой переделывать приходилось много, сложно рассчитать архитектуру такого проекта с разбега) если можно использовать какую-то фишку плюсов. Да и говоря откровенно, — я не знаю плюсы на столько чтобы писать на них что-то серьёзное. Знаю в плюсах, как наверное и многие, какой-то срез которым могу пользоваться.
Где-то читал такой забавный аргумент — компилятор Си можно написать в одну рожу, а вот Спп нет. Не хочу развивать флейм про языки. Мне нравится Си.
Память не выделаю на каждый чих, там есть что-то вроде «псевдо-менеджера» памяти.
Там есть функции у которых в конце имени есть "_single" — это значит что будет фигачить без тредов.
Вообще, меня просили сделать опцию сборки для выключения тредов вообще, на моменте компиляции. Сделаю на этих выходных.
Про винду. Я всё писал так, чтобы под студией собиралось. Даже есть созданный проект. Но с того времени были добавлены всякие файлы которых в VS проект не включены. В общем, проще говоря, нужно немного манипуляций и будет работать. Сам код (и трэды) должны корректно собираться и работать под Windows. Так же, на этих выходных оформлю, это не займёт много времени.
Со временем всё будет, сейчас я один и разорваться мне сложно, есть и основная работа которой нужно уделять много времени.