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 ответов

16 просмотров

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

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

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

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

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта