Kotlin/Native尝试

栏目: C++ · 发布时间: 5年前

内容简介:在官网看到Kotlin/Native已经达到1.0 Beta版于是就去尝试了一下,结果发现坑还是挺多的。首先Kotlin/JVM很多库是用不了的,这个已经猜到了。官网说已经预先导入了 POSIX、 gzip、 OpenGL、 Metal、 Foundation 等很多其他的库,然后我就尝试了下基本的文件读写。和C还是有一点的差别的。如下:运行结果如下

Kotlin/Native尝试

在官网看到Kotlin/Native已经达到1.0 Beta版于是就去尝试了一下,结果发现坑还是挺多的。

首先Kotlin/JVM很多库是用不了的,这个已经猜到了。官网说已经预先导入了 POSIX、 gzip、 OpenGL、 Metal、 Foundation 等很多其他的库,然后我就尝试了下基本的文件读写。和C还是有一点的差别的。如下:

fun hello(): String = "Hello, Kotlin/Native!"
fun letter() = "abcdefghigklmnopqrstuvwxyz"

fun main(args: Array<String>) {
    val file = fopen("data.txt", "w")
    fprintf(file, "%s", hello())
    fprintf(file, "%s", "\n")
    fprintf(file, "%s", letter())
    fclose(file)
    println("write finished")
    val filer = fopen("data.txt", "r")
    val buf = ByteArray(255)
//    fscanf(filer, "%s", buf.pin().addressOf(0))
    fgets(buf.pin().addressOf(0), 255, filer)
    fclose(filer)
    print(buf.stringFromUtf8())
    buf.pin().unpin()
    println("read finished")
    system("pause")
}

运行结果如下

> Task :runProgram
write finished
Hello, Kotlin/Native!
read finished
Press any key to continue . . . 
C:\BuildAgent\work\4d622a065c544371\runtime\src\main\cpp\Memory.cpp:1150: runtime assert: Memory leaks found

> Task :runProgram FAILED

令人郁闷的是提示 C:\BuildAgent\work\4d622a065c544371\runtime\src\main\cpp\Memory.cpp:1150: runtime assert: Memory leaks found ,虽然调用了 buf.pin().unpin() ,但依旧提示内存泄漏,也没有异常退出啊。

如果是改成如下方式就不会提示错误了:

fun hello(): String = "Hello, Kotlin/Native!"
fun letter() = "abcdefghigklmnopqrstuvwxyz"

fun main(args: Array<String>) {
    val file = fopen("data.txt", "w")
    fprintf(file, "%s", hello())
    fprintf(file, "%s", "\n")
    fprintf(file, "%s", letter())
    fclose(file)
    println("write finished")
    val filer = fopen("data.txt", "r")
    val buf = ByteArray(255)
//    fscanf(filer, "%s", buf.pin().addressOf(0))
//    fgets(buf.pin().addressOf(0), 255, filer)
//    fclose(filer)
//    print(buf.stringFromUtf8())
//    buf.pin().unpin()
    buf.usePinned {
        fgets(it.addressOf(0), 255, filer)
        fclose(filer)
        print(buf.stringFromUtf8())
    }
    println("read finished")
    system("pause")
}

结果如下:

> Task :runProgram
write finished
Hello, Kotlin/Native!
read finished
Press any key to continue . . . 

BUILD SUCCESSFUL in 9s

另外吐槽下,这么几行代码就要9s,是不是太慢了。

随后又试了下开启pthread线程,但是 pthread_create 函数的第一个参数 th: kotlinx.cinterop.CValuesRef<platform.posix.pthread_tVar>CValuesRef 类型的变量怎么获得一直误解,难道只能通过继承获得?

然后我在写文章的时候又发现只要这样写就可以了???

fun main(args: Array<String>) {
    pthread_create(null, null, test(), null)
}

typealias func = kotlinx.cinterop.CPointer<kotlinx.cinterop.CFunction<(kotlinx.cinterop.COpaquePointer?) -> kotlinx.cinterop.COpaquePointer?>>?

fun test(): func {
    return staticCFunction<kotlinx.cinterop.COpaquePointer?, kotlinx.cinterop.COpaquePointer?> {
        println("run test")
        it
    }
}

结果如下:

> Task :runProgram
run test
BUILD SUCCESSFUL in 8s
> Task :runProgram
write finished
Hello, Kotlin/Native!
read finished
Press any key to continue . . . 
C:\BuildAgent\work\4d622a065c544371\runtime\src\main\cpp\Memory.cpp:1150: runtime assert: Memory leaks found

令人郁闷的是它提示``


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

区块链与人工智能:数字经济新时代

区块链与人工智能:数字经济新时代

高航、俞学劢、王毛路 / 电子工业出版社 / 2018-7-23 / 80

《区块链与人工智能》是畅销书《区块链与新经济:数字货币2.0时代》全新修订升级版。本书是市场上为数不多的系统阐述区块链、人工智能技术与产业的入门级系统教程。从比特币到各类数字货币(代币),从基础原理到应用探讨,全景式呈现区块链与人工智能的发展脉络,既有历史的厚重感也有科技的未来感。本书的另一个亮点是系统整理了区块链创业地图,是一本关于区块链创业、应用、媒体的学习指南,以太坊创始人Vitalik专门......一起来看看 《区块链与人工智能:数字经济新时代》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具