performances «rétrospectives»

10

J'ai du code à utiliser (looking-back … (line-beginning-position)). La chaîne Doc looking-backindique qu'il vaut mieux éviter cette fonction à cause de la lenteur. Je suis curieux de savoir que l'approche suivante sera plus rapide?

(save-excursion
  (goto-char (line-beginning-position))
  (looking-at regexp stuff))
Geradlus_RU
la source
Ce sera plus rapide. Mais ce n'est pas un code équivalent.
abo-abo
@ abo-abo, oui, ce n'est pas le cas. Mais dans mon cas, je crois que je peux introduire la looking-atversion facilement. Je vous remercie.
Geradlus_RU
2
Le plus gros problème de performance de la rétrospection, c'est quand il n'y a pas de limite (ou une limite éloignée). Si vous considérez que (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y"))vous verrez que c'est très rapide. Maintenant, changez l'expression rationnelle à la ".*y"place: c'est insupportablement lent même s'il est clair pour le lecteur humain que cela ne peut jamais correspondre.
YoungFrog

Réponses:

9

Absolument. Vous gagnerez particulièrement si vous voulez simplement tester char-beforeou rechercher en arrière une chaîne littérale. Et si vous devez utiliser, looking-backessayez d'utiliser un LIMITargument, si possible.

Voir le bogue Emacs # 17284 pour un exemple.

A dessiné
la source