KCP 开发
最近,一直在搞 kmp(Kotlin Multiplatform),这个框架出发点倒还可以,可以实现一码多端
但是,路漫漫其修远兮,感觉就是在用 kotlin 写 c
各种提效工具比较落后,文档比较稀少,需要自己去研究(国内大厂:研究 + 魔改 = 自研 = 世界领先)
最近,一直在搞 kmp(Kotlin Multiplatform),这个框架出发点倒还可以,可以实现一码多端
但是,路漫漫其修远兮,感觉就是在用 kotlin 写 c
各种提效工具比较落后,文档比较稀少,需要自己去研究(国内大厂:研究 + 魔改 = 自研 = 世界领先)
最近,在搞 kmp 工程化的一些东西,因为官方不支持 ohos,所以其对应的 android studio plugin 也不支持 ohos
比如:创建一个 module 等等,都不会自动携带 ohos 目录
看了 kuikly 提供了一个 project 模板,但是没有提供 new module 的模板,所以,开始研究有关 new module 的插件开发
最近,腾讯 kuikly 开源了自己的 kotlin 编译器,支持了鸿蒙平台
查看了一些他们的源码后,发现,他们做的一些优化和适配比较有借鉴意义。其中,符号导出、字符串优化 和 鸿蒙平台的 ndk 适配这块,最值得学习
本文主要介绍如何让 kotlin/native 在适配了鸿蒙平台后,开启 asan 功能(kotlin 版本基于 2.0.21)
ASAN(Address Sanitizer)是针对 C/C++ 的快速内存错误检测工具,在运行时检测 C/C++ 代码中的多种内存错误
kotlin/native 适配鸿蒙,除了编译器方面的修改之外,还有比较重要的一部分就是 napi 代码的自动生成了
kotlin/native 和 napi 的关系:
kotlin/native 实际产物就是对应平台二进制,在 ohos 上就是 linux elf
ohos 上层应用使用 arkts 开发,想调用 so 中的方法,有一层类似 jni 的机制,其实就是 nodejs 的 napi 机制
所以,想从 arkts 调用 kotlin/native 的代码,其实就是要自己写一层 napi
最近在 kotlin/native 上适配鸿蒙,感觉坑很多。而且 kotlin/native 相当于用 kotlin 写 c/c++,出现内存问题,一样挠头
其次,kotlin/native 因为要适配 iOS 的 platform,和 xcode 绑定的也很死,同时自己又和 llvm 绑定的很死,编译的时候有各种问题,比如 kotlin 1.9.x 没法和 xcode16 一起使用···
为什么选这个奇怪的时间写下这篇文章呢?因为我终于确定了一个 offer 了!(当然后续可能也有幺蛾子,比如小米 offer call 以后,又说没有 hc,雷总···你们招人也太奇怪了···)。然后,这段时间的经历实在让我脑壳子嗡嗡的,又做了一次人生的错误决定来到传说中的宇宙条,不过人生的魔抗叠厚了不少···
最近做日志治理(其实也没啥治理的),发现日志存活时间很短,因为各个业务方的日志汇总在一个实例里,有任何无用日志频繁打印,都会把日志覆盖掉
那其实,治理的办法也很简单:
为了兑现自己立下的 flag 🤣,这两天刚好假期前,继续实现 JVM
打算定个小目标:每个月更新一次 LearnJVM 这个项目
第五章的指令好多好多,所以还在不断地 copy & paste
实现的途中发现了 ICONST_X 指令很有意思,如下图:
虽然今天是愚人节,但是还是要立下 flag,重启 JVM 项目
之前,一方面想学习 rust,一方面也想更深入的理解 JVM,于是这么一个项目就诞生了
源码来自 《自己动手写Java虚拟机》,我将 go 翻译为 rust(但是因为很多 rust 概念刚接触,写的结构很凌乱,也都不是最佳实践,只求编译通过)