2012-04-26 18 views
5

Mi equipo está aprendiendo algo de Erlang en mi nuevo trabajo. En este momento tenemos un código hecho, pero el código está empezando a ponerse un poco desordenado y no consistente.Normas y buenas prácticas de codificación de Erlang

Me gustaría saber si existen estándares de codificación que sean seguidos por la comunidad Erlang y que se puedan usar como referencia. Cosas como cómo sangrar, nombrar variables y funciones, cómo estructurar módulos, etc.

Además, ¿hay alguna herramienta que verifique esos parámetros? Estoy pensando en PEP8 o PyFlakes en el mundo de Python. Yo uso vim y detectará errores de sintaxis, lo cual es bueno, pero me gustaría llevarlo un poco más allá y tratar de mantener un estilo bueno y consistente que podamos compartir y hacer que el código sea más legible.

ACTUALIZACIÓN: Sobre el comentario de Kemal, debo decir que es muy interesante (y haremos un buen uso) pero no cubre completamente el tema. Mi problema es convencer un equipo para usar un estilo de código consistente, lo más consistente posible. Una buena forma de convencer a todos es usar un estilo de codificación recomendado por la comunidad de Erlang. Tal vez no exista, pero me gustaría probar cosas simples, como elegir CameCase sobre Underscored_words, que pueden ser de gran ayuda para darle al código un aspecto uniforme y ayuda a la legibilidad.

Respuesta

10

Bueno, está este http://www.erlang.se/doc/programming_rules.shtml. Es bastante completo.

+1

Mmmm, parece muy vago.Son recomendaciones más genéricas que específicas para Erlang en su mayor parte. – Khelben

+2

¿Vago? Hay muchas recomendaciones específicas de erlang allí y no me parecen "vagas". – Isac

+2

Acepto que el consejo en esa página es probablemente más importante que la cantidad de espacios que usa. – dsmith

2

No conozco ninguno. ¿Cuál es más legible para ti? Este:

init([]) -> 
    AChild = {'AName',{'AModule',start_link,[]}, 
     permanent,2000,worker,['AModule']}, 
    {ok,{{one_for_all,0,1}, [AChild]}}. 

o esto:

init([]) -> 
    AChild = { 
     'AName', 
     {'AModule', start_link, []}, 
     permanent, 
     2000, 
     worker, 
     ['AModule'] 
    }, 
    { 
     ok, 
     { 
     {one_for_all,0,1}, 
     [AChild] 
     } 
    }. 

o esto:

init([]) -> 
    AChild = { 'AName' 
      , {'AModule', start_link, []} 
      , permanent 
      , 2000 
      , worker 
      , ['AModule'] } 
    { ok, 
     { {one_for_all,0,1} 
     , [AChild] } }. 

me gusta la última, pero la consistencia es más importante. Entonces sugiero que defina un estándar que funcione para usted.

+0

Probablemente prefiera el segundo, pero la pregunta aquí es, ¿hay algún consenso sobre la comunidad Erlang? – Khelben

+0

El segundo es el que menos me gusta ... Esa es probablemente la razón por la que no hay un estándar. – dsmith

2

hay una herramienta llamada Elvis que puede ser utilizado para hacer cumplir un estilo de codificación, pero las reglas predeterminadas son las de Inaka (los creadores) en lugar de los valores predeterminados para la comunidad Erlang en su conjunto.

+0

¡Hola! Elvis está diseñado para ser lo suficientemente flexible como para poder configurar las reglas que desea aplicar especificando su propio 'elvis.config'. También admite reglas definidas por el usuario cuando se ejecuta desde el shell y hay planes para admitirlas incluso cuando se ejecuta desde la línea de comandos. Espero eso ayude. –

0

Para los futuros buscadores ...

En cooperación con las grandes personas en el erlang-questions mailing list (que donaron su tiempo para entregar una fuerte crítica en su caso) produje un proyecto de ejemplo de tamaño moderado (una implementación completa UUID) específicamente para incorporar un estilo que sea fácil de leer, escribir y emular.

Cubre prácticas generales de codificación en términos de typespeccing, el uso edoc, y el diseño de código Erlang y estilo:

El problema de las declaraciones lambda multilínea en el lugar y otros problemas multilínea VS uso de etiquetas en la fuente (con comparaciones i n código compilado) se trata aquí: https://zxq9.com/archives/1337.

Cuestiones relacionadas