Nach meinem Verständnis ist ein Int-Wert ein Zeiger auf einen Thunk (doppelte Indirektion) und ein ungekammerter Int # ist nur ein Zeiger auf einen 32/64 Bit-Int. Ist das korrekt? Wie codiert der Zeiger die Tatsache, dass es sich auf einen ungefüllten Wert bezieht?
Der Haskell-Standard gibt an, dass ein Int "ein Ganzzahl-Typ mit fester Genauigkeit ist mit mindestens der Spanne [-2 ^ 29 .. 2 ^ 29-1] ". Gibt es eine Optimierung in GHC, wo diese zusätzlichen Bits verwendet werden, um die Umleitungen zu eliminieren?
Die GHC-Dokumentation enthält einige gute Informationen. Aber im Grunde genommen hast du recht, wenn du sagst, dass ein Int
-Wert ein Zeiger auf einen Thunk ist. Ein ungeboxter Wert ist jedoch kein Zeiger auf den ungepackten Wert. ist der nicht verpackte Wert selbst. Auch der Haskell-Standardbericht gibt lediglich die untere Grenze für den Bereich von Int
an. IIRC, GHC Int
haben mehr als 30 Bits.
Ich glaube nicht, dass GHC die zusätzlichen Bits nicht gebundener Typen zum Speichern von Metadaten verwendet, aber dafür werden die Bits von Zeigern verwendet. Weitere Informationen finden Sie auf der Seite .