15个不稳定版本 (6个重大更改)
0.7.2 | 2024年4月20日 |
---|---|
0.6.0 | 2023年7月22日 |
0.5.0 | 2021年11月13日 |
0.4.4 | 2021年7月29日 |
0.2.0 | 2020年10月13日 |
#919 在 过程宏 中
每月195次下载
用于 janetrs
51KB
1K SLoC
janetrs_macros
JanetRS的过程宏crate
宏
janet_fn
用法:
#[janet_fn]
#[janet_fn(arity(fix(<N>)))]]
其中N
是一个整数字面量#[janet_fn(arity(range(<MIN> [, MAX])))]]
其中MIN
和MAX
是整数字面量#[janet_fn(check_mut_ref)]
#[janet_fn(arity(<...>), check_mut_ref)]]
结合两者
宏将高级 Janet 函数(fn(&mut [Janet]) -> Janet
)转换为 Janet C API 所期望的函数(fn(i32, *mut janetrs::lowlevel::Janet) -> janetrs::lowlevel::Janet
)
可选参数 arity
为函数添加了参数个数检查。它必须接收参数个数的检查类型。这些类型包括 fix
,表示固定参数个数,以及 range
,表示范围或可变参数个数。固定参数个数的 fix
类型接收 Janet 函数必须拥有的参数个数的整数,而范围参数个数的 range
类型可以接收两个参数,第一个是必选的,而第二个是可选的,第一个表示 Janet 函数必须接收的参数的最小个数,第二个表示 Janet 函数可以接收的参数的最大个数。如果未设置范围参数个数的最大值,则禁用最大值检查,允许可变参数。
可选参数 check_mut_ref
添加了一个检查,以查看函数是否接收了同一 *mut
指针的多个引用。此检查不是默认设置,因为 Janet 类型类似于具有内部可变性的类型,检查较为昂贵,但如果您想确保您的函数永远不会接收同一指针多次,则可以使用此功能。
条件 Janet 版本门控
用法
#[cjvg(<MIN_VERSION>, [MAX_VERSION])]
,其中MIN_VERSION
和MAX_VERSION
是字符串字面量。#[janet_version(<MIN_VERSION>, [MAX_VERSION])]
,其中MIN_VERSION
和MAX_VERSION
是字符串字面量。
该宏条件性地包含 input
,如果 Janet 的版本大于或等于传递的最小版本,并且小于传递的最大版本。
这意味着在最大版本中范围是开放的:[MIN_VERSION, MAX_VERSION)。
Janet 模块声明
用法
use janetrs::{janet_mod, Janet, janet_fn};
/// (rust/hello)
///
/// Rust says hello to you! 🦀
#[janet_fn(arity(fix(0)))]
fn rust_hello(args: &mut [Janet]) -> Janet {
println!("Hello from Rust!");
Janet::nil()
}
/// (rust/hi)
///
/// I introducing myself to you! 🙆
#[janet_fn(arity(fix(0)))]
fn hi(args: &mut [Janet]) -> Janet {
Janet::from("Hi! My name is GrayJack!")
}
#[janet_fn(arity(fix(0)))]
fn no_doc_fn(args: &mut [Janet]) -> Janet {
Janet::nil()
}
declare_janet_mod!("rust";
{"hello", rust_hello},
{"hi", hi},
{"no_doc_fn", no_doc_fn, "Using custom docs as string literal"},
);
一个宏用于声明 Janet 模块/库以及暴露的函数。
依赖项
~3–5.5MB
~102K SLoC