限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

OCaml 已经做好 iOS 开发准备

  • 2016-01-31
  • 本文字数:1383 字

    阅读完需:约 5 分钟

近日,来自旧金山的程序员 Edgar Aroutiounian 为 OCamliOS( Jeffrey A. Scofield 不久前推出的一个面向 iOS 的 OCamml 交叉编译器创建了一个程序包。InfoQ 就此对他进行了采访。

Scofield解释说,许多年来,他一直维护着一系列针对OCaml 编译器的补丁。近日,在Gerd Stolpmann 的帮助下,这些补丁进入了 OCaml 官方 GitHub 库的一个分支。按照 Scofield 的说法,在某个时候,该分支应该合并到 OCaml 正式版本中。

基于 Scofield 和 Stolpmann 的工作,Aroutiounian 将 OCamliOS 封装成一个 OPAM 程序包,使开发人员更容易安装它。他提供了一个简单的例子,展示如何将OCmal 代码集成到iOS Objective-C 应用里。下面的OCaml 代码片段将注册一个回调函数,并稍后从Objective-C 调用:

复制代码
let make_string () =
print_endline "Hello Word from OCaml";
"Hello World "
let () =
Callback.register "make_string" make_string
复制代码
#define CAML_NAME_SPACE
#import <foundation foundation.h="">
#include <caml callback.h="">
#include <caml mlvalues.h="">
int main (int argc, char **argv)
{
caml_startup(argv);
caml_callback(*caml_named_value("make_string"), Val_unit);
NSLog(@"Now using objective-c code");
return 0;
}</caml></caml></foundation>

OCaml 代码可以编译成一个独立的 iOS 可执行文件(不适合创建通过应用商店发布的应用)或者一个 C 静态库。目前,唯一可以在 OCaml 中使用的程序包是它的标准库。将来会增加对其他程序包的支持。

为了了解更多有关 opam-ios 和 OCaml for iOS 的信息,InfoQ 采访了 Aroutiounian。

opam-ios 究竟带来了什么?

它为程序员带来了方便。OPAM 是一个高级的 OCaml 包管理器。我想让 iOS OCaml 编译器成为 OCaml 世界的一等公民。

使用 opam-ios 能够为 iOS 应用开发带来什么好处?按照您的设想,通过 opam-ios 使用 OCaml 的 iOS 应用是个什么样子?

好处是,OCaml 是一种真正的函数式编程语言,从创建之初就遵循这一理念。它非常灵活,需要的话,可以使用 C 调用 Objective-C,实现某些已有代码的重用,例如 GUI 代码。按照我的设想,使用 OCaml 实现业务逻辑,Objective-C 仅用于 GUI 展示,虽然 OCaml 也支持面向对象编程,而我也可以将 Objective-C 对象封装成 OCmal 对象。

可以认为 OCaml 对 iOS 的支持已经成熟了吗?您接下来计划增加什么特性?

我并没有做为这个 iOS 编译器编写补丁这种艰苦的工作。基本情况是,苹果使用了一个老版本的 ARM 汇编编译器,从根本上讲,还是一个派生版本。因此,与 Linux 汇编编译器生成的 ARM 程序相比,他们的 ARM 汇编程序略有不同。所以,Gerd Stolpmann 及来自 Psellos.com 的朋友们才是真正的英雄,是他们提供的编译器和补丁让它可以投入使用并具备了重现性。所以现在,这还是该编译器的一个补丁版本,但很快它将正式成为该编译器的一部分。

所以,我接下来准备增加的特性是为每个版本创建更多的程序包。例如,现在仅能支持到 iOS SDK 8.3,但我可以增加更多的编译器,比如说,支持到 SDK 9.2。Jeff 在 Psellos 已经完成了令人惊叹的工作。他刚刚又有新的发布,这次是 OCaml 4.02.3,那是最新最棒的版本,适用于 iOS SDK 9.2。基本上是最先进的。

OCamliOS 运行在 OS X 10.11 上,生成 iOS 7.0+ 代码。Opam-ios 可以从 OCaml 包管理器 OPAM 安装。

查看英文原文: OCaml Now Ready for iOS Development

2016-01-31 18:003208
用户头像

发布了 1008 篇内容, 共 424.3 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

全链路压测(五):生产全链路压测实施全流程

老张

性能测试 全链路压测 稳定性保障

千万级学生管理系统的考试试卷存储方案

风中奇缘

架构实战课 「架构实战营」

DDD实战(3):整体工作框架和全局需求分析

深清秋

DDD 软件架构 生鲜电商系统 3月月更

架构师训练营模块四作业

刘帅

千万级学生管理系统Redis存储架构

IT屠狗辈

redis 架构实战营

千万学生管理系统之考试模块存储架构设计

随欣所遇

架构训练营5期

工作想法小计(4):2/28 - 3/4

非晓为骁

个人成长 工作 细节 工作想法

构建 Go 应用 docker 镜像的十八种姿势

万俊峰Kevin

微服务 web开发 go-zero docker image Go 语言

模块四作业

Mr小公熊

模块八-作业二

hunk

云原生训练营

【模块四】千万级学生管理系统考试试卷存储方案设计

yhjhero

#架构训练营

峰会报名|从金融行业技术选型,看 RocketMQ 如何应对严苛挑战

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 峰会报名

强大的JSON.stringify,你真的会使用吗?

战场小包

JavaScript 前端 3月月更

关于千万级学生系统考试的思考

Geek_1b4338

#架构训练营

千万级学生管理系统考试试卷存储方案设计

tom

[架构实战营]-千万级学生管理系统的考试试卷存储方案

邹玉麒

「架构实战营」

模块四

blazar

「架构实战营」

千万级学生管理系统考试试卷存储方案

Geek_36cc7c

如何在 Windows 上使用 NVM 安装 Node.js?

Ethereal

2022第9周-打动面试官的一点经验

李印

面试 总结思考

感受当下-人生意义的思索

李印

自我感悟 生活的意义

MySQL 15条常用的SQL知识(18/100)

hackstoic

MySQL

第四课作业

浪飞

最佳实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断

阿里巴巴云原生

阿里云 Kubernetes 云原生 服务器 DNS

在阿里巴巴,我们如何先于用户发现和定位 Kubernetes 集群问题?

阿里巴巴云原生

阿里云 云原生 分享 KubeProbe

网络工程师必知:三种防火墙链路检测技术:BFD、NQA、IP-link

Ethereal

架构实战营:模块四作业

刘璐

千万级学生管理系统的考试试卷存储方案

smile

架构实战营

千万级学生管理系统的考试试卷存储方案

凌波微步

「架构实战营」

节省 58% IT 成本,调用函数计算超过 30 亿次,石墨文档的 Serverless 实践

阿里巴巴云原生

阿里云 云原生 函数计算 石墨文档 资源伸缩

PHP 遇见 Serverless,帮你解决这些痛点!

阿里巴巴云原生

php 阿里云 Serverless 云原生

OCaml已经做好iOS开发准备_移动_Sergio De Simone_InfoQ精选文章