7 个版本
0.2.6 | 2024年5月10日 |
---|---|
0.2.5 | 2024年3月14日 |
0.2.1 | 2024年2月24日 |
#199 在 编程语言 中
每月 43 次下载
265KB
6.5K SLoC
Claw是一种编译为Wasm组件的编程语言。Claw中的值与组件模型中的值具有完全相同的类型,Claw源文件的导入/导出代表一个组件“世界”。
这意味着不需要绑定生成器或间接引用。您可以接收组件值作为参数,对它们进行操作,创建它们,并返回它们。
let mut counter: s64 = 0;
export func increment() -> s64 {
counter = counter + 1;
return counter;
}
export func decrement() -> s64 {
counter = counter - 1;
return counter;
}
(对组件模型值的全面支持仍在进行中)
用例与目标
组件测试
Claw能够轻松定义组件导入和简单逻辑,非常适合编写组件测试。
import add: func(lhs: s32, rhs: s32) -> s32;
export func test() -> result<(), string> {
if add(1, 1) == 2 {
return ok(());
} else {
return err("test failed");
}
}
通过添加一个返回当条件为真时为 ok(())
,当条件为假时为 err("<nice message>")
的内置函数 ?
早期返回操作符,我们可以使编写这些测试变得更加容易,并使输出变得更好。
import add: func(lhs: s32, rhs: s32) -> s32;
export tests: interface {
func test() -> result<(), string> {
check!(add(1, 1) == 2)?;
...
return ok(());
}
...
}
适配器和填充程序
有时,用户将会有为某个世界编写的组件,但想在另一个世界中运行它们。
Claw可以轻松编写简单的适配器或填充程序,以便用户可以在更多地方运行其现有代码。
虚拟化和模拟
使用组件,我们可以实现令人难以置信的本地开发体验,其中资源如消息总线和键值存储可以实施为简单的组件,并用于运行测试和开发中的应用程序。
Claw非常适合编写简单的内存虚拟化,使测试和开发变得容易。
扩展
某些应用程序(例如 数据库)已经可以通过Wasm进行扩展,并且随着这变得越来越普遍,用户可能希望编写一些逻辑小片段,作为过滤器或策略,定义如何处理事件,或实现缺失的数学或领域函数。
Claw可以轻松编写这些扩展,同时仍然生成非常小的组件,可以快速存储、传输和实例化。
简单服务
待办事项
与其他项目的关系
有多个项目用于表示组件模型的不同方面
Claw 将使用 WIT 语法来定义类型,WAC 语法来定义组合,以及 WAVE 语法来定义结合它们的字面表达式,以便更直观地使用这些不同的工具。
依赖项
~10MB
~172K SLoC