Dies ist eine Folge meiner früheren Frage hier . Ich konnte etwas nach Reid Bartons Antwort bekommen, aber im Kern sehe ich __pkg_ccall_GC
:
Was ich denke, was Sie für einen "sicheren" Anruf erwarten würden. Das Hinzufügen von "unsicheren" zu der fremden Importzeichenfolge ist jedoch nicht erlaubt (obwohl die Fehlermeldung nicht warum sagt):
%Vor% Mein fremdes Verfahren ist nur ein bisschen, aber ein bisschen zwickelhaft, also glaube ich nicht, dass ich was auch immer das _GC
mir geben möchte. Einige relevante Teile der GHC-Quelle, die ich angeschaut habe, FWIW und Hintergrund:
Compiler / Prelude / ForeignCall.hs: nur "Riskant" lässt das "_GC"
weg %Vor% Ich sehe auch einige foreign import prim unsafe
und ... safe
im GHC-Baum, obwohl ich vermute, dass es ein toter Code ist. z.B. testsuite/tests/printer/Ppr046.hs
.
Meine Fragen sind also:
__pkg_ccall_GC
gegen einen __pkg_ccall
generiert wird (wo ich foreign import prim
nicht ccall
mache)? Ist es das gleiche wie hier beschrieben hier ? foreign import prim unsafe
nicht unterstützt? BEARBEITEN Wenn Sie sich die Assembly von -ddump-asm
anschauen, wird deutlich, dass nicht viel passiert (hätte nicht Angst davor gehabt, die Versammlung zu betrachten), unterstützen Sie Reid Bartons Kommentar unten:
Das xorq
nach oben entspricht einem haskell xor
. All diese movq
scheinen jedoch ein Mist zu sein ...