Es ist mein Verständnis, dass die Konstruktoren eines Typs, die keine Felder haben, "statisch zugeordnet" sind und GHC shares these between all uses, und dass die GC will not move these.reallyUnsafePtrEquality # auf Konstruktoren mit keine Felder
Wenn das stimmt, dann würde ich Verwendungen von reallyUnsafePtrEquality#
auf Werte wie False
und Nothing
erwarten sehr sicher zu sein (keine falschen Negative oder Positive), weil sie nur als identische Zeiger auf die einzige Instanz dieser Konstruktor dargestellt werden kann.
Ist meine Argumentation richtig? Gibt es potenzielle Fehler oder Gründe, die vermuten lassen, dass dies in naher Zukunft von GHC unsicher werden könnte?
Könnte wahr sein. Auf der anderen Seite scheint für Konstrukteure ohne Felder der Performance-Gewinn über langweiliges altes '(==)' ziemlich minimal zu sein ... –
@DanielWagner Mein tatsächlicher Anwendungsfall arbeitet mit den neuen CAS Primops auf Boxed Referenzen . Wenn ich die 'atomic-primops'-Bibliothek verwende, möchte ich in der Lage sein, ein' Ticket Nothing '(zum Beispiel) zu cachen und sicher zu sein, dass es nie abgestanden wird. – jberryman
Sie müssen möglicherweise auch auf Plugins und dergleichen achten. –