Profiling de Emacs e instalación Emacs 26

Publicado el Viernes, 28 de septiembre de 2018

Editando un archivo relativamente largo de código, me empecé a frustrar porque el desplazamiento y renderizado de código andaba lento. Lo primero que tenía que hacer era encontrar el culpable de la lentitud. Por suerte Emacs tiene incorporado un profiler. Para activarlo tenemos que usar M-x profiler-start y seleccionar si queremos hacer profiling de cpu, memoria o ambos. Mi problema parecía de cpu porque se trancaba en momentos que intentaba desplazarme rápido por varias líneas de código. Con M-x profiler-report, podemos ver un buffer nuevo que nos muestra los resultados. Y un test bastante corto mostró cuál era el problema:

Emacs Profiler

No olviden ejecutar M-x profiler-stop si están probando algo, porque no deja de gastar algunos recursos extra tenerlo corriendo.

El nombre linum me resultaba familiar por haber leído al respecto antes, particularmente relacionado a la lentitud de Emacs. Se trata de una biblioteca que provee el número de línea, y viene incluida con Emacs desde su versión 22. Como Emacs no proveía ver el número de línea de forma nativa, las bibliotecas de número de línea en general son bastante lentas.  Pero en la versión estable actual, Emacs 26, finalmente se implementó el número de línea nativo. Así que era el paso que me faltaba para actualizar a Emacs 26. De los cambios de la versión 26:

Ahora Emacs soporta mostrar el número de líneas en el buffer. Esto es similar a lo que provee `linum-mode`, pero mucho más rápido y sin usurpar el margen para los números de línea. Personaliza la variable local de buffer 'display-line-number' para activar este display opcional. Alternativamente, se puede usar el modo menor 'display-line-numbers-mode' o el global 'global-display-line-numbers-type' con el mismo valor que 'display-line-numbers'.

Los números de línea no se muestran en las ventanas de minibuffers y tooltips, porque no son útiles ahí (...)
'linum-mode' y todos los paquetes similares se vuelven obsoletos de ahora en adelante. Se alenta a los usuarios y desarrolladores a cambiar a esta nueva característica en su lugar.

Lamentablemente en Debian y Ubuntu todavía no han actualizado a la versión 26.1 de Emacs. En ArchLinux sí, como era de esperarse. Pero por suerte a los que usamos .deb, siempre nos salva un ppa. En este caso el PPA de Kevin Kelley: https://launchpad.net/~kelleyk/+archive/ubuntu/emacs

Dicho repositorio contiene paquetes basados en las versiones estables de Emacs: 25 y 26. Así que lo agregué a mi apt y procedí a instalar emacs26. Lo bueno es que emacs25 y emacs26 pueden convivir en el sistema. Así que en este momento tengo ambos por las dudas que encuentre alguna cosa que no funcione perfecto en Emacs 26 y pueda usar 25 como respaldo. Por ahora viene todo bien.

Con respecto a la lentitud, ni bien actualicé a la versión más nueva abrí el mismo archivo de código que había destacado el problema en un principio, y la diferencia fue gigante. El desplazamiento entre líneas es mucho más rápido y fluido. Probé con archivos más grandes de miles de líneas, y es el día y la noche.

¿Y Spacemacs?

Desde hace poco más de un año vengo usando Spacemacs (una "distribución" de Emacs). Por suerte Spacemacs soporta la nueva implementación de número de línea desde hace un tiempo. Incluso noté al iniciar Spacemacs con Emasc 26, que se desinstalaba el paquete relacionado a linum, y al iniciar Emacs 25 se vuelve a instalar, por lo que Spacemacs sabe qué usar dependiendo de la versión de Emacs.

Así que por el momento, sigo usando Emacs 26 🙌🏻

No hay comentarios en este post

Feed de comentarios

Dejar un comentario

Toasty!