Acelerando el ciclo de Erlang Edit, Compile, Run/Depug
Pregunta
¿Cuál es la forma más rápida de editar una aplicación Erlang, compilar el código y ver el resultado en ejecución? Preferiblemente saltando en la cáscara de Erlang en el último paso.
Mi configuración actual del novato:
- Un script que compila la aplicación e inicia el shell ERL.
- Luego escribo en la aplicación: Inicio (FOO).
- Cuando soluciono un error tipográfico, recompino el módulo con C ('módulo') y reinicio la aplicación.
¿Hay una manera mas rápida? POR CIERTO. Mi editor de elección es Emacs.
Solución
Aquí está mi configuración:
- Mientras me desarrolla, mantengo la carcasa Erlang abierta en una ventana de terminal separada.
- Comienzo la compilación del editor (usando una combinación clave), o simplemente escribiendo
make
En el directorio de origen. - Después de la compilación, carga todos los módulos cambiados a la vez escribiendo
l()
En la cáscara de Erlang. Puede encontrar esto y algunas otras macros útiles aquí: http://www.snookles.com/erlang/user_default.erl
Raramente hay necesidad de reiniciar toda la aplicación Erlang. La recarga de módulos cambiados es un caso de uso más común y generalmente es suficiente para aplicar sus cambios.
Con respecto al inicio de la aplicación: si su aplicación depende de otras aplicaciones, la aplicación: Start () fallará, hasta que inicie todas las dependencias. Debido a eso, es común escribir una función de ayudante <your-app-name>:start()
. Aquí hay un ejemplo. Otra función útil es <your-app-name>:stop()
.
Con todas estas técnicas aplicadas, un flujo de trabajo se vería así:
- Comience la carcasa de Erlang y manténgala abierta; escribe
<your-app-name>:start().
- Hacer cambios; Ejecutar compilación; escribe
l()
en tu caparazón de Erlang. - Cuando los cambios requieren reiniciar la aplicación, escriba
<your-app-name>:stop(), <your-app-name>:start().
Otros consejos
Podrías mirar reflexión como herramienta de construcción. make:all/0
y el todo hacer El módulo también podría ayudar. Para recargar explícitamente un módulo del shell que puede usar l(Module)
. Finalmente, también puede estar interesado en crear un Erlang liberar para "envolver" todas sus aplicaciones de Erlang.
La edición y la compilación se realiza por el IDE (Eclispe con Erlide) que uso.
También creé un script que inicia la VM mi aplicación y las herramientas útiles. El script solo se usa para el tiempo de desarrollo.
Para recargar las fuentes cambiadas y luego los contenedores compilados, uso el recargador de Mochiweb. El recargador observa el directorio de contenedor y si hay cambios, carga los modulados y ejecuta las pruebas de EUNIT, si tiene algunas adentro.
Ejemplo:
ERL +A 5 +K True -name @127.0.0.1 -pa $ pwd/ebin $ pwd/test $ pwd/deps/*/ebin -boot start_sasl -s reloader -s herramientas -s -s -s
Lo que también puedes probar es ErlBuild. ErlBuild es una aplicación simple que se ve en el directorio SRC para los archivos de origen cambiado y si encuentra algunos archivos, entonces compila y cargue los módulos nuevamente. Después de cargar los módulos, ErlBuild ejecuta las pruebas de los módulos.
Puede encontrar el proyecto en: https://github.com/ulfa/erlbuild
~ Ulf