kornhill
作者kornhill·2022-04-29 15:20
Architect·FinoGeeks

FinClip+Rust(五):总结与更多...

字数 1868阅读 606评论 0赞 0

FinClip+Rust(五):总结与更多...

FinClip+Rust(五):总结与更多...

从 Rust 到达 FinClip 小程序,开发过程实质上是层层的跨语言的接口转换、数据转换。

只要把中间的转换机制弄明白弄熟练,其实技术上的实现是比较机械的。一旦成为“熟手技工”,熟练掌握写转换代码的技能,我们就可以把注意力、创新焦点放在 Rust 侧和小程序侧,一侧让我们实现算法型、逻辑型的跨平台通用的代码,另一侧让我们赋能其他前端开发者去创造应用。

如之前的几篇文章所介绍,我们需要经过三种语言、数据结构在各语言之间的适配:

  • Rust 代码,通过 FFI(Foreign Function Interface),输出 C 风格的 API 接口,以及 C 的数据类型、内存结构。这里的 tricky part,是在编译器跟前和 Rust 的ownership内存模型作“缠斗”,刚开始对这个语言不熟悉的时候,学习曲线比较陡峭,遭遇的困难往往让人气馁,但是一旦柳暗花明,又带来很大的满足感。虽然 Rust 是一个内存安全的语言,可是 C 不是,C 侧的使用过程,依然可能导致内存泄漏
  • 第一步产出的 library,需要被目标平台的原生代码集成,才能被注入至 FinClip SDK 中实现扩展。在 iOS 上,C library 在 Objective-C、Swift 的调用性能耗损几乎可以忽略不计,C 函数在 Objective-C 代码中基本是无缝使用,毕竟 Objective-C 可视为是 C 的超集。在 iOS 上,是 C 类型的函数入参和返回值需要被转换成 Objective-C 的 NSDictionary 之类的字典类型。在 Android 上,涉及JNI 一层转换,变成 Java 对象。但A ndroid 官方提供基于 Rust 开发 native component 的支持,看上去更值得深入探索。本文未及尝试,有待来者补充
  • 最后是原生部分的接口,经过 FinClip SDK 映射至 JavaScrip t侧,供小程序的应用开发。这里涉及的是原生代码的字典类型数据转换成 JSON 数据

代码层层转换,是 Polyglot Programming(多语言混合编程)所难以避免 - 我们用最适合的语言去解决最对口的问题,但是最终每一个局部方案都需要互相连贯起来。实现了第一次,第二、第三次就难度按指数级别下降,也许最后就是“唯手熟尔”。

还可以尝试更多

受时间与篇幅限制,还有更多内容未及试验。以下是一些可以在现有代码上继续扩展的功能,是熟悉 FinClip+Rust 的很好练习:

  • 完成 crypto wallet 的本地存储和读取:把生成的密钥对和地址持久化存储在宿主App 中。在 iOS 可能需要用 Core Data,但是 Rust+LevelDB 说不定也 OK。更进一步,还可以实现对密钥的加密存储
  • 实现私钥对交易的签名
  • 使用 Rust Web3 crate(Ethereum JSON-RPC 库),连接以太坊测试链,实现一下账户余额查询、转账支付等功能
  • 站在牛人的肩膀上,试试借用现成的QR code开源项目来给钱包地址、私钥生成相应的二维码。这个项目支持包括Rust、TypeScript在内的多种语言的实现,生成 SVG 的输出,可以顺便试试在 FinClip 小程序中怎么显示 SVG 内容
  • 试试Android、Linux/Mac/Windows 平台上实现同样的 demo
  • Rust是最早支持编译生成 WebAssembly 的语言。WebAssembly 对小程序性能提高有一定的帮助。互联网主流平台的小程序技术的基础库对 WebAssembly 已经开始支持。在这里,Rust 同样有可观的发挥空间

欢迎读者对这个 demo 继续作出更多尝试,寻找实际应用场景、探索实用价值。

    • -

本系列文章

Source code on Github: https://github.com/kornhill/finclip-rust-demo.git

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关资料

X社区推广