3 个不稳定版本
0.2.0 | 2022 年 2 月 5 日 |
---|---|
0.1.1 | 2021 年 11 月 14 日 |
0.1.0 | 2021 年 11 月 14 日 |
#7 in #tea
60KB
1K SLoC
Rust Tcl 扩展架构 (rtea)
使 Rust 编写 Tcl 扩展变得舒适。
lib.rs
:
rtea 尝试成为 Rust 的 TEA (Tcl 扩展架构)。
该库提供了围绕 Tcl 模拟实现所需包装器,以便在不使用不安全代码的情况下编写“rusty”的 Tcl 扩展。
示例
以下示例假设您在一个具有 cdylib
目标的项目的根目录中,并包含以下两个文件。如果您执行
cargo build
tclsh example.tcl
则应看到以下输出
Hello, world!
Hello from Rust!
src/lib.rs
use rtea::*;
#[module_init(Example, "1.0.0")]
fn init(interp: &Interpreter) -> Result<TclStatus, String> {
interp.create_command("example", example)
}
fn example(interp: &Interpreter, args: Vec<&str>) -> Result<TclStatus, String> {
interp.eval("puts {Hello, world!}").map_err(|e| e.get_string().to_string())?;
interp.set_result("Hello from Rust!");
Ok(TclStatus::Ok)
}
example.tcl
load ./target/debug/libexample.so
puts [example]
上面的 Tcl 代码使用 load
仅用于显示该模块可以正确地与 Tcl 交互。生产使用应将共享对象包装为 Tcl 软件包,并使用 package require example
加载它。已通过 module_init
宏处理注册“example”软件包。
注意
此代码假定它扩展了 Tcl,并将任何违反 Tcl API(意外的空指针、非 UTF8 字符串等)视为不可恢复的错误,应引发恐慌。