Kotlin Native CInterop

最近在搞 k/n 鸿蒙的适配,也是有一些前人踩过坑,但是都没有开源,还是要自己埋头钻研

这部分后续会给一个详细文档吧

今天主要来介绍 kotlin/native 中的 cinterop

其实,在编译 kotlin/native 编译器,生成编译器需要的 platformLib 时,我就已经看到了 cinterop。他通过 kotlin/native 工程中声明的一些 .def 文件,编译过后都变成了标准的 kotlin 的跨平台库(klib) 格式

2024提前总结

为什么选这个奇怪的时间写下这篇文章呢?因为我终于确定了一个 offer 了吧(当然后续可能也有幺蛾子,比如小米 offer call 以后,又说没有 hc,雷总···你们招人也太奇怪了···)。然后,这段时间的经历实在让我意难平,又做了一次人生的错误决定来到传说中的宇宙条,不过人生的魔抗叠厚了不少

ASM 和 JVM 关联知识

背景

最近做日志治理(其实也没啥治理的),发现日志存活时间很短,因为各个业务方的日志汇总在一个实例里,有任何无用日志频繁打印,都会把日志覆盖掉

那其实,治理的办法也很简单:

LearnJVM 有趣的发现

为了兑现自己立下的 flag 🤣,这两天刚好假期前,继续实现 JVM

打算定个小目标:每个月更新一次 LearnJVM 这个项目

第五章的指令好多好多,所以还在不断地 copy & paste

实现的途中发现了 ICONST_X 指令很有意思,如下图:

LearnJVM 重启

虽然今天是愚人节,但是还是要立下 flag,重启 JVM 项目

之前,一方面想学习 rust,一方面也想更深入的理解 JVM,于是这么一个项目就诞生了

源码来自 《自己动手写Java虚拟机》,我将 go 翻译为 rust(但是因为很多 rust 概念刚接触,写的结构很凌乱,也都不是最佳实践,只求编译通过)

maven publish dependency

​今天 pull 工程,发现有个库的源码看不到,在 gradle external libraries 中也找不到,只能找到一个 api 接口层的代码

于是,就研究了一下原因

pom 文件

我们在向 maven 发布 aar 时,会生成对应的 pom 文件,告诉我们具体依赖哪些额外 lib

Kotlin/Native

最近 KMP 或者说 KMM 在移动端挺火,我非常好奇它是如何跨端的

看了一下官方文档,只知道是通过 LLVM 把 Kotlin 转为 IR 再转为目标平台二进制。这部分我目前还没去分析,因为 LLVM 相关的知识我实在知之甚少,后面也会去补足

fp unwind

为了公司内部写一篇软文,所以这篇文章重写了一下~~

正文

今天给大家分享一种 arm64 平台下栈回溯的方式 —— fp(frame pointer) 回溯,同时会介绍一些基础概念和实现原理

首先,我们需要知道栈回溯是做什么的?
其实就是用于获取当前 thread 的调用堆栈的

资源去重

最近不知道为什么,我司又开始缩减包体积了,在这个 app 都 100-200M 的年代,在这个 5G 遥遥领先的年代,不知道卷个啥?

那问题不大,既然有需求,我们照做便是

前置思考

Android 包体积由多方面构成,这个我之前的文章里也有说过,所以包体积缩减的手段有很多,这个就不一一介绍了

ToyJVM 学习

前段时间看了下 Elk(十分简单的 JS VM,其实算是个 parser + interpreter 吧)的代码,学到了一些计算机基础的东西。

比如,我写代码这么久,甚至不知道 double 的内存结构和 7FF 代表什么。比如,因为没有系统学习过编译原理等等,没有 opcode 相关的概念,如何设计 interpreter(又想回去读书了···)。