7 个版本

0.2.6 2024年5月10日
0.2.5 2024年3月14日
0.2.1 2024年2月24日

#199编程语言

每月 43 次下载

MIT/Apache

265KB
6.5K SLoC

claw-cli

Claw编程语言的编译器

build status Crates.io version Download docs.rs docs

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可以轻松编写这些扩展,同时仍然生成非常小的组件,可以快速存储、传输和实例化。

简单服务

待办事项

与其他项目的关系

有多个项目用于表示组件模型的不同方面

  • WIT - 组件模型的官方 IDL
  • WAC - WIT 的扩展,增加了定义如何连接组件的能力
  • WAVE - 一种以类似 json 的方式编码组件模型值的格式

Claw 将使用 WIT 语法来定义类型,WAC 语法来定义组合,以及 WAVE 语法来定义结合它们的字面表达式,以便更直观地使用这些不同的工具。

image

依赖项

~10MB
~172K SLoC