Flutter 1.0在今年的Google Dev大会上发布了,牛逼不牛逼看看淘宝移动版就知道了。可以说Flutter是目前最好的移动端统一开发框架了,似乎有点熟悉的味道,接触过嵌入式开发的程序猿或许听说过QT这个倒霉项目吧。

一开始QT是为了开发KDE桌面环境而开发出来的一套在Linux上面跑的GUI开发框架,QT组件涵盖的范围非常广泛,从文件系统到多媒体系统一应俱全,而且还能使用硬件加速,这就使得KDE的桌面环境效果非常的出色,和GTK一起成为了Linux桌面环境的绝对王者。

QT不仅用来作为KDE的底层开发框架,自身也可以在Linux系统中单独运行起来,这样一来就成为了嵌入式平台上非常流行的GUI开发框架,只要是开发嵌入式图形应用的项目,首先要做的事情就是想办法把QT移植到开发板上去,这样一来QT就从一个开源项目转变成了半开源半商业化的项目了,对于非商业的应用开发QT是完全免费的,而你假如要把QT作为你商业项目的一部分,那么你就要付版权费给QT维护组织。

这样的好日子没过多久,向iOS和Android这样的手机移动设备开始逐渐流行起来了。Android凭借着Google强大的研发实力和完全免费开源的政策,立马吸引了一个大批做嵌入式开发的开发者和公司。他们利用Android作为应用平台在上面开发,而且更吸引开发者的是,在Android平台上开发的话可以使用有大量程序猿在用的JAVA来开发GUI应用程序,而QT与Android相比较就比较悲催了,QT只支持C++或者C来开发,虽然QT已经把C++包装的易于使用了,但是对于JAVA程序猿数量上的绝对优势,QT在Android面前败下阵来了。

与此同时我们坚不可摧的Nokia(诺基亚)也在给自己的塞班系统物色一个新的开发框架,否则面对Android这样开发语言又方便,开发工具又方便的神器,塞班简直不堪一击。因此收购QT就是Nokia当时最好的选择,有了QT这样方便的开发工具,加上Nokia这样财大气粗的财主对抗Android应该是不成问题了。

可是Nokia与QT的整合速度太慢,整合力度也不够,为塞班系统开发一个应用程序依旧十分的麻烦,毕竟熟悉C++的程序员数量还是没有JAVA多。因此QT搞了一个大事情,打造一个QML新的开发语言,融合了HTML、CSS和JavaScript,为什么称它为融合而不是整合呢?那是因为QML把这三种语言全部混合到了QML这一种语言中。你可以在像HTML那样写标签式的写代码,同时也可以标签里面直接写JavaScript·代码或者是CSS代码,然后你又可以在CSS代码里面直接写JavaScript代码,这个QML语言就是一个融合三种WEB技术的怪物。

那么使用QML的好处是什么呢?显而易见,摆脱了C++的引力束缚,QML可以在任意平台上提供统一的开发语言和开发环境了,你只要编写一次,就能够在Android、iOS或者Windows Phone以及传统的嵌入式平台上发布你的软件了。是不是跟Google的Flutter一样,更相似的一点是,QML也是完全从底层构建渲染引擎,不使用一丁点的原生组件,这是不是更像Flutter了呀。而且QML也是基于Widget理念打造的UI框架,最最关键的是QML和Flutter一样文档相当的奇葩,QML中关键的技术点文档是残缺的,而Flutter就更直接了,文档就跟天书一样,如果没有Flutter团队直接给与技术支持的话,恐怕压根就看不懂这个文档是什么了。最后二者都是逆潮流的将视图和逻辑混合在一起了。QML是视图里面混合进了逻辑代码,而Flutter实在逻辑代码中混合了视图。

的确在使用过新版移动淘宝之后感受到了Flutter强大的实力,但是这不是Google重新打造了一套早就存在的QT吗?不过将QML换成了Dart而已。