desempenho "retrospectivo"

10

Eu tenho algum código usando (looking-back … (line-beginning-position)). Doc seqüência de looking-backestados que é melhor evitar essa função por causa da lentidão. Estou curioso se a abordagem a seguir será mais rápida?

(save-excursion
  (goto-char (line-beginning-position))
  (looking-at regexp stuff))
Geradlus_RU
fonte
Será mais rápido. Mas este não é um código equivalente.
abo-abo 27/05
@ abo-abo, sim, não é. Mas, no meu caso, acredito que posso apresentar a looking-atversão facilmente. Obrigado.
Geradlus_RU
2
O maior problema de desempenho do retrospecto é quando ele não tem limite (ou um limite distante). Se você considerar (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y"))que verá que é muito rápido. Agora mude o regexp para ".*y": é insuportavelmente lento, mesmo que esteja claro para o leitor humano que isso nunca pode corresponder.
YoungFrog

Respostas:

9

Definitivamente. Você ganhará especialmente se quiser apenas testar char-beforeou procurar uma string literal para trás. E se você deve usar looking-back, tente usar um LIMITargumento, se possível.

Veja o bug # 17284 do Emacs para um exemplo.

Desenhou
fonte