.net core发布 正在发现数据上下文_Deno通过V8和Rust的数据传递

本文探讨了Deno如何通过Rusty_v8库在V8和Rust之间进行函数注册和数据传递。介绍了Deno在执行业务代码前加载`shared_queue.js`,以及该文件中封装的通信接口,包括`dispatch`方法和`handleAsyncMsgFromRust`回调函数。同时,阐述了数据传递的格式,涉及JSON和Uint8Array的转换。
摘要由CSDN通过智能技术生成

c3d072e5fcf87ed5d349a47415f51508.png

题外话

这几天终于能放下一些事情,回头来关注一下Deno,打开Deno目录,git pull一下,突然有点小惊喜,那一大坨C++ binding相关的东西被移除了,感觉整个Deno目录整洁了许多,再仔细瞧瞧,发现整个项目的目录重构后,也比原来理解起来也轻松多了。Rust中使用V8,避免不了使用C++,那么V8和C++那一部分到哪儿去了呢?

答案是:

denoland/rusty_v8​github.com
55ae24c899054b25a790ee249b8245ea.png

打开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#L6​github.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值