Notxor tiene un blog

Defenestrando la vida

Utilizando emacs para programar en erlang

Notxor
2020-04-12

Llevo unos días aprendiendo Erlang, leyendo libros y tutoriales, mirando y copiando código y haciendo alguna pequeña aplicación de ejemplo para aprender.

Cuando fui a utilizar Emacs para trabajar con Erlang me llevé una pequeña decepción: siempre que instalo algún lenguaje nuevo para trabajar con él busco el paquete de babel para poder escribir código en org-mode, pero no existe. Pensé que quizá el paquete de erlang se iba a quedar corto en prestaciones y que me gustaría hacer programación literaria: Erlang tiene sus propios caminos. Sin embargo, al instalar el erlang.el también instala otro paquete de herramientas y una extensión para ivy-mode. Y después de probarlo estos días, me he encontrado con que las herramientas son más que suficientes para trabajar con el lenguaje.

captura-emacs-erlang.png

Instalación

Bueno, ya sabemos cómo se instala cualquier paquete en nuestro editor favorito: package-install RET erlang y se instalará el paquete con las dependencias que mencioné antes.

Lo único que hay que añadir en el init.el es el lugar donde se encuentre instalado Erlang. En mi caso, de la siguiente forma:

;; Añadir el sitio de instalación de Erlang
(setq erlang-root-dir "/usr/lib64/erlang")

Además, al instalar la documentación en OpenSuse encontré que se instalan también páginas de manual en el directorio de Erlang y quise acceder desde el comando M-x man para tener esa documentación muy a mano, pero Emacs no las encontraba. Tampoco las encuentraba el comando man del sistema operativo y eso me hizo sospechar que es un problema con el paquete de la distribución. En otras distribuciones me consta que las páginas mencionadas se instalan correctamente en el sitio correspondiente y son accesibles. Para solucionar este problema lo que hice fue añadir en mi fichero .bashrc la siguiente línea:

export MANPATH=$MANPATH:/usr/lib64/erlang/man

A partir de ese momento, ya las encontraba tanto el comando man del sistema operativo, como su equivalente en Emacs.

Para mí es muy interesante poder tener acceso a esos documentos, porque más adelante veremos que podremos acceder a la documentación de las funciones de la librería con una sola pulsación de teclas.

Edición de código

Las herramientas de edición son como cualquiera otras que se utilizan en Emacs. Aparte del coloreado de la sintaxis de código, autocompletado y otras tan habituales que ya ni las consideramos en su valía, hay algunas mucho más interesantes. Por ejemplo, para acceder a una consola de Erlang sin salir del editor, basta pulsar la combinación C-c C-z. Pero no es la única forma de acceder a una consola funcional. Por ejemplo, una de las convenciones en Erlang es guardar el código en un subdirectorio src y los binarios compilados a .beam en un directorio ebin, en el mismo nivel del directorio de la aplicación (igual que la documentación en un directorio doc, etc). Cuando estamos editando un módulo de Erlang, si pulsamos la combinación de teclas C-c C-k lanza una consola, compila el módulo y, si todo compila correctamente, guarda el binario en su directorio correspondiente. Además, nos deja la consola de Erlang abierta, preparada para que probemos el código que acabamos de compilar.

Pero, para la edición de código, lo realmente interesante es la cantidad de Skeletons que nos proporciona. Son esquemas de código, desde una simple estructura if a un esqueleto completo de aplicación que nos ahorrarán un montón de pulsaciones de teclas. Pasando por estructuras de comentarios de código que posteriormente la herramienta edoc de Erlang convertirá en la documentación de nuestra aplicación.

Además está el acceso a la documentación como veíamos en el apartado anterior. Si nos encontramos en una determinada llamada a alguna librería, basta con pulsar C-c C-d para que nos muestre la página de manual donde se encuentra su documentación para que podamos hacernos una idea de lo que hace. Además contaremos en el menú con una amplia selección de información sobre módulos o sobre aplicaciones de Erlang, bastante bien estructurada.

También, dada la idiosincrasia el lenguaje, el módulo tiene teclas de función que mueven el cursor a lo largo de las cláusulas de Erlang, que en algunos casos pueden ser muy largas y no siempre fáciles de navegar:

C-c M-a
Inicio de la cláusula.
C-c M-e
Fin de la cláusula.
C-c M-h
Seleccionar toda la cláusula.

Esas funciones son muy útiles para trabajar con la edición de código en Erlang.

Conclusiones

La edición de código siempre es compleja. No es una edición tan lineal como cuando escribes un texto. Demanda grandes saltos, muchas veces para mover sólo una coma.

Erlang además es un lenguaje de programación peculiar en muchos aspectos, su código cuando vienes de una programación más secuencial es a veces difícil de entender. Usa sus propias convenciones, sus propias librerías y se parece poco a cualquier otro lenguaje. Como ya dije en otra entrega, me parecía un lenguaje marciano. Si bien, es verdad, que según avanzo y voy entendiendo cómo se articulan los procesos y cómo los maneja Erlang, se me hace más claro y fácil.

El contar con el módulo de Emacs para Erlang está siendo toda una suerte para avanzar en el aprendizaje. Puedo lanzar el código que estoy probando sin salir del editor y sin necesidad de nada más. El resto de herramientas necesarias, el observer o el debugger para visualizar nuestros procesos o depurar el código, los proporciona el mismo lenguaje, así que son independientes de Emacs, sin embargo, como se puede ver en la figura, no hace falta salir del editor para lanzarlos.

Categoría: emacs erlang

Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en esta cuenta de Mastodon, también en esta otra cuenta de Mastodon y en Diaspora con el nick de Notxor.

Si usas habitualmente XMPP (si no, te recomiendo que lo hagas), puedes encontrar también un pequeño grupo en el siguiente enlace: notxor-tiene-un-blog@salas.suchat.org

Disculpen las molestias.