前几天突发奇想,想做个App,主要是想感受一下互联 行业火热的技术氛围。
在移动互联 时代,技术更迭如火如涂,你方唱罢我登场,不亦乐乎,有很多我自认为有趣的现象。
比如Java,以前还诟病于它的虚拟机,性能太弱,现在是互联 技术的中流砥柱,一是硬件速度跟上了,二是JVM虚拟机的性能也越来越好了。而且竟然出现了以JVM为生态的其他语言,如Scala,一种多范式语言,可以优雅地进行函数式编程,又如Kotlin,更优雅的Java,大有取代Java之势,已经成为Android平台的官方语言了。
要做App,那就先学习了一下Swift吧!Swift语言本来没有引起我的注意,这几年我的注意力在Golang,因为Golang在国内很火,有很多的文章介绍它有趣的特性,比如有垃圾回收、协程,语言简单优雅,编译速度快。而Swift似乎没有听到有什么值得注意的特性。
但学习了Swift后发现,其实它啥也不缺, 有垃圾回收,有异步编程,也能函数式编程。按Apple的调性,优雅是自然的了。
对于像我对函数式有魔症的人,自然是要研究一下其函数式编程能力,于是又看了《Swift函数式编程》,什么函子、单子的,全然看不懂。
我忽然想到,既然对函数式这么执着,为啥不直接学习一门纯函数式的语言呢?于是又“漫游”到了Haskell。
函数式的语言其实前几年也接触过,先是Lisp,后又学习了Scheme,还做了一个小项目。Lisp系语言我其实不太喜欢,毕竟括 太多了。
Haskell 称是纯函数式言语,具有“证明即程序、结论公式即程序类型”的特征。其实之前我也有学习过Haskell,还看了一本全英文的教程,现在已经没什么印象了,估计是没有看懂,也可能是当时看懂了,没有实践,又忘记了。
函数式编程语言出现于上世纪七十年代,现在随着计算机性能的提升、多核的发展、软件规模的扩大、软件复杂度的剧增,函数式语言再度兴起,为解决这些问题提供了优美独特的框架。连Java和C++这种老牌的语言,也都加入了很多函数式的特性,如匿名函数、闭包、柯里化等。用别的语言去学习函数式特性,就好像雾里看花,隔靴搔痒,又好像是在大街上捡到一个贝壳。如果直接学习纯函数式语言,哇,就好像一下子掉到了一个沙滩上,到处是贝壳,而不是在门外窥探而不得其法。于是你就会真正理解惰性求值、柯里化、函子、单子,以及为什么需要这些特性。
在Haskell漫游了一番,再回到Swift,发现了SwiftUI这个新发布的SDK。用官方的话说,SwiftUI是一种创新、简洁的编程方式,通过Swift的强大功能,在所有Apple平台上构建用户界面。惊喜于它的一些特性,比如用Swift本身去设计UI,而不是用其他的方法,比如XML等,这也没有什么,Qt不也可以吗?更有趣的是,它是热加载、热更新的,即你可以边该代码,同时看到修改的效果。
想想吧,Swfit语言,有垃圾回收,有异步编程,有类型推导,有可以热更新的UI,对于我们用C/C++编程的人,是多大的诱惑?
好吧,这是Apple的生态,于我何干?
其实Swift是开源的,也有Linux版,但SwiftUI是否支持Linux就不知道了。
既然看了这么多,索性再了解一下Flutter。这一两年也经常听到Flutter这个词,但觉得这可能是互联 和App的技术,自己也用不上。但了解以后发现,Flutter远不至于此。Flutter是基于Dart的UI框架,试图覆盖全平台,包括macOS、iOS、Android、Linux、Fuchsia,对,就是Fuchsia,由Google公司开发的继Android和Chrome OS之后的第三个系统,Flutter是构建未来的Google Fuchsia应用的主要方式。
Flutter基于Dart,而Dart作为现代编程语言,也拥有现代语言的特质,垃圾回收、异步编程、类型推导等,并且Dart支持JIT和AOT,性能于C++相比也不差。有Google的支持,Dart和Flutter前途一片光明。
更重要的是,Flutter也采用了与SwiftUI相同的技术:热更新、热加载。Flutter的热重载可以让你快捷方便的试验、重构UI、添加特性和修复bug。在仿真器、模拟器和ios、android硬件上体验亚秒级的重载,而不会丢失状态。最简单的体验是,你可以一边写代码,一边看到界面的变化,这对于传统的UI编程,几乎是革命性的。
我们现在使用C++/Qt编程,写完代码,要先编译,才能看到你的设计结果,而C++编译也是贼慢,在编译这段时间,你可能去喝杯咖啡,或者看会儿手机。所以,用C++/Qt,设计工作会不断地被迫中断,本来半小时的工作,你可能两个小时才完成。
再想想SwiftUI和Flutter,没有内存的顾虑,亚秒级编译,编码如丝绸般顺滑,多么美妙啊!
有一段时间,大家说想用Python,但Python是动态语言,素有“动态一时爽,维护愁断肠”的说法。动态语言在大型软件的维护上,诟病已久。
而现代的编程语言多是静态类型语言,Golang、Dart、Swift、Scala、Kotlin均是如此,强制的类型检查,可以将很多错误消灭在编译期,而不是运行时。同时,现代编程语言中又引入了强大的类型推断机制,为静态语言带来了如动态语言般的简洁。就连C++也引入了auto关键字,用于类型推断,简化书写。
前些年,Qt的QML出来的时候,也想着学习一下,但始终没有真正学起来,因为QML很复杂,首先要学习一门新的声明式语言QML,还要学习JavaScript,C++也是必须精通的了,三种语言揉合在一起,还有它们之间的交互,想想都复杂。
而SwiftUI和Flutter没有这样的问题,SwiftUI只使用Swift,业务和UI均用Swift,而Flutter只使用Dart,业务和UI都可以使用Dart,所以会简化很多事情。Swift语言和Dart语言为了更好地设计UI也做了许多适应性改造,让UI设计更加优雅,毕竟Swift和SwiftUI都是Apple的,Dart和Flutter都是Google的,可以无间的合作,创造出革命性的产品。
SwiftUI和Flutter,遥相呼应,异曲同工,可能代表了UI技术发展的方向,未来可期!也会给其他编程语言带来借鉴和冲击,也期待着可以在像我们这样的传统行业中引起些许波澜。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!