多语言编程

多语言编程

本文是对Steve Vinoski. Multilanguage Programming. IEEE Internet Computing, Vol. 12, No. 3, MAY/JUNE 2008, pp. 83-85 的总结。

本文的主要观点是:在软件开发中,要为特定的任务选择最合适的开发语言。

作者首先介绍了在软件集成和软件开发中涉及的术语/技术浩如烟海,但是开发者却只坚持某种技术,而必须使用其它技术来解决问题。这种现象在开发语言领域也是一样。开发者总是使用自己喜欢的语言,而非解决问题最优的语言,会造成设计方案的不优。

作者指出在日常开发中了解和使用多种编程语言可以带来显著的好处,因为没有任何一门语言适用于解决所有问题。而语言的存在也主要是由于它适于解决某些特定方面的问题(在解决某些问题方面比其它语言好),因此,不断有语言出现和消亡。在编程语言设计和开发中涉及许多需要权衡的因素,因此,这为许多不同的方案和变体预留了空间。

作者指出,大部分单一语言开发者倾向选择用于通用目的的语言(像Java、C++等),而不是特定的编程语言。通用的编程语言可用于解决更广范围的问题,但它们通常都是提供的折中的解决方案,不是太好,也不是太坏。当然,一些单一语言开发者尽力去挖掘语言的高级特性,来将语言的能力发挥到极致,但这些程序员仍然受制于这门语言实际的限度。

作者指出语言的选择对开发效率是一个重要因素,选择正确的语言所带来的开发效率的提升是巨大和值得这么去做的。作者以对XML的处理为例阐述了此观点。通用语言,例如Java在处理XML方面没有专门设计上的支持,这使得开发人员在使用通用语言处理XML方面忍受这种不匹配,来进行拙笨的开发,造成非优的解决方案。在这种情况下,为了提高效率,他们通常采用一些代码生成技术,把XML构造块影射为静态编程语言的构造块(通常是类)来尽量缓解这种阻抗,即便如此,这种方式仍然是十分脆弱的。因为把高度灵活的XML构造块转化为严格的静态的数据类型很容易造成彼此版本的不匹配。XML文档的任何改变都需要新的代码生成、重新构建、....这使得通过代码生成获得的一点点好处又被不断维护带来的成本所抵消。相比之下,Python、Perl、Erlang等语言都提供了XML处理模块,甚至还带版本化功能。更好的像ECMAscript for XML (E4X)和Scala,提供了对XML字面量的支持支持,开发人员可以直接在语言语法中写XML。消除了阻抗,带来了更简化的代码和更清晰的功能。

作者指出,选择适当的语言所带来的效率的提升还体现在对代码的维护上。作者援引Fred Brooks在《人月神话》中引用的的研究发现说,所需开发和维护的工作量与指令的数目(可以理解为代码行)是指数关系,而且这与所采用的语言无关。假设这个指数值是1.5的话,那么如果代码行是原来的3倍的话,那么就需要5倍的开发和维护成本,如果代码行变为原来的5倍,就需要11倍的开发和维护成本,如果代码行变为原来的10倍,那么就需要32倍的开发和维护成本。选择正确的语言,不仅可以减少代码行,更快的提供解决方案和对需要的响应,这个过程可以变为积极的循环,更少的代码带来更好的缺陷和更容易的增强(维护),这又使得用户更高兴,提供免费的广告宣传和反馈,进一步促进软件的发展。

作者指出,多语言编程的一个问题就是如何使它们协同工作。这可以分为两类。如果是用于分布式应用集成(即不同的应用用不同的语言),那么网络本身就通过协议提供了一个中立的方案,可以通过网络消息等。如果不是分布式应用,当前的主流开发语言,比如微软的CLT(公共语言运行时)所支持的语言越来越多,命令式的、动态的、函数式的,或脚本的。类似的,JVM也从一个单语言平台演化为一个可以支持许多语言的平台,包括JRuby、Scala、Groovy、JavaScript、E4X、Jython和其它的。而且,在JVM上,这些语言都容易学,因为都是基于字节码,这些语言可以与Java进行互调。因此,JVM提供了一个非常好的方式来为应用的不同部分选择最适合的语言。

作者还指出目前阻碍多语言编程的因素主要有两个:一个管理因素;另一个开发者认为学习新语言难度很大。对于第一个因素,管理者通常认为只采用一种语言易于管理,因为大家都用同样的语言,可以容易的替换开发人员,而且某个开发人员写的代码,大家也都能看懂,避免陷入只有少数人才能看懂和维护的局面。作者认为这种管理者对软件开发和维护所涉及的成本没有充分考虑。在一个JVM或CLR基础之上,选择合适的语言可以减少代码规模和开发维护的工作量,从而降低系统的总成本,而且,较小的系统需要更少的开发者,这又是一个巨大的成本减少。对于第二个因素,相比通用语言来说,那个特定的语言,像Lisp、Python等都很简练,核心概念并不多,初学者可以很快发现它们更具有生产力,而且,以往语言的经验可以帮助你学习新语言。如果你掌握的语言越多,你就能更容易的学习一门新语言,也能发现解决问题的最好方式。

最后,作者以“毕竟,难道我们真的认为我们已经学到我们所需要的最后一门(终极)语言了码?”结尾。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

欢迎您对自己所在的开发组织对于多语言编程、融合的实践和经验发表看法,谢谢!

你可能感兴趣的:(多语言编程)