美文网首页
NVM V8引擎

NVM V8引擎

作者: nit小星星 | 来源:发表于2019-11-14 17:13 被阅读0次

网络部分暂且放一放

还是setup()的下一步

V8 is Google's open source JavaScript engine.

n.nvm = nvm.NewNebulasVM()

type NebulasVMstruct{}

// NewNebulasVM create new NebulasVM

func NewNebulasVM() core.NVM {

return &NebulasVM{}

}

初始化一个VM

if err = n.nvm.CheckV8Run(); err != nil {

logging.CLog().WithFields(logrus.Fields{

"err": err,

}).Fatal("Failed to setup V8.")

}

看一下V8环境变量是否正确设置

接下来看一下

文件结构

nf/nvm/

lib ____js库

lnvm_____没有用

native_____v8动态链接库以及星云链桥接的c++代码

test————测试代码

v8_______js库和go实现的桥接逻辑

blockchain___blockchain相关函数

context____NVM的context

crypto______加密相关函数

engine_____NVM接口实现

enginev8____smartcontractengine 接口实现

event___事件相关函数

module__模块相关函数

storage____账户储存相关函数

types_____类型相关定义

接下有关V8的几个API

isolate context

isolate有完整的V8实例,有完整的堆和栈。context是一个上下文,js代码都是在一个context中运行的

https://stackoverflow.com/questions/19383724/what-exactly-is-the-difference-between-v8isolate-and-v8context

上边有他们的区别

一个isolate某一时刻只有一个runtime 

包括但不限于一个heap管理器,垃圾回收等

一段时间内,有且只有一个线程能使用此isolate,不过多个线程可以同时使用多个isolate

单独的isolate不足以运行脚本,需要一个全局对象。context就是这样的一个提供全局对象的工具

对于一个给定的isolate不仅可以有多个context,并且这些context可以共享某个对象

handle和handle scope

handle是一个js对象的索引

它指向js对象在v8管理的heap中的位置

handle不存在heap中,而是存在于stack中。只有一个Handle被释放后才能从stack中推出。

有时候需要声明很多handle。未免太麻烦,所以就有了handle scope

template模板

模板(Template)用在定义一个Context下的JS的对象或者函数。Funct ionTemplate将

C++的函数暴露给JS。每个Funct ionTemplate对应- -个0bj ectTemplate。

Funct ionTemplate相当于0bj ectTemp late的构造函数。Template 的示例如下:

创建一个模板实例

v8: :Handle<v8:: objectTemplate> global = v8: :ObjectTemplate: :New();

将我们之前实现的Plus函数模板,与JavaScript的plus函数关联起来,相当于其回调函数

global->Set(v8: :String: :New("plus"), v8:: FunctionTemplate: :New(Plus));

accessor

一个accessor是c++的一个回调函数,当javascript访问一个对象属性时。它被回调并返回一个值。accessor通过object template来设置

accessor需要通过一个object template来设置 使用setAccessor 该方法需要提供一个属性和关联的两个回调作为参数

type  V8Engine  struct {

ctx                                    *Context    //context

modules                                Modules     //模块

v8engine                                *C.V8Engine    //  v8中的V8engine

strictDisallowUsageOfInstructionCounter int    //

enableLimits                            bool

limitsOfExecutionInstructions          uint64

limitsOfTotalMemorySize                uint64

actualCountOfExecutionInstructions      uint64

actualTotalMemorySize                  uint64

lcsHandler                              uint64

gcsHandler                              uint64

innerErrMsg                            string

innerErr                                error

}

相关文章

  • NVM V8引擎

    网络部分暂且放一放 还是setup()的下一步 V8 is Google's open source JavaSc...

  • JavaScript V8引擎

    很多人都知道v8引擎,v8引擎是一种js引擎的实现。在开始介绍v8之前,先搞清JavaScript引擎是什么,这里...

  • v8 TurboFan带来的优化

    v8 TurboFan带来的优化 Javascript 引擎 V8 即将采用新的引擎: TurboFan & Ig...

  • Android JS引擎(V8,JSC,Hermes)的使用

    Android端的JS引擎:V8,JSC,Hermes V8和JSC是Android端常见的JS引擎。Hermes...

  • 一.调用栈执行

    1.JavaScript引擎 1.1 V8引擎 1.是什么? 1.一个流行的JavaScript引擎是谷歌的V8引...

  • v8

    - sync-chromium-behind-proxy- V8引擎深入研究目录贴- 初探v8引擎- 新手应该如何...

  • 如何避免内存泄漏 - 2023-02-18

    V8引擎的内存限制 虽然V8引擎帮助我们实现了自动的垃圾回收管理,解放了我们勤劳的双手,但V8引擎中的内存使用也并...

  • Node.js内存管理基础讲解

    Node与V8 基本概念V8是Node的JavaScript执行引擎,V8引擎实际是一个高性能虚拟机。Node在J...

  • 精读《V8 引擎 Lazy Parsing》

    1. 引言 本周精读的文章是 V8 引擎 Lazy Parsing,看看 V8 引擎为了优化性能,做了怎样的尝试吧...

  • Javascript 性能优化02

    一、V8 引擎执行流程 V8 引擎是浏览器渲染引擎里的js执行代码的组成部分 Scanner 是一个扫描器 Pa...

网友评论

      本文标题:NVM V8引擎

      本文链接:https://www.haomeiwen.com/subject/vjbrictx.html