编程语言漫游

前几天突发奇想,想做个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进行处理,非常感谢!

上一篇 2020年2月3日
下一篇 2020年2月3日

相关推荐