新兴语言创造者谈:为什么我们需要新语言
近日,OReilly 开源大会(OReilly Open Source Convention)在美国俄勒冈州波特兰市召开,会上首次开展的Emerging Languages Camp环节邀请了24种新编程语言的开发者,他们展示了各自的作品,其中包括专为最新网络应用程序和移动设备设计的编程语言。
在这些开发者中,有些是热切盼望施展个人才华的业余爱好者;有些是希望改进下一代编程语言的学术专家;还有些是来自微软和谷歌等公司的研究员,他们希望开发出新语言,适应最新的应用程序和网络基础设施。
在仅为20分钟的短时间演讲中,开发者们较详细地描述了各自的尚处于初级阶段的新编程语言。所有开发者都期望舍弃已沿用几十年之久、越来越不适用于现代计算机的编程语言。更广泛地讲,整个业界也期望如此。谷歌程序员罗布•派克(Rob Pike)与同事联合开发了谷歌的Go编程语言,他说:“目前,语言设计正呈复兴之势,最大的原因是现有的主流编程语言已不能解决人们希望解决的问题了。”
问题之一,也即各大公司如谷歌、Facebook、亚马逊等最感兴趣的问题是,面对分散和多核心的计算平台,如数据中心和云网络,如何应对其不断增长的复杂性。为此,谷歌于2009年末发布了Go编程语言,有意将其作为C++的替换语言。派克认为,程序员使用C++语言会很难充分利用现今的并行计算架构。“C++已经有20年的历史了,谷歌和很多其他公司都使用C++做为系统语言, 但我们目前了解的很多关于硬件和网络的知识,以及硬件和网络如何改变软件设计理念等知识,都未能影响到编程语言的设计。”
在谷歌,派克和其团队发现C++会限制程序员的工作效率,因为他们要花几分钟或几小时来进行汇编。(汇编指的是将人们可读取的源码批量翻译成二进制的、计算机CPU可执行的“机器语言”的过程)。Go语言删减了汇编过程中的冗余做法,意味着“几秒钟内就可执行程序了,”派克说。派克不认为Go会取代C++成为主要编程语言;“我们只是觉得C++需要一些竞争,”Go已经在谷歌内部应用于“实际项目”了。
另一个新兴计算领域是运行于移动设备上的程序,这些移动设备通过特定的无线网络相互连接。来自比利时布鲁塞尔自由大学的蒂姆•凡•范柯森(Tim Van Cutsem)在会上发表了试验性语言AmbientTalk,该语言展示了一种新的编程范式,即“以环境为导向的编程”,它与传统的分布式计算方式有两个方面的主要区别。其一,它不依于中央网络基础设施。其二,它基于网络连接是不稳定的和无法预知的(正如移动设备常常进出其服务范围一样)。据范柯森表示,“AmbientTalk能够智能地缓冲信息,当网络连接中断时,这些信息不会丢失,当网络重新连接时,这些信息会正常发出,好像网络从未中断过一样。”
在试验AmbientTalk语言的一个应用程序中,两台智能手机可通过无线网络交换音乐库元数据,且可向对方推荐音乐。若在同步交换数据过程中有一台手机离开服务区,那么该应用程序不会停止或挂起。虽然其他编程语言也能提供这一功能,但 “在AmbientTalk语言中,这种等待和接受网络中断的行为被设为了一个默认项。” 范柯森说。“这让我们在编写应用程序时不必再考虑这方面的问题。”
微软未来社交经验实验室(FUSE Labs)的马特•迈克劳林(Matt MacLaurin)展示了编程语言Kodu,期望解决另一个问题:如何让年轻人对编程感兴趣。“我们的工作理念是编程本身充满乐趣,引人入胜,就像猜字谜或九宫格游戏一样,”迈克劳林说。“我们正试图改变人们对编程的认识,就从小孩开始。”
Kodu是应用于Xbox 360和微软计算机上的一种开放的“可视化编程语言”,以视频游戏的模式介绍编程概念。该语言没有使用教科书中的变量和字符串等抽象名词,而是利用一个3D游戏的平台,(通过Xbox游戏控制器或电脑键盘鼠标)对游戏中的动态角色编注脚本,使这些角色作出各种动作,如吃苹果或与敌人战斗。但这些对象和动作会直接映射到“实际的”编程概念,使Kodu成为能够执行复杂逻辑的一种完整的语言。“我们从微软的一些语言理论学家那里得到了认可,”迈克劳林说。“真正的成功在于孩子们不用在教室里听计算机科学老师讲课就能学到编程知识,他们编出的程序有可能是我们都预料不到的。”
派克、范克森和迈克劳林一致认为,专门的编程语言在未来的几十年里将变得越来越重要。但这并不表示新语言会取代旧语言而占据主导地位。
Emerging Languages Camp的组织者是曾在Twitter做过程序员的亚历克斯•佩恩(Alex Payne)(目前是BankSimple网络银行公司的首席产品官和首席技术官)。佩恩认为“多语言编程”将来可能会很普遍,程序员会使用多种不同编程语言应对多种不同难题。“这将使未来的编程语言领域变得杂乱无章,”他说。“但我不认为这一定就是件坏事。