Warum gibt es keinen "ausländischen Import prim unsicher"?

8

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 :

%Vor%

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:

  1. Was ist der Unterschied zwischen Code, der in diesem Fall aus einem __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 ?
  2. Warum wird foreign import prim unsafe nicht unterstützt?
  3. Angenommen, ich verstehe (1): Gibt es überhaupt eine Möglichkeit, dass ich das umgehen kann, indem ich mehrere Werte effizient zurückerhalte und die Buchhaltung in (1) vermeiden kann?

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:

%Vor%

Das xorq nach oben entspricht einem haskell xor . All diese movq scheinen jedoch ein Mist zu sein ...

    
jberryman 08.01.2017, 00:35
quelle

1 Antwort

2

Wie Reid Barton darauf hinweist, zeigt das __pkg_ccall_GC nichts an. Der generierte Code führt nicht zur Buchhaltung, die Sie in einem safe FFI-Aufruf sehen würden.

    
jberryman 08.01.2017, 18:29
quelle

Tags und Links