狂补三周的JavaScript知识,在QML这条线上,似乎可以把记忆串起来一部分了。
时间线:
- 2007年5月,Qt4.3 发布,正式引入 QtScript模块
- 2008年5月,Qt4.4 发布,正式引入 QtWebkit模块
- 2008年6月,Nokia完成对Qt公司(TrollTech)的收购
- 2009年3月,Qt4.5 发布,该版本QtWebkit中的JavaScript引擎开始支持JIT。Qt4.5起Qt增加了LGPL授权。
- 2009年12月,Qt4.6 发布,QtScript 使用 JavaScriptCore 进行重写。老的QtScript以QtScriptClassic的名字放入到Qt Solution中。
- 2010年9月,Qt4.7发布,正式引入QtDeclarative模块,引入 QML和QtQuick 以便于支持塞班和Meego系统中软件开发
- 2011年3月,Nokia出售Qt的商业授权部分给Digia。神奇的操作...
- 2012年8月,Nokia出售Qt给Digia公司,Nokia放弃Meego转向微软WP。Qt开发降温
- 2012年12月,Qt5.0仓惶发布,引入全新的QtQml和QtQuick模块,全新的QJSEngine使用Google V8引擎。
- 2013年12月,Qt5.2发布,QJSEngine不再使用V8引擎,改用Qt开发的QV4引擎。
- 2014年9月, Digia成立了 The Qt Company 公司,负责Qt的开发。
- 2015年7月,Qt5.5发布,和JavaScript相关的 QtWebKit、QtDeclarative (QtQuick 1)、QtScript 都标记为废弃
- 2015年12月,Qt5.6发布,引入了基于Google Chromium 的 QtWebEngine,删除了 QtWebKit, QtDeclarative (Qt Quick 1)
- 2018年12月,Qt5.12发布,QJSEngine 开始支持 ES7,并增加 importModule()。
- 2019年12月,Qt5.14发布,QJSEngine 开始支持类似于TypeScript的类型注解
- 2020年12月,Qt6.0发布,QtScript被移除
悬念:
- 2019年9月 Technical vision for Qt 6 提到
Make JavaScript an optional feature of QML. Having a full JavaScript engine when using QML can complicate things and is an overhead especially when targeting low-end hardware such as microcontrollers. It is however extremely useful in many use cases.
- KDAB 2020年的Qt Desktop Days Keynote - Qt 6 for the desktop - What can we expect? 也提到这一点
尽管已经到Qt 6.7了,这个改动还没发生,但JavaScript在QML中的地位,以后怎么变动,有些让人不安。
另外,JavaScript从2015年开始,每年1个新版本发布,Qt的内部的QV4引擎是否跟进,也是个问题。
Qt中qml相关的工具项目:
- qbs:2010~2018,已经废弃了
- qtifw:只使用QJSEngine
疑惑:
从2009年Qt4.5增加LGPL授权,开始学习和使用Qt,到现在已经15年;2010年QML发布,距今已经14年,但是一直对QML无感。又说不上什么原因:
- 因为不喜欢JavaScript?
- 因为JavaScript引擎改来改去?
- 因为QtQuick底层使用OpenGL,变来变去?
- 还是因为QtQuick 相关模块一直在变,且对Desktop支持不好?
反正每次刚有点兴趣,起个头,就放下了...
参考
- https://www.qt.io/blog/2009/03/04/lightning-fast-javascript
- https://www.qt.io/blog/compiling-qml-to-c-annotating-javascript-functions
- https://www.qt.io/blog/2009/06/16/using-javascriptcore-as-the-qtscript-back-end
- https://www.qt.io/blog/the-new-qt-quick-compiler-is-coming-in-qt
- https://www.qt.io/blog/2009/11/23/qtscript-in-46
- https://www.qt.io/blog/the-new-qt-quick-compiler-is-coming-in-qt
- QTBUG-47735 ECMAScript 7 Support
- https://en.wikipedia.org/wiki/QML
- https://en.wikipedia.org/wiki/Qt_(software)
- https://youtu.be/QTNTrTAwChE?t=2343