duckscript

plus7wist 的博客 记录精彩的程序人生 本文由博客端 http://pipe.b3log.org 主动推送

什么是 duckscript?

是一种类似 Shell 的脚本语言,但是嵌入在 cargo make 里。官网在:https://sagiegurari.github.io/duckscript。项目目录在:https://github.com/sagiegurari/duckscript


cargo make 是什么?

是一个 Rust 的任务运行器,以及构建软件。功能与 Gnu/Make 类似。项目目录在:https://github.com/sagiegurari/cargo-make


duckscript 的特点是?

简单,可扩展,内嵌。


如何安装?

用 cargo 安装,或者下载项目发布的二进制程序。


怎么写 Hello world?

# hello.ds
echo Hello world
$ duck hello.ds

duck 是 duckscript 的解释器。


echo 有几个参数?

两个,Helloworld。它们都是字符串。


如何创建变量?

out = set "Hello world!"

out 是一个变量,值是字符串 "Hello world!"


如何使用变量?

name = set Alice
echo Hello ${name}

set 是个特殊的语法吗?

不,它只是 duckscript 的 SDK 中的一个命令。是 std::var::Set 的别名。跟 echo 地位是一样的。


还有哪些常见的命令?

详见:https://github.com/sagiegurari/duckscript/blob/master/docs/sdk.md


duckscript 除了命令还有什么?

有预处理过程。


如何在 Rust 里内嵌 duckscript?

use duckscript::runner;
use duckscript::types::runtime::Context;

fn main() {
    // 新建上下文
    let mut context = Context::new();
    // 在此上下文加载 SDK
    let _ = duckscriptsdk::load(&mut context.commands);

    // 运行一个脚本
    //
    //   # hello.ds
    //   name = set Alice
    //   echo Hello, ${name}
    let result = runner::run_script_file("hello.ds", context);

    // 成功时返回运行后的上下文。
    let new_context = match result {
        Ok(context) => context,
        Err(error) => {
            eprintln!("duckscript error: {}", error);
            return;
        }
    };

    // 运行字符串,此时的上下文里已经有了 name 这个变量。
    let _ = runner::run_script("echo Name is ${name}", new_context);
}
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    15 引用 • 12 回帖 • 12 关注
1 操作
plus7wist 在 2020-06-30 15:40:06 更新了该帖

赞助商 我要投放

回帖
请输入回帖内容 ...