2009-02-10 11 views
10

Sto girando intorno al web in cerca di varie pratiche di digitazione dei programmi di Erlang e ce ne sono alcune ... anche se è piuttosto difficile trovare una solida fonte di informazioni ovvero Sto cercando informazioni pratiche a proposito di:Sistema di tipo Erlang

1. -specs - questo sembra piuttosto attraente. alcuni punti menzionano che le funzioni che hanno una direttiva -specs associata con essa sono controllate in fase di compilazione (per l'uso corretto del tipo) ... Non riesco a trovare più informazioni su come usarlo (quale strumento usare - Dialyzer, typer?). Tipo di "Car" - Im davvero impaziente di creare un piccolo parser/code-gen che avrebbe generato queste "caratteristiche" di dichiarazioni di funzioni della forma

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

non ho visto se -spec supporta tipi astratti (user tipi dichiarato -

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

2. -deftype direttiva mentioned here

Erlang sarebbe diventato così molto più potente per me, se ho potuto iniziare a digitare le cose e li hanno essere controllato al momento della compilazione il runtime il parser/code. -gen I menzionato sopra genererebbe verifiche di tipo guardia nel codice sorgente di uscita.

risposta

14

Maggiori informazioni sul tipo e spec attributi qui:

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

Dialyzer può essere utilizzato per controllare la loro (vedi dialyzer --help).

È possibile utilizzare Typer per generarli (vedere typer --help).

+0

fenomenale !! un sacco di informazioni, dettagli, grazie mille per i link! – deepblue

1

Compilare il controllo del tipo di orario non è cosa fatta con Erlang. Utilizzare invece il Dialyzer che esegue il controllo di tipo post-compilazione.

Il modo in cui si creano "tipi definiti dall'utente" consiste nell'utilizzare tuple con tag come suggerito. Il Dialyzer esaminerà i percorsi del codice per identificare quelli che POTREBBERO finire per creare ritorni di funzioni che falliscono.

Per fare in modo che il dializzatore funzioni al meglio, è necessario accettare "let if fail" e solo le clausole di scrittura che corrispondono ai risultati previsti, evitando costrutti "else" che corrispondono sempre e poche altre best practice.

È necessario documentare le proprie funzioni con edoc. Il dializzatore usa le specifiche del tipo del sistema di documenti per inferirne i tipi. Il manuale edoc può essere trovato here.

+1

non è stato edoc ammortizzato per la digitazione del codice a favore di -spec? Penso di averlo visto da qualche parte come una nota con R13 in mente, correggimi se sbaglio \ nthanks – deepblue

+0

Vostro diritto - Ho dissotterrato il documento di Kostas Sagonas da EUC'08 a http://www.erlang.se/euc /08/1400Kostis.pdf e questo è ciò che raccomanda. Purtroppo ho perso l'EUC quest'anno cercando di raccogliere fondi :( –