2009-02-10 8 views
10

Ich habe im Internet herumgeschnüffelt auf der Suche nach verschiedenen Tipp-Praktiken von Erlang-Programmen und es scheint ein paar zu geben ... obwohl es etwas schwierig ist, eine solide Quelle von Informationen zu finden, bin ich auf der Suche nach praktischen Informationen etwa:Erlang Typ System

1. -specs - das sieht ziemlich attraktiv aus. ein paar Orte erwähnen, dass die Funktionen, die eine zugehörige -Specs-Direktive haben, zur Compilierzeit überprüft werden (für die korrekte Typusbenutzung) ... Ich kann anscheinend nicht mehr Informationen darüber finden, wie man es benutzt (welches Tool zu verwenden ist - Dialyzer, TypEr?). Im wirklich eifrig einen kleinen Parser/Code-gen zu schaffen, dass diese „Spezifikationen“ von Funktionsdeklarationen der Form

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

ich gesehen habe, nicht erzeugen würde, wenn -spec abstrakte Typen unterstützt (Benutzertypen deklariert - „Car“ type -

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

2. -deftype Richtlinie mentioned here

Erlang so viel mächtiger für mich werden würde, wenn ich die Dinge Eingabe beginnen könnte und haben sie bei der Kompilierung die Laufzeit der Parser/Code überprüft werden. -gen ich Das oben Erwähnte würde Wächter-Typ-Überprüfungen im Ausgabe-Quellcode erzeugen.

Antwort

14

Weitere Informationen über die Art und spec Attribute hier:

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

Dialysator verwendet werden können, um sie zu überprüfen (siehe dialyzer --help).

Typer kann verwendet werden, um sie zu generieren (siehe typer --help).

+0

phänomenal !! viele Infos, Details, vielen Dank für die Links! – deepblue

1

Kompilierzeit Typprüfung ist nicht die Sache mit Erlang getan. Verwenden Sie stattdessen den Dialyzer, der die Überprüfung nach der Kompilierung durchführt.

Die Art und Weise, wie Sie 'benutzerdefinierte Typen' erstellen, besteht darin, getupte Tupel zu verwenden, wie Sie es vorschlagen. Der Dialysator wird Code-Pfade untersuchen, um diejenigen zu identifizieren, die MIGHT letztendlich Funktionsrückgaben erzeugen, die fehlschlagen.

Damit der Dialysator am besten funktioniert, müssen Sie "let if fail" akzeptieren und nur Klauseln schreiben, die den erwarteten Ergebnissen entsprechen - vermeiden Sie "else" -Konstrukte, die immer übereinstimmen, und einige andere Best Practices.

Sie sollten Ihre Funktionen mit edoc dokumentieren. Der Dialysator verwendet die Typspezifikation des Dokumentensystems, um Typen für Sie abzuleiten. Das Edoc-Handbuch finden Sie unter here.

+1

wird nicht Edoc für die Code-Eingabe zugunsten von -spec abgeschrieben? Ich denke, ich habe es irgendwo als eine Notiz mit R13 im Hinterkopf gesehen, korrigieren Sie mich, wenn ich falsch bin \ nthanks – deepblue

+0

Ihr Recht - Ich habe Kostas Sagonas Papier von EUC'08 bei http://www.erlang.se/euc ausgegraben /08/1400Kostis.pdf und das empfiehlt er. Leider verpasste ich EUC in diesem Jahr versuchen, Geld zu sammeln :( –