写点什么

Kotlin Native 新增 Objective-C 互操作能力以及对 WebAssembly 的支持

2017 年 11 月 30 日

根据 JetBrains 技术主管 Nikolay Igotti 的介绍, Kotlin/Native 0.4 已经可用于为 iOS 和 macOS 开发原生应用。此外该版本还为 WebAssembly 平台提供了实验性支持。

Kotlin/Native 对 iOS/macOS 开发的支持,关键在于实现了与 Objective-C 的互操作性。JetBrains 目前已经发布了一个非常简单的演示应用,该应用使用Kotlin 编写,已发布至 Apple Store Google Play

下列代码片段展示了访问 iOS 框架的方式:

复制代码
import kotlinx.cinterop.*
import platform.Foundation.*
import platform.objc.*
import platform.osx.*
fun readResource(resourceName: String): ByteArray {
val filePath = NSBundle.mainBundle.pathForResource(resourceName, ofType = null)
val fileData = NSData.dataWithContentsOfFile(filePath!!)
?: throw Error("failed reading resource $resourceName")
return fileData.bytes!!.readBytes(fileData.length.toInt())
}

这一切都是通过新的platform实现的,并通过库实现了对底层操作系统接口的访问。借此便可以使用提供了 POSIX OS 层的平台执行各类操作,如调用fopenfread等。以前与底层平台的互操作则需要专门生成的 Interop Stub。

新版的另一个新功能对象固定(Object pinning),主要是为了简化通过C API 使用Kotlin 对象的方式,借此可以确保通过C API 消费的对象能够锁定到内存中。

Kotlin/Native 现已开始支持 WebAssembly ,因此可以通过 Kotlin 开发基于浏览器的应用。但根据 Igotti 的介绍,由于浏览器支持方面的局限,这种支持目前依然是实验性质的。

在工具方面,调试功能现已支持在运行时检查大部分变量。此外同样重要的是,还通过一个新的插件让CLion 可以支持Kotlin/Native

Kotlin/Native 是 Kotlin 的最新成果,可用于将最初仅仅基于 JVM 的语言 Kotlin 编译为无需虚拟机即可运行的原生库。因此该技术非常适合诸如 iOS 等平台以及嵌入式设备等不能或者无法运行虚拟机的环境。Kotlin/Native 目前已经可以支持 Windows、Linux、macOS、iOS、Android 和 WebAssembly。

阅读英文原文 Kotlin Native Adds Objective-C Interop, WebAssembly Support

2017 年 11 月 30 日 18:001895
用户头像

发布了 283 篇内容, 共 85.2 次阅读, 收获喜欢 35 次。

关注

评论

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

资本之外,区块链破圈正当时

CECBC区块链专委会

区块链

【LeetCode】K 连续位的最小翻转次数Java题解

HQ数字卡

算法 LeetCode 2月春节不断更

如何读懂CNN、BBC、经济学人、卫报、纽约时报?看完这本经典即可事半功倍!

wbliu85

英语 学习经验

Hive HMS Canary 时间较长异常分析

笨小康

大数据 hadoop hive

区块链难在落地,亟需补人才缺口迎爬升期

CECBC区块链专委会

区块链

5.state更新流程(setState里到底发生了什么)

全栈潇晨

React React Hooks react源码

让虞书欣、李诞拍到停不下来!AR+AI双引擎的互动小游戏,如何打开IP新玩法?

爱奇艺技术产品团队

DPDK大页内存原理

赖猫

Linux DPDK

十四五期间我国区块链技术趋势特征分析

CECBC区块链专委会

区块链 大数据

诊所数字化:诊所医护人员绩效指标评估方式

boshi

绩效 数字化转型 医疗 日更挑战

元旦立下的Flag,春节后该如何实现?

脑极体

GitHub上爆火的Java性能优化100+小技巧!(干货建议收藏)

Java架构师迁哥

6.render阶段(厉害了,我有创建Fiber的技能)

全栈潇晨

React React Hooks react源码

电信的标准化组织

Geek_古藤模根

标准化 电信

对DevOps的九大误解,是时候纠正了!

陈琦

开源 DevOps 敏捷 自动化 持续交付

01 | Mysql基础架构

zach

MySQL

一、MongoDB简介

Kylin

数据库 mongodb 学习笔记 日更挑战 二月春节不断更

前端学习总结,经验分享,项目经验分享过程

魔王哪吒

学习 程序员 Vue 前端 2月春节不断更

技术需求文档,应当这么写!

Python编程参考官方账号

需求 文档

翻译:《实用的Python编程》01_06_Files

codists

人工智能 后端 python 爬虫 数据结构与算法 文件操作

如何提升网页核心指标

Vincent

最新Hadoop的面试题总结

大数据老哥

全程干货无废话!腾讯强推Redis深度笔记我粉了!

Java王路飞

Java 数据库 redis 程序员 面试

TCP 协议灵魂问题,巩固你的网路底层基础

网络技术平台

地表建筑物识别Dayo1

Tango

日更挑战 2月春节不断更

Elasticsearch Search API 基础语法

escray

elastic 日更挑战 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

TDD测试驱动开发的实践心得

御剑

架构 TDD 测试驱动开发

百度Hydra工具在移动端UI兼容性测试上的高效应用

百度架构师

测试 UI

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

newbe36524

Docker 微服务 k8s dotnet

linux内核协议栈 邻居协议之ARP协议处理初始化

赖猫

Linux 协议栈 Linux内核

15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工

橡皮擦

Python 2月春节不断更

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

Kotlin Native新增Objective-C互操作能力以及对WebAssembly的支持-InfoQ