返回 登录
0

编程语言的2015

如果我们在2015发明一种语言的话,那么它该长成什么样子呢?要面向对象么?要有类型推导系统么?要有列表生成式(listcomprehension)么?要有内置的模式匹配么?要有多值返回么?选用actor模型还是软件事务内存(STM)?要不要有内置的分布式透明性以及容错机制?应该有垃圾回收么?要支持惰性求值(lazyevaluation)么?可能我们心中还是有无数的工程设计上的考虑,但有一点貌似不用怀疑,那就是它几乎肯定是开源的。

开源

说道编程语言和开源,我们不禁回想起那个旧时代,几乎所有的好的编译器都把持在商业公司手里。曾几何时,我们无论如何也不会相信有一天Borland,Microsoft,Intel,Sun会把自己的看家宝拿出来开源。但世事难料,有的公司不再了,有的公司再也把持不住了,终于全面拥抱了开源。

第一个要说的就是微软了。在2015年,微软可以说是态度最为端正的社区参与者了,不但继续加大.Net开源的力度,而且还派Anders大神到处游说。不过话又说回来了,微软醒悟的早,但是动作一直太慢,所以.Net特别缺乏有效联盟伙伴,只能看着Java平台的JBoss,Spring,Apache三家斗地主,独自一人生闷气。微软可是Apache的大金主啊,钱没少出,吃也没吃,喝也没喝,自然是不开心的。

要是从语言特性上来说.NET的当家花旦C#实际上依然是相对于Java先进很多,可能主要是底子好吧。Java那个不争气的泛型和C#没法比啊,也才刚刚有Lambda这种非常基本的支持。更不要说微软还有F#这种大杀器,语言特性层面完全和Scala有的一拼的,只是生不逢时,还没有绽放可能就凋谢了。说到这,就得多说两句了,ML系的语言,或者收到ML影响的语言,比如Ocaml,Haskell,Scala,F#等在过去的一年里被大家谈论的越来越多了。说白了,类型可能还是对真实世界的较为合理的抽象,而且严格的类型系统对系统设计师提出很多有意思的挑战,但却能极大程度上在编译器期就能发现系统的很多Bug。所以在比较复杂的大型系统中,大家越来越愿意使用这些语言。

不过要指出的是,我国的计算机教育在这一块差的很远,绝大多数国内的计算机专业并不会教授StandardML或者Haskell这种非常适合教学的函数式语言,真的是非常的遗憾。既然这里说的是微软,那就再推荐读者去看看微软有个《第九频道》的教学网站,里面有很多函数式编程的内容。微软已经彻底开放了,不但有编译平台,Core,周边的Framework也都毫无保留,不过想一想在.Net领域的前十个重量级的开源项目都是微软的,也是一种悲伤。

当然微软还远远不止这些,年底的时候又开源了自己的JavaScript引擎ChakraCore,这是一种什么样的精神,当然是与Google死磕的精神。凭借微软在编程语言方面的积累,这次放出的大招着实让人惊叹。

第二个要说的就是苹果开源了Swift。很多人都说苹果这个公司很封闭,这次闹出这么大事儿有点出乎意料。我倒是觉得很正常,苹果之前一直开放了WebKit,包括Chrome在内都受益了很长一段时间。苹果拉拢Intel搞编译器平台LLVM这个也是尽人皆知,所以今天能开放出来Swift并不让人感到十分意外。编程语言年年有,但往往死的都很惨。苹果这是要拼了老命也要在编程语言上占有一席之地啊。Object-C已经太老了,Swift本来就是接班的,这次苹果的动作不算大,但也足可以看出来,顶级IT公司还是很在意自己的颜值的。Oracle有Java,Google有Go,微软有.Net,苹果也得做一个体面的玩家啊。可能之前大家都是觉得Swift就是用来开发苹果上面的应用的,可是仔细看看官网就会发现,Swift的野心可要大得太多,原本人家就是要干掉C/C++/Objective-C的,所以这个和Go的定位有什么不同呢?其实很多技术的流行,最后都要有强大的资金支持,苹果这个大金主,这么开放地去做Swift绝对会很大程度上提升Swift的影响力。这其中的关键点可能就在于构建一个生命力旺盛的生态,吸引各种玩家进来,帮助这些玩家实现利益最大化。Swift下一步可能还要做的就是标准化,这可能是成熟语言的一个标志,也是开放生态的又一个里程碑。

性能

使用各种语言的人最愿意拿性能说事儿,也最愿意拿性能作为武器攻击其他语言。的确,性能是计算机领域永远追求目标,所以我们也看看2015年,哪些语言放了性能大招。

首先要说的肯定是PHP7的发布了。PHP在编程语言的学术讨论当中很没有地位,但这并不妨碍大众对其的喜爱。要知道,如果按照网站数量来计算,整个互联网很大程度上是用PHP写的。当我们看过PHP7所做优化的介绍以后,不禁会问一个问题,为什么这些优化是在2015年做的,而不是十年前。

