169 похожих чатов

Я сейчас разбираюсь с JSON Pointers, пишу парсер (attoparsec). У

меня получилось, он работает, но я как всегда обеспокоен производительностью (конечно, ведь надо обрабатывать гигабайты JSON Pointers!)

Вот так написано в RFC 6901:
reference-token = *( unescaped / escaped )
unescaped = %x00-2E / %x30-7D / %x7F-10FFFF
; %x2F ('/') and %x7E ('~') are excluded from 'unescaped'
escaped = "~" ( "0" / "1" )
; representing '~' and '/', respectively

Вот так получилось у меня:
haskell
referenceTokenParser :: A.Parser T.Text
referenceTokenParser = T.pack <$> A.many' (unescaped <|> escaped)
where
unescaped :: A.Parser Char
unescaped = A.satisfy $ \x -> not (x == '~') && not (x == '/')

escaped :: A.Parser Char
escaped = (A.string "~0" *> pure '~') <|> (A.string "~1" *> pure '/')

Можно ли как-то ускорить это дело? (В документации к attoparsec написано, что takeWhile1 использовать лучше, чем many1 anyChar. Также я нашёл комбинатор peekChar, но немного не уверен, как его применять)

4 ответов

18 просмотров

любой Юникод или только UTF-8?

ㅤ-Атеист Автор вопроса
Cheese Syrowiecki
любой Юникод или только UTF-8?

Unicode string. Как я понимаю, кодировка там одна из этих: UTF-32LE, UTF-32BE, UTF-16LE, UTF16-BE, UTF-8.

ㅤ Атеист
Unicode string. Как я понимаю, кодировка там одна ...

а гигабайты у вас на входе в чём-то конкретном?

ㅤ-Атеист Автор вопроса
Cheese Syrowiecki
а гигабайты у вас на входе в чём-то конкретном?

Ну, блин... Извините, что так плохо написал, но это была шутка, сарказм. Хочется, конечно, написать, чтобы оно работало быстрее. Вообще строку я буду получать из JSON объекта, так что там обязательно будет Text.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта