2012-03-01 17 views
11

Desidero incorporare il motore Haskell nel progetto IOS 5 come libreria C per eseguire il codice Haskell all'interno dell'app IOS. Quindi ho diverse domande:Gestione della memoria Haskell in IOS 5

  1. Esiste un problema noto di gestione della memoria che Haskell rivela sotto ARC?
  2. In che modo è possibile garantire che Haskell non interferisca con la gestione della memoria IOS?
  3. Quale può essere una strategia efficace per gestire questi problemi?
+1

Ho modificato la tua domanda per essere più specifico sul problema che sembra aver sollevato. Dovresti chiedere il tuo quarto punto (non correlato alla gestione della memoria) in una domanda separata. –

+0

GHC Cross compila per ARM ora? : O – Phyx

+0

ARC e la sua semantica target Objective-C in particolare. Rilascerà e conserverà per te con un'analisi statica che funziona solo per Objective-C. Questa gestione della memoria è chiamata raccolta dei dati inutili per il conteggio dei riferimenti, ma per qualche motivo Apple ha rifiutato di chiamarlo garbage collector. Quindi puoi vederlo come gestione manuale della memoria, tranne che è stato aggiunto dal compilatore. Quindi non dovrebbe influire su una libreria C AFAIK, poiché non usa la semantica Objective-C. – fisk

risposta

1

ARC è un processo di generazione di codice in fase di compilazione che si riferisce al codice Objective-C. ARC significa fondamentalmente "inserire le istruzioni retain, release e autorelease nell'origine * al momento della compilazione, in modo che il programmatore non debba".

Di conseguenza, ARC non eseguirà alcunché sul codice C non oggettivo (ovvero le normali librerie C) e non ha un comportamento di runtime ** che potrebbe interferire con il comportamento di raccolta dei dati obsoleti del motore Haskell.

* Questo non è in realtà il modo in cui ARC funziona, genera codice di assembly ottimizzato, non codice sorgente, ma come analogia è una buona descrizione di come funziona.

** A rigor di termini, non è vero che non ha ARC comportamento di runtime, in quanto v'è la gestione puntatore debole che accade in fase di esecuzione, ma ancora una volta che si applica solo agli oggetti Objective-C e non farà nulla per il codice Haskell .