2012-03-01 118 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代码做任何事情。