其实本质上来说,最近发布新版本并没有什么是经典教科书上没有的东西。从改进上来说我们也看到一种趋势,类似于JVM那样的中间平台是必要的,以便进行各个层面的优化。JIT必须有,其他没有JIT的解释型语言要努力加把劲了,PHP的VM应该说还处于一个非常早期的阶段,但由于大量的真实应用会促使它很快速的更新和改进。至少PHP7对我来说不仅仅是性能上的一次卓越的提升,更是让PHP的底层走到一个更为光明宽广的道路上。整个这次大版本的更新也证明了一个事情:科学技术就是第一生产力,看书学习是有用处的。

Go也是发布了一个大版本1.5。去不去掉里面的C代码我并不是太关心,相信对很多用户来讲也不是那么重要的。完完全全重新设计垃圾收集才是对语言使用者最应该关注的事情。

Go一直为大家所津津乐道的好处之一就是性能,现在看来性能上的改进也依然是一个长期的任务。只要涉及到垃圾收集,这个优化看来就是一条漫漫的不归路。Java今年是20年了,在垃圾收集这条道路上依然没有停止脚步,Go要走路会更长。当然总会有想抄近路的坏小子,比如Rust,不要垃圾收集了,而且还是内存安全的,貌似一个不可能的任务。Rust的背后是Mozilla,明显财力上不如谷歌,但貌似野心不小,不知道什么时候能看见用Rust写的明星级别的系统软件,比如Docker这样的。那将是对这门语言的极大促进,也就不需要用各种Benchmark说事儿了。严格的类型系统的确是语言学习者的巨大障碍。但趋势不可阻挡,Rust和Swift很多地方相互借鉴,这种严格的类型是未来的一部分。

JavaScript平台觉得JavaScript仅仅是门编程语言的同学可能要重新看看JavaScript最近的发展了。随着JavaScript引擎的各方面不断提升,JavaScript已经成为一个非常繁荣的平台,有点点JVM或者.Net平台的味道了。不是有人说,能用JavaScript实现的东西,最后都会用JavaScript实现么。有没有那么神奇不知道,但是在这个平台上,新的语言层出不穷,比JVM得新语言貌似发展的还要好。

传统意义上对JavaScript进行轻微改良的CoffeeScript就不说了,我们来看看这一年大家讨论比较多的几个新热点:TypeScript,ClojureScript,Elm。TypeScript是Anders大神最近倾力打造的,最近获得社区很多好评。其中包括Angular团队宣布与TypeScript合作,事实上他们的确也这么干了。看来世界的确需要类,大型系统也的确需要更加有力的抽象。如果说TypeScript还算一个比较成功的对JavaScript的改良的话,ClojureScript做的就只是一个编译工具了,只不过这个编译工具能让Clojure能执行在JavaScript平台上。不知道其他语言怎么想,至少在Clojure官网有ClojureScript属于正统的链接。虽说看上去意义不是那么大,但实际的效果就是一个React的ClojureScript绑定叫om,在Github竟然有4800多颗星。

真是但凡和JavaScript有关系的项目都会意外的火啊!最后这个Elm就是完全Haskell版本的JavaScript,没错,有类型推导!Reactive虽说是这一年特别流行的词汇,但是为了Reactive能做一门语言来彻底贯彻这一理念实属是大彻大悟。

前端引发的各种技术革命已经将战火烧到了编程语言层面。JavaScript作为一个平台,提供了很多和JVM类似的特性,比如JIT,垃圾收集,使得在此之上的编程语言会越来越丰富。还有微软,苹果,谷歌,Mozilla都是对此不遗余力地投入,标准制定和更迭都非常规范,社区的繁荣,庞大的用户基数,这些都是我们继续看好这个平台的原因。

结语

设计语言特性和设计语言运行时平台越来越分离,设计语言变得越来越容易,但做运行时平台真实难上加难。新锐的语言都更多地迈向了函数式语言的领地。我们都需要学习新语言,每种语言都给我们带来了不同的思考方式和看待世界的方式。每个真正的程序员都应该设计自己的编译器或者解释器,不知道这个是否在你的2016年计划里?

作者简介:

程显峰,独立顾问,之前任OneAPM公司首席运营官,积木盒子技术VP,擅长软件研发团队的管理。作为知名技术顾问,曾服务于花旗银行、蓝色光标、国家电网等多家大型集团。致力于推动开源软件在国内的发展,是MongoDB和Docker技术在国内早期的推动者,并翻译有《MongoDB权威指南》和《深入学习MongoDB》等书籍。喜欢研究各种编程语言。 新浪微博:@程显峰-Mars

本文为《程序员》原创文章,未经允许不得转载,订阅2016年《程序员》请点击 http://dingyue.programmer.com.cn

(责编/夏梦竹,需求报道或投稿请联系xiamz@csdn.net)

评论