1+1=10

扬长避短 vs 取长补短

Qt中JavaScript与QML小记

狂补三周的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被移除

悬念:

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? 也提到这一点

image-20240129225855616

尽管已经到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

Comments