微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否建议将Haskell作为脚本引擎嵌入到ARM上的iOS应用中?

如何解决是否建议将Haskell作为脚本引擎嵌入到ARM上的iOS应用中?

| 几个月前,我试图将Haskell编译为iOS应用程序。 不幸的是,我能找到的唯一稳定/维护的实现是GHC,因此我尝试了某种交叉编译,但是由于缺少用于ARM / iOS的RTS而失败了。 我意识到这对我来说还不容易。因此,我需要一些建议。我知道有一个适用于iOS的补丁,但现在不再继续。我考虑过NHC / YHC,但无法使用删除的实现。如果我想错了,请纠正我。     

解决方法

        使用GHC-iPhone和外部功能界面,这相当容易 作为参考,David Pollak的示例实现了一个用Haskell编写的Lisp解释器,该解释器在iPad应用程序中运行:   https://github.com/dpp/LispHaskellIPad 在
main.m
中声明Haskell主函数的示例:
extern int Haskell_main(int argc,char* argv[]);

int main(int argc,char* argv[])
{
    Haskell_main(argc,argv);
}
在他的
Main.hs
中,一系列异类函数声明使他可以访问可可库:
foreign import ccall safe \"openWindow\" openWindow
         :: IO CInt

data ViewController_struct
type ViewController = Ptr ViewController_struct


type RunStr = ViewController -> CString -> IO ()
foreign import ccall safe \"wrapper\" wrapFuncInvoke :: RunStr -> IO (FunPtr RunStr)
foreign import ccall safe \"setLispEval\" setLispEval :: ViewController -> FunPtr RunStr -> IO ()

foreign import ccall safe \"addToResult\" addToResult :: ViewController -> CString -> IO ()

data ObjCId_struct
type ObjCId = Ptr ObjCId_struct

data ObjCSEL_struct
type ObjCSEL = Ptr ObjCSEL_struct

foreign import ccall safe \"objc_msgSend\" objc_msgSend :: ObjCId -> ObjCSEL -> IO ObjCId
foreign import ccall safe \"objc_msgSend\" objc_msgSendInt :: ObjCId -> ObjCSEL -> Int -> IO ObjCId
foreign import ccall safe \"sel_registerName\" sel_registerName :: CString -> IO ObjCSEL
foreign import ccall safe \"objc_lookUpClass\" objc_lookUpClass :: CString -> IO ObjCId
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。