Open TGSAN opened 2 years ago
尝试过了,上游一个库(rquickjs)不支持win arm,所以暂不提供
尝试过了,上游一个库(rquickjs)不支持win arm,所以暂不提供
现在还没能支持吗?
我尝试编译,发现 ring 也不支持。可能要等下面这个更新
尝试过了,上游一个库(rquickjs)不支持win arm,所以暂不提供
或许我可以提供一个兼容性比较好的quickjs binding
@morn-0 怎么说
@morn-0 怎么说
我目前维护了一个兼容性比较好的quickjs binding。不过目前在往里面添加canvas api的支持。我可以先拆分出一个干净的分支,在这里先换掉rquickjs保证整体的兼容性
我简单拆了一个 stable
出来(公司内部已上生产),如果你想测试的话可以使用 quick-rs [stable]
use quick_rs::{context::Context, function::Function, module::Module, runtime::Runtime};
const SCRIPT: &str = r#"
function main(config) {
if (Array.isArray(config.rules)) {
config.rules = [...config.rules, "add"];
}
// console.log(config);
config.proxies = ["111"];
return config;
}
"#;
fn main() {
let runtime = Runtime::new();
let context = Context::from(&runtime);
let script = format!(
"{};export function _main(config) {{return JSON.stringify(main(JSON.parse(config)));}}",
SCRIPT
);
let value = context.eval_module(&script, "_main").unwrap();
let module = Module::new(value).unwrap();
let value = module.get("_main").unwrap();
let function = Function::new(value).unwrap();
let string = context.new_string(r#"{"rules":[]}"#).unwrap();
let value = function.call(vec![string]).unwrap();
println!("{}", value.to_string().unwrap());
}
这个版本和上游 quickjs 保持一致,未做任何修改仅合并了一些bug fix。在兼容性方面可能是目前 rust 中最好的,只支持 bingen。(之所以维护这个 binding 是因为公司内部需求,之前我们也是用 rquickjs
。但是我们有跨平台的需求比如 (Linux, Android, iOS, Windows, macOS)/(aarch64/x86/amd64)
,但是 rquickjs
在兼容性方面有一些问题,并且存在内存泄漏的风险。所以才会出现这个 binding)
但是目前还不支持 console.*
我觉得可以先 hack 掉,如果你觉得可以的话,我可以加上 console.*
的支持。
在基于 ARM64 的 Windows 设备上(比如Matebook E Go、Surface Pro X、thinkpad X13s、MacBook),虽然可以用转义运行 Clash Verge,但是速度慢而且不能正常使用TUN模式。
希望可以在 Releases 构建时增加一个 Windows ARM64 的包。