2015-08-08 5 views
33

Ich arbeite an einem Plugin für GHC, deshalb lese ich die Dokumentation für einige seiner Implementierung.Was bedeutet die GHC-Quelle von "zonk"?

Das Verb "to zonk" ist überall zu finden, aber ich kann keine Erklärung finden, was es bedeutet, etwas zu zonkieren oder (ganz allgemein), wenn man möchte. Ich kann viele Notizen über komplizierte Umstände finden, unter denen es notwendig ist, etwas zu zonkieren oder nicht zu zonkieren, aber ohne eine Ahnung, was das große Ganze ist, habe ich eine Menge Probleme dabei zu folgen.

+9

["Denken Sie daran, die Skolems einer Implikation zu zonieren"] (https://git.haskell.org/ghc.git/commitdiff/c32bb5d0c09a7e55197191f152c6875b398717cf) ist so euphonisch! – duplode

+6

"Zonking läuft über einen Typ und gibt einen neuen Typ zurück, in dem Vereinheitlichungsvariablen durch die Typen ersetzt werden, zu denen sie vereinheitlicht wurden." - [eine E-Mail geschrieben von Simon Peyton-Jones] (https://mail.haskell.org/pipermail/glasgow-haskell-users/2013-August/024209.html). Ich kann mich nicht genug erinnern, um eine hilfreichere Antwort zu geben. –

Antwort

23

Ein un-zonked-Typ kann Typvariablen haben, die veränderbare Referenzen sind, die während der Vereinheitlichung ausgefüllt werden (und diese Mutabilität wird vom Typüberprüfer zur Leistungssteigerung stark genutzt). Zonking durchquert einen Typ und ersetzt alle veränderbaren Referenzen durch den Typ, auf den sie dereferenziert sind; Daher ist die resultierende Struktur unveränderlich und erfordert keine Dereferenzierung für die Interpretation.

Beachten Sie, dass diese Typvariablen meta -Variablen sind, d. H. Sie entsprechen nicht den Typvariablen, die durch Polymorphie eingeführt werden; Vielmehr sind sie Vereinheitlichungsvariablen, die durch reale Typen ersetzt werden. Die Wahl des Ersatzes wird durch den Typprüfungstyp-Typ-Rückschlußprozeß entschieden, und dann wird der tatsächliche Austausch während des Zonkens durchgeführt.

Dieser Begriff von Zonking erstreckt sich natürlich auf andere Zwischendarstellungen des Typcheckers, die Typen enthalten.