本文作者 Tim Bray 是一位加拿大软件工程师,也是 Open Text 公司和 Antarctica Systems 的联合创始人,也是 XML 规范的主要作者之一(有“XML之父”之称)。在2004年至2010年期间,Bray 担任 Sun 公司 Web 技术主管。此后加入 Google 担任开发者大使(Developer Advocate),专注 Android 和 Identity。他在这篇文章中分享他对部分软件技术发展的一些看法。 Tim Bray 我们正处在构建软件的关键期。工具完善,服务端的开发者们很高兴,但说到客户端软件时,我们真不知去向何方。 前段欢乐时光。构建起的服务端代码技艺精湛,感谢你们。技术的扩展与提炼将继续持续下去。 一切都地能够与HTTP通信,而做到这点是很简单的。 一切都由MVC及类似的抽象层构建,并且有许多框架帮我们清晰稳健地完成这项工作。很多人还在使用PHP或者Spring构建重要的应用不得不说是件遗憾的事情,虽然说这些新框架也没有强迫你使用它们。 我们仍在为选择动态类型和静态类型苦恼中。最后,妥协的理由却很好理解:两种语言之间都有好与坏。我两种都会使用,并且某些时候,使用的理由是显而易见的。请参见Bánffy-Bray 准则。 并发函数式编程渐渐在主流语言界享有一席之地。而原因在于关注性能就一定会涉及并发的问题。而一般情况下,人无法处理大量(或者根本不能处理)并发的,极易改变的共享事务。 许多人喜爱Erlang,虽然它能很优雅地处理并发,甚至提供备用方案,但是它并不能大规模地用在生产中,因为它的数据类型和类概念与其他语言不同。 Clojure的并发基础是函数式的,高效且优雅。而Lisp式的语法则是缺陷(从经验上来说,如果你不能像我一样理解Lisp的妙不可言时),而Scala虽然比Java简单,并且有像模像样的Actor模型,仍然十分繁杂。 NodeJS本身不是函数式的,如果处理的一切都是事件,并且可以单线程的话,谁会在乎呢?但是我仍然在对Node的JS部分十分不满,待会儿再说明。 Go给我的印象深刻,虽然它采用了C、Java、Ruby、Clojure等语言的做法并不能使我开心一笑。我感觉它的类型系统提供了许多针对对象的实用工具,我强烈感到Goroutines和类型管道是非常出色的设计,开发者可以够顺利地写出函数式代码。这种做法容易,直接又可读性好,我考虑下一个重大项目的服务端代码使用Go语言编写。 如果上面的这些都不符合要求,我们还考虑使用这些由高手打造的Rust、Elixir、Dart等语言。 |