26 个不稳定版本 (8 个破坏性更新)
新 0.9.0-rc.1 | 2024 年 8 月 15 日 |
---|---|
0.8.0 | 2024 年 5 月 23 日 |
0.7.4 | 2024 年 3 月 24 日 |
0.7.0 | 2023 年 12 月 3 日 |
0.1.1 | 2022 年 11 月 18 日 |
47 在 GUI 中
1,890 每月下载量
在 4 个包 中使用
250KB
2K SLoC
Crux ·
使用 Rust 开发跨平台应用
- 共享核心功能 - Crux 帮助您在移动(iOS/Android)和网页上共享应用程序的业务逻辑和行为——作为使用 Rust 构建的单个可重用核心。
- 轻量级 UI 外壳 - Crux 认为最好的体验是使用现代声明性框架(如 SwiftUI,Jetpack Compose,React/Vue,或基于 WebAssembly 的框架(如 Yew))构建的——然而,它旨在尽可能保持这个 UI 层的轻量级,其他所有工作都由共享核心完成。
- 类型生成 - 与核心的接口在所有语言中具有静态类型检查——为 Swift、Kotlin 和 TypeScript 生成类型和序列化代码。Rust 外壳可以直接导入核心。
- 功能 - 功能表达了调用 API 等副作用(包括 UI)的意图。因为所有副作用(包括 UI)都由外壳执行,核心变得非常容易进行全面测试——测试套件在毫秒内运行(而不是分钟或小时)。
入门指南
查看 Github 项目仓库中的 README。
阅读API 文档
观看最近在伦敦举办的Rust Nation 2023 会议上的入门演讲。
您还可以加入我们Zulip频道上的友好讨论。
注意,Crux 是实验性的,目前正在积极开发中(可能还不适合在生产应用中使用)。然而,主分支应该始终运行良好,并且我们会在前进的过程中努力保持示例和文档的更新。我们认为 API 现在已经稳定,所以您可以试一试!:-)
架构概述
基本架构概念是将纯计算任务与产生副作用的任务严格分离。这与 Elm 的工作方式类似。
无副作用的核心
在上面的图中,内部的“核心”在每个平台上编译并链接到外部的“壳”作为库
- 在iOS上作为本地静态库
- 在Android上作为使用Java Native Access的动态库
- 在浏览器中作为WebAssembly模块
实际上,由于 WebAssembly (Wasm) 是编译目标之一,因此核心必须保持无副作用,这是由于 Wasm 运行时环境的沙箱特性。
因此,核心完全隔离且安全,因为它无法访问任何外部 API。它所能做的就是执行纯计算并保持内部状态。
遵循 Elm 架构,核心定义了应用程序中的关键组件类型
Event
— 一个描述核心可以处理的事件的enum
Model
— 描述应用程序的内部状态ViewModel
— 表示应向用户显示的信息
前两个通过 Elm、Redux 或其他事件源架构中熟悉的 update
函数相互关联
fn update(
&self,
event: Event,
model: &mut Model,
capabilities: &Capabilities,
)
update
函数的职责是处理一个 Event
,相应地更新模型,并可能使用功能请求一些副作用。
应用程序壳
封装的平台本地“壳”使用适合该平台的语言编写,并充当执行所有非纯任务的运行时环境。从核心的角度来看,壳是核心运行的平台。
依赖项
~2.6–4MB
~83K SLoC