本地代码东山再起 C++死灰复燃 时间:2015-08-03 来源:

  编程语言的发展趋势一波三折。起初最热门的语言是Java,后被Python取代了,随后Ruby突出重围抢占了市场风头,最终还是回到了JavaScript。不管你信不信,2011年的最终语言将会是C++。

上周,最新版本的ISO C++标准经过投票一致通过。这是C++语言13年来的首次重大修改,现正式称为C++11。新标准的修改引入了新的设计更容易对并行处理架构开发,包括并行计算的Lambda和新的数据类型。

C++并非真的被取代。与年代更久的同类语言C相比,C++对于系统编程和性能密集型的本地代码的应用程序来说仍是最热门的语言之一。

近年来,传统的系统编程语言已经慢慢淡出视野。现在越来越多的程序员转向远离本地代码编程的环境,如Java和.net。另一些程序员为了在Python,Ruby和JavaScript的语法上寻求快捷,宁可牺牲一些性能上的优势。(北京网站制作)

 

本地代码可能性不大,包括谷歌

谷歌是对本地代码一直情有独钟的少数公司之一。在谷歌憧憬的理想环境下,应用程序完全在浏览器里面运行;因此,谷歌开发了Chrome OS来证明自己的观点。

谷歌也曾承认过,有时候经过解释的JavaScript还不够。我在以前的文章中介绍过谷歌本地客户端(NaCl),这种沙境让Chrome浏览器可以下载和执行本地二进制代码,以便处理性能密集型操作。这绝非谷歌在闲暇之余的试验活动。上周,谷歌在Chrome的最新测试版中发布了新版本的NaCl,此技术第一次在默认情况下被启用。传闻称,谷歌悄然添加到最新版Chrome OS中的Netflix媒体流支持功能也依赖NaCl应用编程接口(API)。

NaCl也不是表明谷歌对本地代码的唯一认可。这家搜索巨头的Go编程语言之前就被广泛称为是“类似Java”,但这只说对了一部分。从语法上来讲,Go某些方面的确类似Java,但Go代码并不在虚拟机里面运行,而是直接编译成了本地代码。此外,谷歌甚至确保Go二进制代码不但可以在桌面上运行,还可以在谷歌应用程序引擎(Google App Engine)云计算环境里面运行。

很奇怪的是,这些举措使得谷歌与位于雷德蒙的竞争对手关系融洽和睦。作为世界上最大的桌面软件开发商,微软对待C++的态度一直比许多公司更友好。可是近些年来,本地C/C++开发人员觉得自己受到了一点冷落,因为微软把大部分精力投入到了C#,这是面向.NET平台的受控代码C衍生语言。

但这种情形似乎在发生变化。Visual Studio 2010已经支持C++11的大部分功能特性。今年7月,微软在其Channel 9开发人员网站上发布了一个新的视频系列,名为“Going Native”(使用本地代码),专门介绍本地代码方面的发展,特别强调C++。与此同时,目光敏锐的观察人士注意到了微软在9月召开的Build大会前夕居然没有.Net方面的宣传。Build大会之前名叫专业开发者大会(PDC)。

本地代码永不没落

早在Java时代之前就懂得编程的那些人自然完全明白为何人们重新对本地代码产生了兴趣。传统的软件开发方法有着悠久的传奇历史,经过充分优化的本地二进制代码仍是有可能从处理器获取最高性能的最佳方法。

话虽如此,本地代码也有其缺点。首先是我之前提到的安全问题。由于与C#和Java等受控语言相比,C和C++等语言让开发人员可以更接近底层硬件,所以要认真考虑的问题就多得多,缺乏经验的编程员可能会造成严重破坏。

移植性是另一个问题。对于处在Wintel环境下的Windows开发人员来说,编写可以在多种处理器架构上编译的代码从来不是个大问题,甚至在过去也是如此。然而换成了Unix环境,情况就不一样了。

现在,谷歌的NaCl环境重新带来了同样一些问题。Web开发人员习惯于自己开发的应用程序在任何基本上符合标准的浏览器中运行,但是NaCl模块与特定的处理器架构死死地绑在一起。想让同一个模块在x86、x64和ARM等处理器上都可以运行,你就得编译这三个不同的版本,然后把这三个版本都放到Web服务器上。对于长期习惯使用PHP和Perl的开发人员来说,这就需要一番适应。

但要牢记的最重要的问题是,为手头的任务选择合适的工具。谁也不想回到以前的糟糕年代:面对使用由C编写的CGI脚本的Web,为文本数据而纠结。另一方面,不管手头的任务是什么,把每一个应用程序硬塞进同样的解释语言或受控代码环境同样不是正确的方法。

现在的计算机异常尖端先进、用途异常广泛、性能异常强大。要充分利用它们的功能,开发人员就应该使用尽可能广泛的工具。本地代码的卷土重来往正确方向迈出了一大步。