www.wikidata.de-de.nina.az
Durch Typinferenz englisch Type inference mit type Daten Art oder Datentyp und inference Schlussfolgerung auch Typableitung genannt kann in manchen stark typisierten Programmiersprachen viel Schreibarbeit eingespart werden indem auf die Niederschrift von Typangaben verzichtet wird die aus den restlichen Angaben und den Typisierungsregeln hergeleitet rekonstruiert werden konnen dazu bedient man sich derselben Regeln die auch zur Typprufung dienen als deren Fortentwicklung die Typinferenz in gewisser Weise anzusehen ist Bei der Durchfuhrung bestimmt man durch Unifikation den allgemeinsten Typ Haupttyp principal type eines Terms Die Entwicklung der Typinferenz fur ML durch Milner Anm 1 war ein Meilenstein in der Entwicklung der Programmiersprachen Sie bedingte ermoglichte aber zugleich auch anspruchsvollere Typsysteme die damit erheblich an Bedeutung gewannen Gewisse Spracheigenschaften wie Typanpassungen und manchmal Uberladen wurden zuruckgedrangt weil sie mit der Typinferenz kollidieren Viele Programmiersprachen unterstutzen Typinferenz zum Beispiel Python Java C 11 C und Visual Basic Inhaltsverzeichnis 1 Beispiel 2 Hindley Milner 3 Siehe auch 4 Literatur 5 Anmerkungen 6 EinzelnachweiseBeispiel BearbeitenGegeben sei der folgende Code int a 1 int b 2 auto c a b Hierbei kann das Typsystem der jeweiligen Programmiersprache wenn sie ein entsprechendes Typsystem samt striktem Regelwerk besitzt nun automatisch herleiten dass die Variable c vom Typ int Integer sein muss da das Ergebnis einer int Addition ebenfalls vom Typ int ist Typinferenz ist wichtig um dem Programmierer zu helfen Fluchtigkeitsfehler schnell zu entdecken In einer streng typisierten Sprache wie SML ist es zum Beispiel nicht moglich ganze Zahlen mit booleschen Werten zu vergleichen Um genau solche Fehler zu vermeiden und zu finden werden mittels Typinferenz fur alle Ausdrucke Typen hergeleitet und es wird gepruft ob alle auf den Ausdrucken ausgefuhrten Operationen typkonform sind wenn z B wie oben angenommen Additionen nur zwischen zwei Zahlen gleichen Typs erlaubt sind Ein etwas komplexeres Beispiel fur die Typinferenz ist die Herleitung des Typs der Funktion f im folgenden SML Code fun f a b c if b then a b else c 1 Zunachst muss die Variable b vom Typ bool Wahrheitswert sein da sie im if then else statement nach dem if steht Als zweites kann man sagen dass die gesamte Funktion ein int zuruckgeben muss da sowohl der then als auch der else Teil denselben Typ haben mussen und c 1 vom Typ int sein muss da 1 vom Typ int ist und somit auch wegen des Plus Operators c vom Typ int sein muss Nun kann man noch sagen dass a eine Funktion sein muss da im then Teil a auf b angewendet wird Da then und else Teil jedoch denselben Ruckgabetyp haben mussen muss das Ergebnis von der Funktion a angewendet auf b ebenfalls vom Typ int sein Somit ergibt sich fur die Funktion f folgender Typ f bool gt int bool int gt int Anmerkung Beim obigen Beispiel wurden explizit die Typisierungsregeln der Sprache SML verwendet Andere Sprachen wie C oder Java haben andere Typisierungsregeln sodass die Typherleitung dort anders aussehen kann oder eventuell aufgrund der schwachen Typisierung der Sprache es sind an vielen Stellen mehrere verschiedene Typen erlaubt gar nicht moglich ist Hindley Milner Bearbeiten Hauptartikel Typinferenz nach Hindley Milner Hindley Milner HM ist ein klassisches Verfahren der Typinferenz mit parametrischem Polymorphismus fur den Lambda Kalkul Es wurde erstmals von J Roger Hindley 1 beschrieben und spater von Robin Milner 2 wiederentdeckt Luis Damas trug eine genaue formale Analyse und einen Beweis der Methode in seiner Doktorarbeit 3 bei weshalb das Verfahren auch als Damas Milner 4 bezeichnet wird Unter den herausragenden Eigenschaften des HM sind Vollstandigkeit und die Fahigkeit den allgemeinsten Typen einer gegebenen Quelle ohne Notwendigkeit von Annotationen oder sonstigen Hinweisen zu bestimmen HM ist ein effizientes Verfahren das die Typisierung nahezu in linearer Zeit bzgl der Grosse der Quelle ermitteln kann womit es praktisch fur die Erstellung grosser Programme ist HM wird bevorzugt in funktionalen Sprachen eingesetzt Es wurde erstmals als Teil der Programmiersprache ML implementiert Seither wurde HM in verschiedenster Weise erweitert insbesondere durch beschrankte Typen wie sie in Haskell verwendet werden Siehe auch BearbeitenTypisierung TypsicherheitLiteratur BearbeitenLuca Cardelli Basic polymorphic type checking In Science of Computer Programming 8 2 1987 Ralf Hartmut Guting Martin Erwig Ubersetzerbau Springer Berlin Heidelberg 1999 ISBN 3 540 65389 9 Benjamin C Pierce Types and programming languages MIT Press Cambridge MA 2002 ISBN 978 0 262 16209 8Anmerkungen Bearbeiten Er hat wiederentdeckt was schon von Hindley 1969 unter Ruckgriff auf Ideen von Curry aus den 1950er Jahren gefunden worden war Pierce TAPL 336 Einzelnachweise Bearbeiten R Hindley The Principal Type Scheme of an Object in Combinatory Logic In Transactions of the American Mathematical Society Vol 146 1969 S 29 60 jstor org Milner A Theory of Type Polymorphism in Programming In Journal of Computer and System Science JCSS 17 1978 S 348 374 online PDF 1 6 MB Luis Damas Type Assignment in Programming Languages PhD thesis University of Edinburgh 1985 CST 33 85 Damas Milner Principal type schemes for functional programs Abgerufen am 21 Mai 2020 PDF 9th Symposium on Principles of programming languages POPL 82 ACM 1982 S 207 212 Abgerufen von https de wikipedia org w index php title Typinferenz amp oldid 234069026