V8 初次接触(Qt5) - 1+1=2 - 博客频道 - CSDN.NET
2012-05-01 20:53
411 查看
V8 初次接触(Qt5) - 1+1=2 - 博客频道 - CSDN.NET
分类:
Qt
Qt5
2011-09-03 18:41
1881人阅读
评论(4)
收藏
举报
在Qt5中,javascript 和 C++一样,成了Qt中的一等公民;而Qt选中的javascript引擎则是 V8。
看来,有必要简单看看这个东西了。
V8 是Google开发的开源的JavaScript引擎。
V8 采用C++编写,且用于Google Chrome浏览器
据说,比用于IE的JScript,用于Firefox的SpiderMonkey,以及用于Safari的JavaScriptCore速度更快
http://code.google.com/p/v8/wiki/BuildingOnWindows
和大部分开源项目一样,在linux下比较方便(而在Windows下则有些复杂)。
只需要下载源码,然后在源码目录下,执行:
即可得到 libv8.a
这堆代码真难看懂,幸好, 编译倒还简单:
当前的Qt4.7中,Qt 中有两套 JavaScript 引擎
Qt WebKit 中有一个JavaScriptCore副本
Qt Script 中有另一个JavaScriptCore副本
Qt Script 本身被用作Qt Quick的JavaScript引擎
目标是:为Qt WebKit、Qt Script、QML提供一个统一引擎。
https://bugreports.qt.nokia.com/browse/QTBUG-20893
V8 已经从 qtdeclarative 模块内部移出,作为qtbase中的一个独立模块。下一步就是将QJSEngine和QDeclarativeEngine移动到QtCore模块?
没碰过qml,不过可以先看看:如何在Qt5的C++程序中嵌入V8?
main.cpp
hello.pro
恩,直接运行 qmake、make 即可
最早是:Qt Script for Applications (QSA)
从 Qt4.3 开始正式包含一个QtScript模块
Qt4.6时,QtScript采用JavaScriptCore进行了重写。
现在,在评估是否可以用V8作为引擎...
但,从这儿
https://bugreports.qt.nokia.com/browse/QTBUG-12503
可以看出
QtScript 不太可能移植到V8之上了
准备引入一套新的script API接口??
文中说,QtCore的中的QRegExp引擎已经相当老了,而V8提供了性能更好的正则表达式引擎。所以在评估是否要支持JS类型的正则表达式并作为Qt5中默认的语法。
不过按照Thiago Macieira 今天在邮件列表中的说法,这个应该是被否决了。摘录如下:
Lars and I had discussed the idea of using V8's RE engine to replace QRegExp. But after investigating V8, I came to the conclusion that this idea was not acceptable.
The advantage of that would be that the C++ and QML sides of Qt would have access to the same RE syntax. And we wouldn't need two RE engines in memory.
PCRE looks more likely to be the replacement for QRegExp.
也可放置到其他位置,通过环境变量 V8DIR 指定
v8官方采用的构建系统是scons,而在Qt中,使用的是qmake。相关的工程文件在
qtbase/src/v8
不过从工程文件v8.pri可以看出,构建时需要python的参与
还没编译全呢,就这么多了。而且许多东西似乎还要陆续拆分出来...
https://bugreports.qt.nokia.com//browse/QTBUG-12502
http://en.wikipedia.org/wiki/V8_%28JavaScript_engine%29
V8 初次接触(Qt5)
分类:Qt
Qt5
2011-09-03 18:41
1881人阅读
评论(4)
收藏
举报
在Qt5中,javascript 和 C++一样,成了Qt中的一等公民;而Qt选中的javascript引擎则是 V8。
看来,有必要简单看看这个东西了。
V8
V8是什么?
项目主页:http://code.google.com/p/v8/V8 是Google开发的开源的JavaScript引擎。
V8 采用C++编写,且用于Google Chrome浏览器
据说,比用于IE的JScript,用于Firefox的SpiderMonkey,以及用于Safari的JavaScriptCore速度更快
构建V8
http://code.google.com/intl/sv/apis/v8/build.htmlhttp://code.google.com/p/v8/wiki/BuildingOnWindows
和大部分开源项目一样,在linux下比较方便(而在Windows下则有些复杂)。
只需要下载源码,然后在源码目录下,执行:
scons
即可得到 libv8.a
例子
一个在C++中嵌入V8的例子:#include <v8.h> using namespace v8; int main() { HandleScope handle_scope; Persistent<Context> context = Context::New(); Context::Scope context_scope(context); Handle<String> source = String::New("'Hello' + ', World!'"); Handle<Script> script = Script::Compile(source); Handle<Value> result = script->Run(); context.Dispose(); String::AsciiValue ascii(result); printf("%s\n", *ascii); return 0; }
这堆代码真难看懂,幸好, 编译倒还简单:
g++ dbzhang.cpp -I./include libv8.a -lpthread
Qt5
https://bugreports.qt.nokia.com//browse/QTBUG-12502当前的Qt4.7中,Qt 中有两套 JavaScript 引擎
Qt WebKit 中有一个JavaScriptCore副本
Qt Script 中有另一个JavaScriptCore副本
Qt Script 本身被用作Qt Quick的JavaScript引擎
目标是:为Qt WebKit、Qt Script、QML提供一个统一引擎。
V8进入qtbase
https://bugreports.qt.nokia.com/browse/QTBUG-20963https://bugreports.qt.nokia.com/browse/QTBUG-20893
V8 已经从 qtdeclarative 模块内部移出,作为qtbase中的一个独立模块。下一步就是将QJSEngine和QDeclarativeEngine移动到QtCore模块?
没碰过qml,不过可以先看看:如何在Qt5的C++程序中嵌入V8?
main.cpp
#include <QtCore/QCoreApplication> #include <private/v8.h> using namespace v8; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); HandleScope handle_scope; Persistent<Context> context = Context::New(); Context::Scope context_scope(context); Handle<String> source = String::New("'Hello' + ', World!'"); Handle<Script> script = Script::Compile(source); Handle<Value> result = script->Run(); context.Dispose(); String::AsciiValue ascii(result); printf("%s\n", *ascii); return a.exec(); }
hello.pro
QT += v8-private CONFIG += console SOURCES += main.cpp
恩,直接运行 qmake、make 即可
QtScript
QtScript也是几经变化最早是:Qt Script for Applications (QSA)
从 Qt4.3 开始正式包含一个QtScript模块
Qt4.6时,QtScript采用JavaScriptCore进行了重写。
现在,在评估是否可以用V8作为引擎...
但,从这儿
https://bugreports.qt.nokia.com/browse/QTBUG-12503
可以看出
QtScript 不太可能移植到V8之上了
准备引入一套新的script API接口??
QRegExp
https://bugreports.qt.nokia.com/browse/QTBUG-20888文中说,QtCore的中的QRegExp引擎已经相当老了,而V8提供了性能更好的正则表达式引擎。所以在评估是否要支持JS类型的正则表达式并作为Qt5中默认的语法。
不过按照Thiago Macieira 今天在邮件列表中的说法,这个应该是被否决了。摘录如下:
Lars and I had discussed the idea of using V8's RE engine to replace QRegExp. But after investigating V8, I came to the conclusion that this idea was not acceptable.
The advantage of that would be that the C++ and QML sides of Qt would have access to the same RE syntax. And we wouldn't need two RE engines in memory.
PCRE looks more likely to be the replacement for QRegExp.
v8源码
源码默认放置在 qtbase/src/3rdparty/v8/也可放置到其他位置,通过环境变量 V8DIR 指定
v8官方采用的构建系统是scons,而在Qt中,使用的是qmake。相关的工程文件在
qtbase/src/v8
不过从工程文件v8.pri可以看出,构建时需要python的参与
v8_js2c.commands = python $V8DIR/tools/js2c.py $V8_GENERATED_SOURCES_DIR/libraries.cpp $V8_GENERATED_SOURCES_DIR/libraries-empty.cpp CORE v8_js2c.commands += $V8SRC/macros.py ${QMAKE_FILE_IN} v8_js2c.output = $V8_GENERATED_SOURCES_DIR/libraries.cpp v8_js2c.input = V8_LIBRARY_FILES v8_js2c.variable_out = SOURCES v8_js2c.dependency_type = TYPE_C v8_js2c.depends = $V8DIR/tools/js2c.py $V8SRC/macros.py v8_js2c.CONFIG += combine v8_js2c.name = generating[v8] ${QMAKE_FILE_IN} silent:v8_js2c.commands = @echo generating[v8] ${QMAKE_FILE_IN} && $v8_js2c.commands QMAKE_EXTRA_COMPILERS += v8_js2c
一点牢骚
最后,抱怨一下,目前Qt5的东西真乱,都看不懂libQtAddOnGallery.so.5.0.0 libQtPublishSubscribe.so.5.0.0 libQtCLucene.so.5.0.0 libQtQuick1.so.5.0.0 libQtCore.so.5.0.0 libQtQuickTest.so.5.0.0 libQtDBus.so.5.0.0 libQtScript.so.5.0.0 libQtDeclarative.so.5.0.0 libQtScriptTools.so.5.0.0 libQtDesignerComponents.so.5.0.0 libQtSensors.so.5.0.0 libQtDesigner.so.5.0.0 libQtServiceFramework.so.5.0.0 libQtFeedback.so.5.0.0 libQtSql.so.5.0.0 libQtGui.so.5.0.0 libQtSvg.so.5.0.0 libQtHelp.so.5.0.0 libQtSystemInfo.so.5.0.0 libQtLocation.so.5.0.0 libQtTest.so.5.0.0 libQtMultimediaKit.so.5.0.0 libQtV8.so.5.0.0 libQtMultimediaKitWidgets.so.5.0.0 libQtXmlPatterns.so.5.0.0 libQtNetwork.so.5.0.0 libQtXml.so.5.0.0 libQtOpenGL.so.5.0.0
还没编译全呢,就这么多了。而且许多东西似乎还要陆续拆分出来...
参考
http://code.google.com/intl/sv/apis/v8/intro.htmlhttps://bugreports.qt.nokia.com//browse/QTBUG-12502
http://en.wikipedia.org/wiki/V8_%28JavaScript_engine%29
相关文章推荐
- QTextCodec中的setCodecForTr等终于消失了 (Qt5) - 1+1=2 - 博客频道 - CSDN.NET
- boost bind使用指南 - Make Progress Everyday! - 博客频道 - CSDN.NET
- 使用Boost.PropertyTree处理XML、JSON和INI数据 - 做一个优雅的程序员 - 博客频道 - CSDN.NET
- 用msvc2012编译QT 5.0.0-RC1 - BlueEngine的专栏 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- std::map, std::multimap, std::tr1::unordered_map 区别 - 笔记本 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- linux修改主机名的方法 - 冰刀(skate) - 博客频道 - CSDN.NET
- SVN版本冲突解决详解 - snwrking的专栏 - 博客频道 - CSDN.NET
- BOM–字节序标记 - 永不放弃的地盘 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- 小心 Spring MVC 使用陷阱 - MONKEYK - 博客频道 - CSDN.NET
- OpenMP编程指南 - 周伟明的多核、测试专栏 - 博客频道 - CSDN.NET
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
- HTML文本解析器C模块 for LUA - Liigo's blog - 博客频道 - CSDN.NET
- 编辑文章 - 博客频道 - CSDN.NET
- 分别用数组和链表实现堆栈(C语言版) - ahljjun的专栏 - 博客频道 - CSDN.NET
- Linux下关闭Shell提示音 - 漫步小者 - 博客频道 - CSDN.NET