2012-03-01 13 views
11

quiero incrustar motor de Haskell en el proyecto IOS 5 como una biblioteca de C - para ejecutar código Haskell dentro de la aplicación IOS. Entonces tengo varias preguntas:Haskell gestión de memoria en IOS 5

  1. ¿Hay algún problema conocido de administración de memoria que Haskell revela bajo ARC?
  2. ¿Cómo puedo asegurarme de que Haskell no interfiera con la administración de la memoria IOS?
  3. ¿Cuál puede ser una estrategia efectiva para enfrentar estos problemas?
+1

He editado su pregunta para que sea más específico sobre el problema que parece haber planteado. Debe hacer su cuarto punto (no relacionado con la gestión de la memoria) en una pregunta separada. –

+0

GHC Cross compila a ARM ahora? : O – Phyx

+0

ARC y su objetivo semántico Objective-C específicamente. Se lanzará y conservará para usted con un análisis estático que solo funciona para Objective-C. Esta gestión de memoria se denomina colección de basura de conteo de referencias, pero por alguna razón, Apple se negó a llamarlo recolector de basura. Entonces puede verlo como administración de memoria manual, excepto que fue agregado por el compilador. Por lo tanto, no debería afectar a una biblioteca C AFAIK, ya que no usa la semántica de Objective-C. – fisk

Respuesta

1

ARC es estrictamente un proceso de generación de código en tiempo de compilación que se relaciona con el código Objective-C. ARC básicamente significa "insertar declaraciones de retención, liberación y liberación automática en la fuente * en el momento de la compilación para que el programador no tenga que hacerlo".

En consecuencia, ARC no hará nada con el código de Objective C (es decir, librerías regulares de C) y no tiene un comportamiento de tiempo de ejecución ** que pueda interferir con el comportamiento de recolección de basura del motor Haskell.

* Eso no es realmente cómo funciona ARC, que genera código ensamblador optimizado, no el código fuente, sino como una analogía que es una buena descripción de cómo funciona.

** En sentido estricto, no es cierto que ARC no tenga un comportamiento en tiempo de ejecución, ya que la gestión del puntero es débil en el tiempo de ejecución, pero eso solo aplica a los objetos Objective-C y no al código Haskell .