年度编程语言锁定Objective-C

TIOBE编程语言排行榜每年初都将统计评出上年度的最佳编程语言大奖,获奖的编程语言被认为在该年度市场份额增长及用户认可度方面获得了最为突出的成绩。历年获奖的编程语言包括2004年的PHP、2005年的Java、2006年的Ruby、2008年的C至2009年的Go语言,这些编程语言都曾拿到年度最佳的殊荣。成为系统脚本事实标准的Python语言,因其简单易用并能成功运用在Web开发等各种不同类型的应用中,而与2010年和2007年两次获得年度编程语言奖项。

2011年已过去一半,从目前市场占有趋势来看,Objective-C已经脱颖而出,相对2010年的市场占有率增长了2.68%,毋庸置疑,Objective-C将成为年度编程语言奖项的得主。其实在2010年,在iOS平台应用快速增长的推动下,Objective-C已成为上年度使用率上升最快(增速超过100%)的语言,但从绝对数量来看,Python以拥有最大的市场份额增长率而胜出。

Objective-C设计的初衷是为在C语言基础上添加面向对象拓展,目前Objective-C已发展成为苹果各系统平台上应用开发的事实标准。Objective-C包含一个用C编写的小巧的运行库,提供给开发者各种实用的操作。Objective-C的编译可以在现存C编译器基础上实现,而不需专门开发一个全新的编译工具。这让Objective-C能重用大量遗留的C代码、类库等各种资源。目前Objective-C代码的编译在GCC和LLVM/Clang中已得到完美支持,并且GCC的最新4.6版本还支持多项Objective-C 2.0语言的新特性,比如说快速枚举、dot语法、可选协议方法、类拓展以及新的Objective-C运行时API等。

Objective-C的独特之处在于,它将垃圾回收等一些真正高层次的语言特性与C语言低层级的函数功能相结合,通过高层次的语言功能提高程序员的生产力。但即便如此,不少开发者仍旧对语言的发展给予厚望。Mac OS应用Illuminate的作者Andy Finnell在他的Blog中写道,希望在下一个Objective-C 3.0版本发布时,增加闭包的支持,并增加匿名函数以方便在函数中与前端JavaScript交互,并提供在匿名函数中访问本地变量的功能。

在公司或个人准备启动一个新的软件开发项目时,TIOBE编程语言流行度排行常被用作检测编程语言或技术先进性的参照尺度,来辅助技术选型的决策。苹果iPhone和iPad平台市场领导地位的确立和Apple各系统不断推陈出新,极大的推进了Objective-C语言的普及和流行,使其成为TIOBE本年度最佳编程语言。随着苹果公司Mac OS X Lion和iOS 5.0发布日期的临近,具备更强劲性能的硬件和更丰富易用的平台将很快与苹果的用户见面,这也呼唤更多的开发者加入到Objective-C应用开发的行列中来,让这门本年度最佳编程语言为用户实现更大的价值。

本文曾发表于《程序员》杂志-2011年08期“程序天下事”栏目。

移动开发新宠:Lua语言

TIOBE编程语言流行度排行榜的统计数据来源于Google、Bing、Yahoo!等主流搜索引擎,以及各大技术网站发布的招聘信息,在很大程度上代表了编程语言的流行趋势。在六月的TIOBE编程语言排名中,Lua语言第一次进入了排行榜的前十名。

轻量级脚本语言Lua在开发者中正变得越来越流行,这与移动应用开发的升温密不可分。以iPhone为代表的移动平台,为不少开发者提供了新的应用展示空间,也为支持iOS系统的应用开发带来了巨大商机。包括大获成功的游戏《愤怒的小鸟》在内,不少iPhone和iPad流行应用使用了Lua作为游戏脚本。Lua语言最大的优势在于其轻量级脚本和高效的运行效率,这一得天独厚的优势让Lua在以娱乐和用户体验而著称的iOS系统上大有用武之地。

小巧的Lua语言来自于巴西里约热内卢天主教大学于1993年启动的实验性项目。Lua语法简洁优美,解释器由标准C编写。以快速小巧著称的Lua拥有在目前所有脚本引擎中最快的运行速度,这样的特性让Lua、成为用作嵌入式脚本的最佳选择。Lua代码几乎能在所有操作系统和移动终端上编译运行,同时Lua提供了LuaJIT项目,针对特定目标平台为开发者提供即时编译功能,进一步增强Lua的执行效率。

Lua的设计初衷并非意图构建完整的应用,而是嵌入在应用程序中为应用提供灵活的扩展和定制功能,所以Lua仅提供了基本的数学运算和字符串处理等函数库,而并未涵盖程序设计的方方面面。在语言兼容性上,Lua一开始就瞄准了具有广泛应用场景的C和C++,让C/C++编写的代码可以很方便的调用Lua脚本,同时C/C++函数也能够在Lua脚本中调用。与C/C++代码的良好交互性,让Lua在应用程序开发中有着广泛的应用基础。

