20 декабря 2011 г.

Data.ByteString, Data.Text и Text.Parsec

Вчера весь день ломал себе черепную коробку об матчинг юникодных символов парсековыми 'char', 'oneOf' и 'noneOf' в условиях парсера над ByteString-ом. То юникоды не матчились (если делать внаглую), то аутпут бился (если делать Stream над ByteString с UTF8.uncons). И так и эдак выходило криво.

Сейчас вот утром встал, перепилил всё на Data.Text буквально за 15 минут — код сократился процентов на 15-20, глюки исчезли. волосы стали мягкими и шелковистыми.

Такие дела. Надо было это вчера делать, может сны бы снились не такие мрачные.

P.S. Что характерно, импортер на питоне и реглуярках раобтает раз в 100 (буквально) медленней, чем хаскельный на парсеке, который я запускаю через runghc (пока пилю).

8 коммент.:

  1. ну дак - сложно придумать что-то, что тормозит сильнее питона

    ОтветитьУдалить
  2. АнонимныйDec 20, 2011 04:09 AM

    ты главное работу найди на хаскеле

    ОтветитьУдалить
  3. АнонимныйDec 20, 2011 07:23 AM

    А что у описанного способа те же возможности что и у "регулярок" при такой производительности ? Плюс к этому - регулярки это наверное не самый быстрый способ решать эту задачу.

    ОтветитьУдалить
  4. Ну, учитывая, что регулярками описываются только регулярные языки, то да, у парсека больше возможностей.

    ОтветитьУдалить
  5. Вы для какой цели петон парсите, если не секрет? Часом не конкурент pylint?

    ОтветитьУдалить
  6. Нет, я не парсю питон %) Если бы и стал, то явно не регулярками.

    Я переношу архив одной газеты в новый формат. Просто архивные статьи абы как сделаны, поэтому приходится восстанавливать структурированную инфу буквально по крупицам отовсюду.

    ОтветитьУдалить