Aprender a navegar por la documentación estándar
Una vez que aprender cómo se organiza la documentación OTP se hace mucho más fácil encontrar lo que estás buscando (que tienden a necesitar aprender las aplicaciones que proporcionan que los módulos o tipos de módulos).
también navegando a la documentación de las aplicaciones es a menudo muy gratificante - He descubierto una gran cantidad de código realmente útil de esta manera - sys
, dbg
, toolbar
, etc.
La diferencia entre erlang shell y erlang módulo
Shell erlang es un dialecto ligeramente diferente al módulo erlang. No puede definir funciones de módulo (solo funs), necesita cargar definiciones de registros para trabajar con registros (rr/1
), etc. Aprender cómo escribir el código de erlang en términos de funciones anónimas es algo complicado, pero es esencial para trabajar en sistemas de producción con un shell remoto.
Aprendiendo la interacción entre el intérprete de comandos y los procesos {start, spawn} _link ed: cuando ejecuta algún código del shell que se cuelga (provoca una excepción), el proceso del shell finaliza y transmite señales de salida a todo lo que haya vinculado. Esto a su vez apagará el nuevo gen_server en el que está trabajando. ("¿Por qué sigue mi proceso de servidor de desaparecer?")
La diferencia entre las expresiones de Erlang y expresiones de guardia
expresiones de la Guardia (cláusulas) cuando no son expresiones de Erlang. Pueden parecer similares, pero son bastante diferentes. Los guardias no pueden invocar funciones de erlang arbitrarias, solo funciones de protección (length/1
, las pruebas de tipo, element/2
y algunas otras especificadas en la documentación de OTP). Los guardias tienen éxito o fracasan y no tienen efectos secundarios. Las expresiones de Erlang, por otro lado, pueden hacer lo que quieran.
carga Código
La elaboración de cuándo y cómo funcionan las actualizaciones de código, el encantamiento para obtener un gen_server para actualizar a la última versión de un módulo de devolución de llamada (code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).
).
La ruta del servidor de código (code:get_path/0
) - No puedo contar cuántas veces me encontré con errores de función indefinidos que resultaron ser me olvidé de agregar un directorio ebin a la ruta de búsqueda de código.
código Erlang Edificio
La elaboración de una combinación útil de emake (make:all/0
y erl -make
) y hacer GNU tomó un tiempo bastante largo (alrededor de tres años hasta el momento :).
Mis favoritos actuales archivos make se pueden ver en http://github.com/archaelus/esmtp/tree/master
distribución Erlang
Obtención de nombres de nodo, DNS, galletas y todo el resto derecho con el fin de ser capaz de net_adm:ping/1
el otro nodo. Esto requiere práctica.
complejidades cáscara S remotas
Recordando a pasar group_leader()
a io:format
llamadas se ejecutan en el nodo remoto para que la salida aparece en su shell en lugar de desaparecer misteriosamente (creo que el navegador informe SASL rb
todavía tiene un problema con el envío de algunos de su salida al nodo incorrecto cuando se utiliza en una conexión de shell remoto)
Buena pregunta Joe, pero usted debe tener sus respuestas como respuestas o mantenerlas en su pregunta, no ambas. Preferiblemente, deberían ser respuestas. – ryeguy