Lua最流行的应用场景是在游戏中作为处理逻辑的脚本,即用来编写游戏的任务脚本,以实现游戏的可配置性和可扩展性。在游戏中Lua脚本的加载不需重启服务器,尽管脚本的运行效率低于编译好的二进制代码,但目前CPU速度已完全能够让Lua脚本迅速解释执行。在以《魔兽世界》为代表的网络游戏中,几乎所有的插件都是使用解释性的脚本Lua编写,核心的C++代码只占全部代码中的很小一部分比重。

目前Lua语言的最新版本是5.2 Beta,如果你也准备在移动应用开发中尝试嵌入Lua脚本,在熟悉语法之后,便可移步Lua开源项目站点Lua开发者站点Wiki库,下载感兴趣的Lua程序脚本,开启Lua脚本的学习之旅。

本文曾发表于《程序员》杂志-2011年07期“程序天下事”栏目。

JVM上的新语言:Ceylon

在2011年4月举办的QCon北京大会上,来自Red Hat的Gavin King首次公开了关于Ceylon语言的重量级话题。作为Hibernate的创始人,Gavin广为Java开发者熟知。本次技术大会上透露的Ceylon语言,是Gavin在Red Hat近两年一直投身设计并开发的新一代JVM语言,计划在企业开发领域赶超Java的领导地位。

Ceylon面向企业级应用开发设计,在JVM运行时基础上执行,支持与Java的交互操作。Ceylon语言充分借鉴了Java语言的优势并屏蔽其在设计上的不足,使用静态类型并提供高阶函数支持,在保持代码良好可读性的同时进一步降低开发者入门的难度。

Ceylon语言没有设计特殊的Primitive类型或复合类型,所有类型在类型系统内部都是可表达的。Ceylon的通用类型设计比Java的实现更为简便,而且相比其他类Java语言具备更高的安全性,Ceylon的元编程(Reflection)也必须是类型安全的。此外,Ceylon语言减少了开发者对于配置文件的依赖,屏蔽了Java开发者常常需要对各种XML进行的配置和修改操作。

Java语言的确具备众多适宜于企业开发的优点,包括良好的开放性、适合企业级开发的健壮性等特点。但是其生产效率和过重的负荷却一直令人诟病。作为一门深受Java语言影响的JVM语言,Ceylon由熟知Java语言的专家设计。正是因为Gavin多年的Java开发经验,促使他着手实现这样一个期望能够超越Java的语言。

当然,从头开始创建一门编程语言以及SDK工具包无疑是一项将耗费巨大工作量的任务,但Gavin在Blog上撰文写道:我们在设计开发Ceylon语言的过程中,借鉴了大量Java开源社区中的成果,如Open JDK, JBoss以及Eclipse社区,并且这些工作对于Red Hat这样规模并汇聚众多开发好手的公司来说并非是不可能的任务。

社区支持对于Ceylon语言的发展是必不可少的,然而,要想获得社区的认可与追随,Ceylon语言本身能够提供一个设计优良的杀手级开发框架将是个巨大的激励因素,就像Ruby语言的Rails框架或Scala语言的Lift框架那样在众多项目中得到成功应用。为此,Gavin撰写了一系列Ceylon语言的介绍性文章,来帮助社区开发者进一步了解并掌握语言的使用。

此外,IDE环境对于开发语言的普及具有很大的推动作用,如被不少Java开发者所推崇的Scala语言,则同时拥有基于Eclipse的IDE工具、基于IntelliJ IDEA的开发环境,以及NetBeans的Scala开发插件。目前,Ceylon语言也同样需要一个令人满意的IDE工具,来增强语言的适用性。

作为Hibernate的创始人,EJB3.0专家委员会成员,JBoss Seam的开发者,Gavin King已经取得了令开发者瞩目的成绩,运行在JVM之上的新一代编程语言Ceylon能否真正赶超Java,造就另一个辉煌,让我们拭目以待。

本文曾发表于《程序员》杂志-2011年05期“程序天下事”栏目。

JavaScript代码生成器——CoffeeScript

CoffeeScript是使用Ruby编写的编程语言,旨在通过简单的编码方式让开发者在Web应用中生成并使用JavaScript代码。CoffeeScript融合了Ruby的简洁和JavaScript的灵活,让开发者通过简单易读的语法来撰写逻辑规则。CoffeeScript编译器负责将代码逐行解释为等效的JavaScript程序,并保证生成的JavaScript代码与源代码在逻辑结构上一致。

较之JavaScript语法,CoffeeScript在语法设计上更为严谨。为了让代码看起来更加简洁精致,CoffeeScript使用空格缩进而非大括号来进行代码段分隔。开发者可以在CoffeeScript编程中调用任何已有的JavaScript类库,并能够与类库实现无缝集成。经编译生成的JavaScript代码,具备良好的版式和可读性,相比较开发者手写的JavaScript代码具备同等或更优的执行效率。

