rendimiento `retrospectivo`

10

Tengo un código usando (looking-back … (line-beginning-position)). Doc cadena de looking-backestados que es mejor evitar esta función debido a la lentitud. Tengo curiosidad de que el siguiente enfoque sea más rápido?

(save-excursion
  (goto-char (line-beginning-position))
  (looking-at regexp stuff))
Geradlus_RU
fuente
Será más rápido Pero este no es un código equivalente.
abo-abo
@ abo-abo, sí, no lo es. Pero en mi caso creo que puedo presentar la looking-atversión fácilmente. Gracias.
Geradlus_RU
2
El mayor problema de rendimiento de mirar hacia atrás es cuando no tiene límite (o un límite que está muy lejos). Si lo considera (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y")), verá que es muy rápido. Ahora cambie la expresión regular a su ".*y"lugar: es insoportablemente lenta, aunque para el lector humano está claro que esto nunca puede coincidir.
YoungFrog

Respuestas:

9

Seguro. Ganará especialmente si solo desea probar char-beforeo buscar hacia atrás una cadena literal. Y si debe usar looking-back, intente usar un LIMITargumento, si es posible.

Vea el error Emacs # 17284 para un ejemplo.

Dibujó
fuente