其他分享
首页 > 其他分享> > Kotlin Native凭什么吸引你

Kotlin Native凭什么吸引你

作者:互联网

n 在这方面也没有落后。Spring 在5.0版本以后就支持了 Kotlin 的API调用,另外还有Vert.X、Ktor、kotlinx.html等框架同样支持Kotlin。

Kotlin for JavaScript


就我们使用的体验来看,Kotlin 相比 JavaScript 并没有太大的优势,但是由于Kotlin 能够转化为JavaScript,所以它能够在将多个平台的业务逻辑控制在一套代码内的方向上走的更远。

Kotlin for Android


出于 google 官方对Kotlin 的支持,它在Andriod 平台的开发非常方便。Andriod Studio 对 Kotlin有着大量的支持,并且从3.0开始默认支持Kotlin 开发。另外Java 和 Kotlin 是可以进行互操作的,在使用 Kotlin 开发的过程中随时都可以切换到Java 继续开发,这对于还不熟悉Kotlin 的开发者来说会相当便利的。


Kotlin Native

图片

上图是Kotlin Native 的发展情况,从v3.0开始Kotlin Native才正式支持windows 平台的开发。

图片


上面就是Kotlin Native 的 Hello World 代码,可以看出这段代码其实和Java 的差别不大。不过在Java 中这段代码需要写在class 内,而Kotlin 没有这方面限制。


在代码编写完成后要通过Kotlinc 进行编译,编译完成后会生成一个hello.kexe 文件 ,运行该文件就可以执行代码。


目前Kotlin Native 的开发平台有Mac OS、Ubuntu、Microsoft Windows,应用平台包括iOS、Raspberry Pi、Android。


Kotlin 要做原生平台的开发,面临的首个问题就是如何与其他语言代码通信,其中最重要的是于C 语言的交互。要做到这点需要完成3个步骤,首先是创建 .def 文件,然后用cinterop 工具生成 bindings,最后编译Kotlin / Native 项目。

.def 文件


图中展示的是.def 文件的配置。Headers 是对需要引入的头文件的定义,linkerOpts.osx,linkerOpts.linux 分别是不同平台对应的包,后面的值是包的搜索路径。staticLibraries 则是用到的静态库的依赖,下面的libraryPath 是这些库的搜索路径。在导入git2.h文件的时候默认会同时导入依赖,而对于不需要的部分可以通过headerFilter 配置过滤。通过上面的.def 文件就可以去生成需要的库。

基本类型


在正式开发的过程中,所处理的更多是类型之间的映射。基本类型中Int 类型被映射到Kotlin的IntVar 中,char 则相对于 ByteVar 。

指针


在C 语言的开发中经常会碰到处理指针操作,Kotlin 也在这方面进行了对应的映射。下图就是他们之间的映射关系。

图片


Kotlin 提供了.pointed 来获取指针对应的值(*),.ptr 获取指针(&)。

指针转换


图片


指针转换在原生开发中十分常见,虽然安全性有些问题,但是应用场景还是有很多。Kotlin 也提供了指针转换的操作,上图是实践案例。


Strings


图片


String 基本上在所有的语言中都是比较特殊的类型,在开发过程中C 语言传递字符串,有时传递的是char 指针。Kotlin 中提供了获取这些指针的方法,以此来拿到字符串。不仅如此还可以将字符串反向转换成对应的char 指针。

回调


图片

回调会传递对应的引用,Kotlin 也提供了一些方法去创建对应的Object的引用,并且能拿到所需要的值。


内存


图片

内存管理对开发者来说成本还是比较大的,于是Kotlin 两种管理内存方式,一种就是原生的,直接申请内存释放内存。另一种方式相对更方便,Kotlin 提供了memScoped 闭包,在这个闭包中只需要申请内存,释放内存会自动进行。

.klib

图片

前面提到的都是Kotlin 与C 语言交互,而要能够应用就需要进行编译,对于库文件的编译要使用 -p library参数。上图中编译出来的是一个.klib文件,可以被其他的Kotlin 程序复用。

图片

Kotlin 还提供了klib的管理工具,可以进行第三方库的安装以及管理,并且还能查看库的内部情况。对于库的引用与Java很类似,直接通过import就能完成。


标签:Java,Kotlin,开发,内存,Native,指针,吸引
来源: https://blog.51cto.com/u_15127602/2756762