2009-02-10 8 views
10

He estado buscando en la web varias prácticas de tipeo de los programas de Erlang y parece que hay algunas ... aunque es algo difícil de encontrar una fuente sólida de información es decir, estoy buscando información práctica sobre: ​​Sistema de tipo Erlang

1. -specs - este se ve muy atractivo. algunos lugares mencionan que las funciones que tienen una directiva asociada -specs con él se comprueban en tiempo de compilación (para el uso correcto del tipo) ... No puedo encontrar más información sobre cómo usarlo (qué herramienta usar - Dializador, TypEr?). Estoy realmente ansioso por crear un pequeño analizador/código de generación que generarían estas "características" de la declaración de funciones de la forma

functionName(param1 :List, param2 :Tuple) -> ... 

no he visto si -spec soporta tipos abstractos (usuario declara tipos - Tipo de "coche" -

{car,{weight,_},{height,_},{maxSpeed,_}} 

2. -deftype Directiva mentioned here

Erlang se convertiría en mucho más fuerte que yo, si pudiera empezar a escribir las cosas y hacer que sea posible controlar en tiempo de compilación el tiempo de ejecución del programa de análisis/código. -gen I mencionado anteriormente generaría controles de tipo de protección en el código fuente de salida.

Respuesta

14

Más información sobre el tipo y la especificación de los atributos aquí:

http://www.erlang.org/eeps/eep-0008.html

dializador se puede utilizar para comprobar ellos (véase dialyzer --help).

Typer se puede utilizar para generarlos (ver typer --help).

+0

fenomenal !! mucha información, detalles, ¡muchas gracias por los enlaces! – deepblue

1

La comprobación del tipo de tiempo de compilación no se realiza con Erlang. En su lugar, use el dializador que realiza la verificación de tipo posterior a la compilación.

La forma en que crea 'tipos definidos por el usuario' es mediante el uso de tuplas etiquetadas como usted sugiere. El dializador examinará las rutas de código para identificar las que PUEDEN terminar creando retornos de funciones que fallan.

Para que el dializador funcione mejor, debe aceptar 'let if fail' y solo escribir cláusulas que coincidan con los resultados esperados; evite las construcciones 'else' que siempre coinciden y algunas otras mejores prácticas.

Debe documentar sus funciones con edoc. El dializador usa la especificación de tipo del sistema de documentos para inferir tipos para usted. El manual de edoc se puede encontrar en here.

+1

¿no se está depreciando el edoc para la tipificación de código a favor de -spec? Creo que lo he visto en algún lugar como una nota con R13 en mente, corrígeme si estoy equivocado \ ngracias – deepblue

+0

Tu derecho - Saqué el periódico de Kostas Sagonas de EUC'08 en http://www.erlang.se/euc /08/1400Kostis.pdf y esto es lo que recomienda. Desafortunadamente eché de menos a EUC este año tratando de recaudar dinero :( –

Cuestiones relacionadas