最近在尝试一些新的架构,玩点花活儿!小有所得,分享给大家。
因为它酷😎,因为个人喜欢,所以用它作为锤子,到处找钉... Nah... just kiddin' ~
必须有一些很合理的理由。理由们如下:
解决上述问题,可以采用任何操作系统都支持、几乎任何语言都能对接的 C 语言实现。可是我们知道 C 不是一种最“安全”的语言 - 线程安全、内存防泄漏... 作为一门四十年以上历史的“古早”语言,C 不是最佳选择。Microsoft 和 Linux 社区都认为,三分之二的软件安全脆弱性问题可以归结到内存安全的根源上。
能达到 C 语言级别的性能(比C++快)、又安全稳健的“现代”语言,可供选择的不多,一拍脑门想到的是 Rust。Rust 能写出这样的代码:
Rust 几乎可以说要成为一把开发的“瑞士军刀”:有人拿它替代 Python 写机器学习的应用、有人拿它编译 WebAssembly 的代码跑在浏览器中、有人用它写前端 UI、有人拿它实现区块链、有人拿它写智能合约。它甚至成为 Linux 官方接受的除 C 语言之外唯一的可用于内核开发的语言。
用 Rust 编写、编译代码跑在设备端?没有问题。
另一个好消息是,在 iOS 平台上,Swift/Objective-C 代码调用 C 函数,耗损几乎可忽略不计。确实,Objective-C 本身可以被视为 C 的超集,在 Objective-C 中整合 C 的代码本身就是“纯天然”的。Rust 代码编译成 iOS 目标平台的静态库,并利用工具生成C头文件,就可以供 Swift/OC 代码集成了。
此外,对于 Swift 程序员来说,以 Swift 背景学习掌握 Rust 似乎也比其他语言背景便利,Swift 和 Rust 都是基于 LLVM 的语言,在这些年的语言进化中,Swift 的设计也受到 Rust 的启迪,网上有不少同时掌握 Swift 和 Rust 的程序员,这里就有人比较了两种语言的特征。
Core:基于Rust实现的核心算法(数据处理、加解密、网络并发、本地嵌入式存储、机器学习...)
Platform Wrapper:所在设备的人机交互以及其他应用层组件的粘合、集成。Wrapper 的具体实现技术就多了去了,包括但绝不限于这些:
基于 Rust 写出来的 core,在上述操作系统都能编译运行(首先感谢 LLVM,然后是如果你妥善使用 Rust 以及其相关工具链例如 cargo 的话)。Rust 适用于“原创” - 即你自己“手写”的代码,如果这些代码主要是以一定的数据结构与算法实现的逻辑,它们没有什么理由不能跨平台。
但如果你写的代码主要是一些第三方网络服务、REST 接口集成的“glue code”,即粘合型代码,则这种代码是否有称得上“core”或者是否有必要独立存在而不是融合至 wrapper 中,就有待商榷了。
假设我们用 Rust 写出了一个跨平台的通用的 core,并且我们也非常轻易的就构建PC/Mac、iOS、Android(手机、IoT/智能设备)上的 wrapper,为了降低开发成本、实现应用逻辑开发一次即可在多个平台运行,还可以更进一步做点什么呢?
拦路虎是人机交互(UIUE)部分,当前业界也有各种方案选择:
其中 FinClip 小程序的方案,和前二者其实不见得特别适合对比,不是一个门类。
这样的话,我们可以尝试一个这样的“夹心饼”架构,把各平台原生的差异化部分放在中间并压缩它负责的范围,在上下两侧利用通用化技术分别实现人机交互和核心算法:
利用 FinClip 技术,我们就可以轻易打造一款跨 iOS、Android(和其他主流操作系统)的设备端应用,具备运行各种小程序的能力,并让这些小程序利用到以 Rust 语言开发的跨硬件、跨操作系统的原生功能。
用 Rust 实现一些计算类的功能(例如一个存储密钥的加密货币钱包),如何在设备端让小程序调用(例如构建一个加密货币钱包或者DeFi应用的管理界面)?
要做的事情如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。