2012-03-01 123 views
11

我想將Haskell引擎作爲C庫嵌入IOS 5項目 - 在IOS應用程序內部運行Haskell代碼。所以我有幾個問題:Haskell內存管理IOS 5

  1. 是否有任何已知的內存管理問題,Haskell在ARC下揭示?
  2. 我如何確保Haskell不會干擾IOS內存管理?
  3. 什麼可能是解決這些問題的有效策略?
+1

我編輯你的問題是爲了更具體地討論你似乎已經提出的問題。你應該在另一個問題中提出你的第四點(與記憶管理無關)。 – 2012-03-01 20:28:56

+0

GHC Cross現在編譯爲ARM嗎? :O – Phyx 2012-03-03 13:05:59

+0

ARC及其語義目標Objective-C具體。它將釋放和保留一個靜態分析,只適用於Objective-C。這種內存管理稱爲引用計數垃圾收集,但由於某種原因,Apple拒絕將其稱爲垃圾收集器。所以你可以把它看作手動內存管理,除了它是由編譯器添加的。因此它不應該影響C庫AFAIK,因爲它不使用Objective-C語義。 – fisk 2012-03-04 10:29:30

回答

1

ARC嚴格來說是一個與Objective-C代碼相關的編譯時代碼生成過程。 ARC的基本意思是「在編譯時將保留,釋放和自動釋放聲明插入到源代碼中,所以程序員不必」。因此,ARC不會對非目標C代碼(即常規C庫)做任何事情,並且沒有可能干擾Haskell引擎的垃圾收集行爲的運行時行爲**。 *這實際上並不是ARC的工作原理,它生成優化的彙編代碼,而不是源代碼,但作爲比喻,它很好地描述了它的工作原理。

**嚴格地說,ARC沒有運行時的行爲,因爲在運行時會發生弱指針管理,但這又只適用於Objective-C對象,並且不會對Haskell代碼做任何事情。