2013-03-15 5 views
5

Es hat viel Aufhebens um dynamisch vs. statisch typisierte Sprachen gegeben. Statisch getippte Sprachen ermöglichen es dem Compiler (oder Interpreter) jedoch, etwas mehr über Ihre Absichten zu wissen, sie kratzen nur an der Oberfläche dessen, was vermittelt werden könnte. Tatsächlich haben einige Sprachen einen orthogonalen Mechanismus, um in Annotationen etwas mehr Informationen zu liefern.Beyond type theory

Ich kenne stark typisierte Sprachen wie Agda und Coq, die sehr persnickety über das sind, was sie Ihnen erlauben zu tun; Ich bin nicht besonders an diesen interessiert. Ich frage mich eher, welche Sprachen oder Theorien existieren, die den Reichtum dessen erweitern, was Sie dem Compiler erklären können, was Sie beabsichtigen. Wenn Sie beispielsweise einen veränderbaren Vektor haben und ihn in einen Einheitsvektor umwandeln, warum konnte Ihr Compiler dann nicht eine Einheitsvektorform der Vektorprojektion anstelle der rechenintensiveren allgemeinen Form wählen? Der Typ hat sich nicht geändert - und die Arbeit, die erforderlich ist, um alle erforderlichen Typen zu erstellen, würde selbst in einer Sprache mit erstaunlich einfacher Eingabe wie Haskell abstoßen - und trotzdem scheint der Compiler dazu befähigt zu sein, viel zu wissen über die Situation.

Ermöglicht eine Sprache bereits solche Dinge, entweder außerhalb der Standard-Typ-Theorie oder innerhalb einer ihrer fortgeschritteneren Zweige?

+1

Warum interessieren Sie sich nicht für Agda und Coq, wenn das, was Sie fordern, genau das ist, was sie bieten (wenn auch mit einer weniger praktischen Neigung, aber Idris geht in eine praktischere Richtung) ? Ihr spezielles Beispiel einer geschickten Darstellung für bestimmte Arten von Vektoren wird bereits von Haskells Vektorbibliothek bereitgestellt. Sie könnten sich auch für LiquidHaskell und die frühere Arbeit von Dana Xu auf Verträgen in GHC interessieren. – copumpkin

+0

@copumpkin - Vielleicht sollte ich interessiert sein, aber all die Beispiele, die ich gesehen habe, sind sehr klobig, wie nützlich sie sind, und ich kann nicht sehen, wie man sie auf einen veränderlichen und objektorientierten Kontext ausdehnt, wo man argumentiert wird kniffliger und du brauchst sowieso mehr Hilfe. –

+0

@Rex Suchen Sie eine expressivere Abstraktion als abhängige Typen? Wenn ja, können Sie ein Beispiel geben? Sonst suchst du vielleicht eine Sprache, die es befriedigend umsetzt. –

Antwort

0

Es gibt Sprachen mit Turing-vollständigen Systemtyp. Das bedeutet, dass Ihre Typen jede berechenbare Eigenschaft ausdrücken können. zum Beispiel Liste der Länge 6 oder gültige Kreditkartennummer. Die meisten Mainstream-Sprachen verwenden jedoch einfachere Systemtypen. haskell gilt als sehr leistungsfähiger Systemtyp

+0

Scala ist eine solche Sprache, aber eine allgemeine Berechnung im Typsystem durchzuführen, ist umständlich und unpraktisch. Also, theoretisch wahr, diese Beobachtung beantwortet meine Frage nicht wirklich. –

Verwandte Themen