我们真的还需要那么多新型编程语言吗?当前开发人员们所拥有的选择无疑已经相当丰富。命令型语言、函数型语言、面向对象型语言、动态语言、编译语言解释型语言以及脚本语言等等似乎已经完全罩得住我们可能面对的一切任务,而且时至今日也几乎没有哪位专业人士能够通晓上述全部语言。
然而,新型语言仍然在以惊人的速度不断涌现。有些是学生或者爱好者以个人项目的形式所设计,另一些则是来自大型IT供应商的产品。甚至连中小型企业也不甘势弱,积极针对其所在行业的需要开发出服务用语言。为什么人们如此热衷于这种重复性劳动呢?
答案其实很简单,尽管目前大家手头的语言在功能性与通用性方面已经相当强大,但仍然没有哪种单独的语法规则能够最大程度迎合任何一种实际需求。更重要的是,编程行为自身也处于不断的发展变化当中。多核CPU的崛起、云计算的升温、高流动性与分布式体系结构,这一切的一切都向开发人员提出了新的技术性挑战。要为现有语言——尤其是当下流行的语言——添加最新功能、范例以及模式可以说比登天还难。有时候直接搞一套新语言往往是最佳解决方案。
那么在这里,我将带大家一同纵览十种位居业界前沿的编程语言;其中每种方案都从全新的视角诠释了软件开发工作的艺术性,并以各自不同的特色解决了某些具体问题或是弥补了当下某款主流语言的独有缺憾。它们中有些是已经颇为成熟的项目,而有些则尚处于自身发展的初级阶段。有些可能对于大家来说还相当陌生且显得晦涩但懂,但毋庸置疑的是,它们很可能在未来给开发业界带来颠覆性的突破,并彻底改变今年数年的编程工具发展趋势——至少在新一代语言面世前,它们就是未来的生力军。
实验性编程语言第一位: Dart
JavaScript在为网络页面添加基本交互功能方面表现拔群,但当网页应用程序的体积达到数千行代码时,该语言的局限性就将暴露无遗。谷歌正是基于这种缺憾而推出了Dart,而这种语言也承载了谷歌为网页编程带来全新标准的雄心壮志。
与JavaScript相似,Dart采用了与C语言相似的语法及关键字。然而Dart与JavaScript最为显著的区别在于,前者中的对象明确指向类及接口,这与C++及Java颇有异曲同工之妙。Dart还允许程序员们利用静态式有选择地声明变量。追溯设计者的思路,他们应该是希望Dart与JavaScript一样更易于学习、保有动态特色以及流畅的执行效果,这样一来开发人员就能够在编写代码方面投入较少的时间,产品维护也将更为便捷,同时细小的错误带来的影响也将被降至最低程度。
目前我们还不能用Dart解决太多实际问题。其设计理念是希望该语言能够同时运行于客户机与服务器之上(与Node.js差不多),但现在惟一能够让Dart代码在客户端上运行的办法是将其通过编译转换为JavaScript。甚至它还不能正确作用于每一款浏览器。不过由于Dart以BSD类开源许可方式进行发布,因此任何购买了谷歌版本的厂商都可以随意将其构建于自己的产品当中。谷歌要做的只是说服业界接受这个编程领域的新生儿即可。
实验性编程语言第二位: Ceylon
Gavin King并不承认Ceylon这款他在红帽公司中创造出来的语言肩负着“Java终结者”的历史使命。在King的从业经历中,最为耀眼的一页正是他作为Hibernate——Java对象关系映射框架的创建者所赢得的赞誉。他喜欢Java,但他仍然认为Java还有很多提升空间。
King对于Java的抱怨主要集中在冗长的语法结构,这种语言缺乏一级与高端功能,而且对元编程的支持也相当薄弱。而更令他感到沮丧的是,Java中对于结构化数据定义的声明性语法极为欠缺,用他的话来说这使得Java“与XML根本无法分割。”Ceylon的目标就是解决上述疑难杂症。
King与他的团队并不打算完全从零做起。Ceylon虚拟机就不会出现,此类功能将通过Ceylon编译器将内容转换为Java字节代码,进而运行于JVM当中。不过Ceylon绝不会止步于一款编译器这么简单。该项目的一大雄心是打造一套全新的Ceylon SDK体系来取代Java SDK,引用King对于后者的评价——结构臃肿、笨拙,且从来没有得到“适当的、与时俱进的调整。”
这是一项艰巨的任务,因为红帽公司到目前为止还没有发布过任何一款Ceylon工具。King表示自己期待着能在年内看到一款编译器出现,但不会指望短时间内会有“百分之百由Ceylon编写”的软件问世。
实验性编程语言第三位: Go
解释程序、虚拟机以及托管代码如今正风靡一时。我们真的需要另一款用于将目标内容编译为本地二进制文件的老式语言吗?来自谷歌工程师团队的小组——由Robert Griesemer以及贝尔实验室的传奇式人物Ken Thompson与Rob Pike共同执掌——给出的答案是肯定的。
Go是一种通用型编程语言,且适用于从应用程序开发到系统编程等各种工作需求。从这种意义上来说,它更接近于C语言或C++,而不是Java或是C#。但与后两者一样,Go中也包含着各类现代化功能,包括垃圾收集、运行时间映象以及对并行性的支持。
同样重要的是,Go在设计上有意降低了编程难度。其基础语法与C语言非常相近,但却消除了多余的语法及样板文件,同时简化了对象定义等常用功能的操作。Go项目小组的目标是打造出了一款像动态脚本语言那样拥有亲切代码的语言,并且能够像编译语言那样提供强大的功能性。
Go尚处于创建过程之中,而且其语言规范也仍可能发生变动。也就是说,我们目前已经可以开始尝试使用了。谷歌已经为其打造了对应的可用工具与编译器,说明文档之类也相当丰富;举例来说,Effective Go教程就是大家了解Go与其它早期语言不同之处的上佳起点。
实验性编程语言第四位: F#
函数型程序设计在计算机科学家以及学术界一直都相当流行,但像Lisp以及Haskell这样的纯函数型语言通常被人们认为无法作用于实际应用中的软件开发工作。对于函数型代码,大家抱怨最多的是它们很难与由C++及Java等命令型语言所写成的代码与库相整合。
说起F#(发音为“F=sharp”),这款微软推出的语言在设计上可谓兼顾了功能性与实用性。由于F#在.Net公共语言运行(简称CLR)中属于一级语言,因此能够访问其它CLR语言的所有同类库及功能,包括C#及Visual Basic等。
F#代码与OCaml多少有些类似,但它同时拥有不少相当有趣的特色语法。例如,F#中的数字型数据可以通过分配获得计量单位,进而为科学类计算服务。F#还为异步式I/O、CPU并行处理以及GPU负载分担等功能提供了必要的理论支持。
在度过了微软研究中心中漫长的酝酿期后,F#现在终于同Visual Studio 2010一同面世了。更妙的是,微软这一次不按常理出牌,将F#编译器与代码库通过Apache开源许可呈现在我们面前;大家不仅能够免费使用这款语言,更可以将其引入Mac及Linux系统(通过Mono运行工具)。