CoffeeScript翻译器是使用CoffeeScript语言本身编写,能够在编译的时候格式化JavaScript代码,这一点在CoffeeScript官方站点上也有所体现。站点为开发者提供了交互式的CoffeeScript在线编译环境,开发者在一侧敲入CoffeeScript代码的同时,代码被实时解释为对应的JavaScript程序,并可随时在浏览器上运行验证。

CoffeeScript自2009年12月份诞生以来,经历了一年多开发完善,前不久刚发布了1.0版本。在新版本中,CoffeeScript改进了循环体结构,并提供了简便的闭包实现。为了方便Java开发者使用,CoffeeScript还提供有一个被称作JcoffeeScript的Java类库,让CoffeeScript代码能够在Rhino环境中编译。Rhino项目由Mozilla基金会赞助,完全使用Java语言开发了JavaScript引擎,以便嵌入在Java应用中为用户提供脚本支持。

此外,CoffeeScript的拓展开发资源也很丰富CoffeeScript的方言Coco项目,在牺牲CoffeeScript代码可读性的同时,让CoffeeScript语法变得更为高效和实用,以便于应用的快速开发。在CoffeeScript的编码支持方面,Vim CoffeeScript项目为使用Vim文本编辑器的开发者提供CoffeeScript语法高亮显示,同时为开发者提供CoffeeScript代码缩进支持。

目前已有不少Web开发项目开始使用CoffeeScript生成的JavaScript来构建站点。比如提供各种新技术资讯的arstechnica.com站点,在其推出的iPad应用中,就是使用HTML和CoffeeScript为读者提供前端展示。37Signals发布的iPad白板应用Chalk也是使用CoffeeScript编写,并且能够借助Cache Manifest实现应用的离线运行。运行在浏览器端的坦克大战游戏Orona同样借助CoffeeScript实现。此外,另有有趣的站点使用CoffeeScript和JavaScript的矢量图形库工具Raphaël来演示如何随即生成各式各样有趣的图案。

本文曾发表于《程序员》杂志-2011年03期”程序天下事”栏目。

跨越JVM与.NET CLR的Fantom语言

在JVM平台并入Oracle产品线后,Oracle将对JVM平台进行多项改进和调整。内容包括增强平台的模块化和集成性等特征、为Java SE增加多核处理支持,在Java ME中增加多点触摸支持等。与此同时,Oracle开发部副总裁Adam Messinger在Qcon开发大会上透露,Oracle计划在提供免费版JVM基础上新增收费版本,在收费版JVM里整合HotSpot JVM与JRockit JVM,为高端用户提供功能更为强大的解决方案。

对开发者来说,无论Oracle策略如何,JVM平台依然有着巨大的吸引力。依托于JVM平台的动态语言,始终保持着蓬勃的生命力。在这些动态语言中,能够同时兼容Java虚拟机和.Net CLR通用语言运行时的Fantom,是其中极具特色的动态语言。

Fantom最初被称为Fan语言,由于定名为Fan不易检索,开发者在09年11月份将当时新发布的版本定名为Fantom语言。Fantom使用与BSD 类似的Academic Free License 3.0开源协议授权。

Fantom的开发者将其设计为一门实用且有趣的脚本语言,来解决Java和C#编程中实际存在的问题,降低开发者编码的难度。Fantom语言最大的特点是它的可移植性,Fantom代码能够无缝的在Java VM和.NET CLR平台之间进行迁移。为了保证平台间的顺利移植,Fantom代码首先被编译为fcode,即一种字节码表示法,之后转换成为Java字节码或IL解释语言,转换的过程在程序运行时完成,开发者可以以单个文件的形式在虚拟机中部署Fantom代码模块。

对于Java VM和.NET CLR平台切换时的API调用,Fantom给出了简便易用的解决办法。Fantom提供了一组与Java 和.NET API配合使用的API接口供开发者使用,来屏蔽不同平台间对于系统API调用的差异。

当然,Fantom语言的可移植特性不仅限于Java和.NET平台,Fantom支持将代码编译为JavaScript脚本供开发者在浏览器端使用。Fantom语言从一开始就为跨运行时的编程而设计,在未来的规划中,Fantom语言还将支持iPhone的Objective-C语言,以及LLVM集成编译环境或集合了Python与Perl语言优势的Parrot语言

在Fantom编程支持方面,开发者可以使用基于NetBeans Platform的IDE环境FantomIDE进行编码和调试,IDE包含开箱即用的Fantom环境,语法和词法解析使用开源语法分析器ANTLR设计,FantomIDE还提供了Javascript、CSS、HTML、XML等脚本支持以及Subversion和Mercurial等管理工具。

JVM平台从不缺乏优秀的动态语言,Groovy、JRuby、Jython、Scala都是其中的佼佼者,不同语言的风格类型、运行速度和工具支持也各有千秋。Fantom以其跨运行时的特性和先进的设计理念,是否将来能脱颖而出得到开发者的认可,让我们拭目以待。

本文曾发表于《程序员》杂志-2011年02期”程序天下事”栏目。