So drucken Sie die Speicheradresse einer Liste in Haskell

8

Ich untersuche, wie einige Programmiersprachen Speicher strukturierten Daten zuweisen (in diesem Fall studiere ich Arrays).

Ich erstelle das Array wie hier hier zu Abschnitt 3.

%Vor%

Und was ich versuche, ist die Speicheradresse jedes Elements, etwa so:

%Vor%

Das Problem, das ich habe, ist, dass ich nicht weiß, wie man den Wert der Speicheradresse für ein Element in Haskell bekommt.

Gibt es eine ähnliche Funktion wie Pythons id(object) oder Rubys object.object_id ?

    
Jose_Sunstrider 01.09.2013, 17:09
quelle

1 Antwort

10

Sie können das folgende Snippet verwenden, das ich aus dem ghc-heap-view Paket ausgeliehen habe (es enthält auch eine alternative Lösung mit foreign import prim ):

%Vor%

Dies funktioniert, indem Sie zuerst a in einen Ptr' -Konstruktor einbinden und dann Ptr' a auf Word umwandeln. Da das a -Feld als ein Zeiger dargestellt wird, enthält das resultierende Wort nun die Adresse des Objekts. Es gelten die üblichen Vorbehalte: Dies ist unsicher, GHC-spezifisch, bricht die referenzielle Transparenz usw.

Testen:

%Vor%

Ausgabe:

%Vor%

Beachten Sie, dass Sie unsafeAddr mit $! verwenden sollten. Andernfalls erhalten Sie eine Adresse eines Thunks, der als a anstelle des a -Objekts selbst ausgewertet wird:

%Vor%

Ausgabe:

%Vor%     
Mikhail Glushenkov 01.09.2013, 23:05
quelle

Tags und Links