2011-12-14 10 views
6

Mi sto lentamente innamorando di Erlang e ho solo un grosso problema.Static typechecking in erlang

Sono un grande fan di linguaggi come Standart ML e ocaml con il loro tipo di controllo statico forte.

c'è un modo carino e pulito per introdurre un esempio di static typechecking in erlang. Sto osservando le annotazioni -type e -spec.

Qualcuno ha una buona soluzione?

risposta

11

Sono stato lì! Adoro sia OCaml che Erlang e li uso regolarmente.

Quando ho iniziato a utilizzare Erlang, ho avuto anni di esperienza con OCaml. Mi ci sono volute diverse settimane per adattarmi al fatto che nel compilatore non c'era un tipografo statico. Ma dopo, il dolore era completamente sparito.

In una certa misura, andare senza il typechecker è un esercizio utile. Per me è stata un'esperienza illuminante e mi ha davvero reso un programmatore migliore.

C'è, tuttavia, un typechecker statico esterno per Erlang chiamato Dializer. Lo trovo molto utile. Il problema è che devi chiamarlo separatamente ed è lento. Eseguirlo una volta ogni tanto (ad es. Prima di eseguire il codice o come parte di build automatizzate) funziona alla grande. Non ho mai provato a eseguirlo dopo ogni compilation in quanto sarebbe troppo di una distrazione per aspettare fino al completamento.

+0

Può spiegare perché andare senza un coontrollore dei tipo è stato illuminante? Sei arrivato a pensare che i tipografi siano inutili nella tua esperienza? – mljrg

+0

Esistono molte applicazioni in cui i tipografi sono estremamente utili. E funzionano come per magia in linguaggi come OCaml. Per me, un effetto collaterale di fare sempre affidamento su di loro era che la parte del mio cervello non prestava attenzione a un aspetto significativo di alto livello di un programma. Diventa qualcosa come un cieco e preferisco mantenere la piena consapevolezza e attenzione del programma che sto scrivendo. Detto questo, mi piacerebbe che ci fosse un migliore typechecker opzionale in Erlang. Non è possibile battere i typechecker per il refactoring e la collaborazione in quanto è impossibile mantenere lo stesso focus con tutto il codice in ogni momento. – alavrik

3

controllo dell'utensile Dialyzer

dializzatore è uno strumento di analisi statica che identifica discrepanze software come errori di tipo definite, codice che è diventato morto o irraggiungibile a causa di qualche errore di programmazione, test inutili, ecc in singoli moduli Erlang o in intere applicazioni (insiemi di).

2

Io uso soprattutto -spec e -type a scopo di documentazione: si scrive spec con -spec, quindi controllare con typer e poi (dopo inserire alcune informazioni aggiuntive in formato edoc) generare la documentazione

+0

questo è quello che ho fatto anch'io :) –

3

Nel corso degli anni, ci sono stati alcuni tentativi di costruire sistemi di tipi su parte superiore di Erlang. Uno di questi tentativi è avvenuto nel 1997, condotto da Simon Marlow, uno degli sviluppatori principali del Compilatore Haskell di Glasgow , e Philip Wadler, che ha lavorato al progetto di Haskell e ha contribuito alla teoria dietro le monadi (leggi il documento su detto digitare il sistema ). Joe Armstrong ha successivamente commentato il documento:

Un giorno Phil mi ha telefonato e ha annunciato che a) Erlang aveva bisogno di un sistema di tipi, b) che aveva scritto un piccolo prototipo di un sistema di tipo ec) lui aveva un anno di sabbatico e stava per scrivere un sistema di tipo per Erlang e “siamo noi interessa?” risposta - “Sì.”

Phil Wadler e Simon Marlow hanno lavorato su un sistema tipo per più di un anno ei risultati sono stati pubblicati nel [20]. I risultati del progetto erano in qualche modo deludenti .Per cominciare, solo un sottoinsieme della lingua era controllabile dal tipo, l'omissione principale era la mancanza di tipi di processo e di tipo verifica messaggi inter-processo.

http://learnyousomeerlang.com/types-or-lack-thereof