compiler-construction erlang type-systems

compiler construction - Sistema de tipo Erlang



compiler-construction type-systems (3)

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

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

Se puede usar Dialyzer para controlarlos (ver dialyzer --help ).

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

Estuve curioseando por la web buscando varias prácticas de tipeo de los programas de Erlang y parece haber algunos ... aunque es algo difícil de encontrar una fuente sólida de información, es decir, estoy buscando información práctica sobre:

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 gen que genere estas "especificaciones" a partir de declaraciones de función de la forma

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

No he visto si -spec admite tipos abstractos (tipos declarados por el usuario - tipo "Coche" -

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

2. -deftype directiva mencionada aquí

Erlang se volvería mucho más poderoso para mí, si pudiera empezar a escribir cosas y hacer que las revisen en tiempo de compilación. El tiempo de ejecución del analizador / código-gen que mencioné anteriormente generaría comprobaciones de tipo de protección en el código fuente de salida.


La verificació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 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 "dejar si falla" y solo escribir cláusulas que coincidan con los resultados esperados - evite construcciones "demás" que siempre coincidan y algunas otras mejores prácticas.

Debes documentar tus 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 aquí .