Utilizando emacs para programar en erlang
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.
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.