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
?
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
):
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:
Ausgabe:
%Vor%