题外话
这几天终于能放下一些事情,回头来关注一下Deno,打开Deno目录,git pull一下,突然有点小惊喜,那一大坨C++ binding相关的东西被移除了,感觉整个Deno目录整洁了许多,再仔细瞧瞧,发现整个项目的目录重构后,也比原来理解起来也轻松多了。Rust中使用V8,避免不了使用C++,那么V8和C++那一部分到哪儿去了呢?
答案是:
denoland/rusty_v8github.com打开rusty_v8的目录,可以熟悉的看到http://binding.cc这个文件,这个rust的crate算是对原来Deno中V8 binding部分的提炼和封装。rusty_v8的出现对于Deno和Rust社区无疑都是好事儿。
https://github.com/denoland/rusty_v8/blob/master/src/binding.cc#L6github.com胡扯了一通,还是回到这篇文章的正题《Deno通过V8和Rust的数据传递》。
一、函数的注册
重新来看Deno的函数绑定,没有太大的变化,只是改为在Rusty_v8的API基础上去进行封装了。抄段代码就能一下看明白了。send和recv等方法的作用基本没变,都是binding到V8的scope上,提供给JavaScript调用,在某种程度上可以和JsBridge做个类比。变化的只是由原来的C++代码改为了Rust代码。
let mut recv_tmpl = v8::FunctionTemplate::new(scope, recv);
let recv_val = recv_tmpl.get_function(scope, context).unwrap();
co