当前位置: 首页 > news >正文

OCaml已经做好iOS开发准备

近日,来自旧金山的程序员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 \\#include \#include \\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;\}
\\

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

相关文章:

  • spring MVC自定义视图实现jsonp
  • 怎么提高ArcGIS for Desktop10.x的性能
  • python文件相关操作
  • socket.io+angular.js+express.js做个聊天应用(四)
  • BUG系列
  • openstack环境准备
  • MYSQL远程登录权限设置(转)
  • linux 下 NFS服务器配置
  • Spoj 2713 Can you answer these queries IV 水线段树
  • swap函數 进阶探讨与实现
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • Badboy - 从excel中读取数据
  • spring - ioc和aop
  • Java中内存分配
  • Android--获取系统时间的几种方式
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • __proto__ 和 prototype的关系
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【刷算法】从上往下打印二叉树
  • 2017届校招提前批面试回顾
  • gcc介绍及安装
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 如何优雅地使用 Sublime Text
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 因为阿里,他们成了“杭漂”
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​什么是bug?bug的源头在哪里?
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $().each和$.each的区别
  • (14)Hive调优——合并小文件
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (javascript)再说document.body.scrollTop的使用问题
  • (rabbitmq的高级特性)消息可靠性
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • .md即markdown文件的基本常用编写语法
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Framework杂记
  • .NET 分布式技术比较
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net6 Api Swagger配置
  • .NetCore项目nginx发布
  • .NET正则基础之——正则委托
  • /etc/fstab 只读无法修改的解决办法
  • ??在JSP中,java和JavaScript如何交互?
  • @Bean有哪些属性
  • @ConditionalOnProperty注解使用说明
  • @基于大模型的旅游路线推荐方案
  • [ACTF2020 新生赛]Upload 1