zoukankan      html  css  js  c++  java
  • chromium V8 Embbeding

    chromium源码阅读--V8 Embbeding

     

    V8是google提供高性能JavaScript解释器,嵌入在chromium里执行JavaScript代码。

    V8本身是C++实现的,所有嵌入本身毫无压力,一起编译即可,不过作为一个动态语言解释器,它的世界观肯定跟C++还是有区别的。

    编程语言定义了计算机对现实世界的表达方式,不同的语言有不同的认识,在JavaScript里,类,对象,方法的表达与C++只在概念上保持一致,在表达和实现上是有很大不同的。

    那么要将C++类或对象绑定到V8里,就需要做一些对应的转换,才能使得V8认识C++定义的东西。V8提供函数模板(class FunctionTemplate)和对象模板(class ObjectTemplate)用来创建JS的函数与对象,

    对JS有一定了解的同学,应该知道JS没有class关键字,只有function关键字,JS的类也是通过function定义的构造函数来完成的,而对于类的方法声明也是通过prototype来添加的,并且这一切都是可以动态添加(这感觉太酸爽~)哦。

    嗯,通过C++来给V8解释器添加新的类,对象,函数等等,这个本身不动态,但是如果嵌入V8引擎,那个通过js脚本,可以配合已有的C++代码就可以很方便的完成类似插件的功能,在线热更新功能等等,这个跟做游戏的嵌入lua脚本,Python脚本也是类似的。

    1、  V8的嵌入

    这个只需要参考HelloWorld例子即可,代码在v8/samples目录下。

    2、  函数模板与对象模板

    FunctionTemplate和ObjectTemplate都继承Template,并且最上层父基类是Data类,而Data类是v8里所有值(class Value)和模板(class Template)的父类,是一个superclass.

    FuntionTemplate,ObjectTemplate与Object的关系是:

    如上图,通过对应的函数接口生成Object对象,该对象就是v8解释器里实际操作的对象。

    为了避免繁杂的文字描述,以下举一些实际的code来说明如何来实际使用:

    以下代码都是同步最新的chromium v8版,网上很多实例都是已经过时不能参考了。

    (1)JS对象的创建:

    (2)JS类的创建:

  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/bigben0123/p/13213300.html
Copyright © 2011-2022 走看看