首页 存档 技术 查看内容

深度解读:为何使用动态语言

2018-3-30 13:00 |来自: 互联网 357 0

摘要: 动态语言能够在运行时扩展程序,包括修改类型、行为和对象结构。利用动态语言,静态语言在编译时做的一些事情,我们可以在运行时做,甚至可以执行在运行时即时创建的程序语句。 动态语言的灵活性给我们带来了在应用 ...

动态语言能够在运行时扩展程序,包括修改类型、行为和对象结构。利用动态语言,静态语言在编译时做的一些事情,我们可以在运行时做,甚至可以执行在运行时即时创建的程序语句。

动态语言的灵活性给我们带来了在应用执行时演进程序的优势。这远远超越了代码生成。代码生成是20世纪才会考虑的技术。实际上,生成的代码就像持续的瘙痒,如果一直挠,就会转变为伤痛。而动态语言有更好的方式。代码合成(code synthesis)是运行时在内存中创建代码,动态语言使得代码合成更容易被人接受了。代码基于应用的逻辑流程合成,并即时(just in time)变为活跃的。

作为应用开发者,通过仔细应用动态语言的功能,我们可以更具开发效率。而更高的开发效率意味着可以在更短的时间内轻松创建更高层的抽象,也可以利用一组人数较少但更能干的开发者来创建应用。此外,更高的开发效率还意味着可以快速创建应用的某些部分,然后得到开发人员、测试人员、领域专家和客户代表等同仁的反馈,而这一切又会使我们更为敏捷。关于开发Web应用,Tim O'Reilly观察到:“不同于完成的画作,它们(即Web应用)只是轮廓,作为对新数据的响应而不断重绘。”在“Why Scripting Languages Matter”(为什么脚本语言至关重要)一文中,他也表达了动态语言更适合Web开发的观点。

动态语言已经存在了很长时间,那为什么现在让人倍感兴奋了呢?原因至少有四点:

  • 机器速度

  • 可用性

  • 对单元测试的意识

  • 杀手级应用

先从机器速度开始看。将其他语言在编译时做的事情拿到运行时做,这会引发人们对动态语言速度的担忧。在运行时解释代码,而不是简单地执行编译好的代码,也加剧了这种担忧。好在这些年来机器的速度一直在提升,今天手持设备的计算能力和内存都超过了几十年前的大型机。有些任务,使用20世纪80年代的处理器可能是难以想象的,但现在却可以轻而易举地实现。得益于处理器速度及本领域中其他方面的提升,包括更好的即时编译技术和JVM对动态语言的支持等,我们对动态语言性能的担忧已经大大缓解。

再来谈一下可用性。互联网和活跃的基于社区的“开放”开发方式,使较新的动态语言易于获得和使用。开发者可以轻松地下载到这些语言和工具,并加以研究及利用,他们甚至可以参与到社区论坛中来影响语言的演进。Groovy用户邮件列表非常活跃,经常有热心用户参与讨论,表达他们对当前和未来特性的意见、想法和批评。这使我们能够比以往更好地实验、学习并调整语言。

下面再来看一下单元测试意识。大部分动态语言是动态类型的。类型往往基于对上下文的推断。没有编译器在编译时标记类型强制转换违例。由于很多代码可能是在运行时合成的,而且程序可以在运行时扩展,所以不能单独依赖编写代码时的验证。从测试的角度看,相对于使用静态类型语言编写代码,使用动态语言需要更严格的自律。在过去的几年里,我们看到程序员对测试,特别是单元测试的意识在逐渐增强(尽管采用广度还远远不够)。大部分将这些动态语言应用于商业应用的程序员,已经采用了测试和单元测试。

最后,很多开发者实际上已经使用了几十年动态语言了。然而,要唤起业内大多数人对动态语言的兴趣,必须有可以与开发者和管理人员分享的杀手级应用,也就是有令人信服的应用案例。这一引爆点往小了说是Ruby的,往大了说是动态语言的以Rails的形式出现了。Rails显示出,使用Ruby的动态功能,苦苦挣扎的Web开发者可以如何快速地开发应用。同样,我们有Grails这种用Groovy和Java编写的Web框架,它提供了同样的开发效率和便利性。

这些框架在开发社区引起了足够的轰动,使得在整个业界应用动态语言有了极大的可能性。

动态语言,连同元编程功能,使简单的事情更简单,复杂的事情也可以掌控。当然我们仍然需要处理应用的内部复杂性,但动态语言让我们有可能把力气用在刀刃上。在使用了多年C 之后,当我接触到Java时,像反射、良好的类库以及不断演化的框架支持等特性带给我非常高的开发效率。JVM在一定程度上为我提供了使用元编程的能力。然而,除了Java,我还不得不想办法利用一些可能较为重量级的工具,比如AspectJ。和其他一些开发效率很高的程序员一样,我发现自己有两条路可走:使用极为复杂而且不那么灵活的Java,结合多种重量级工具;或者转而使用面向对象的、内建元编程功能的动态语言,比如Ruby。(举个例子,在Ruby和Groovy中实现面向方面编程只需要几行代码。)在几年之前,保持高开发效率的同时利用动态功能和元编程,就意味着要离开Java平台。(毕竟,这些特性的使用是为了提高效率,不能让它们拖慢我们的脚步,对不对?)世易时移,情况变了。现在有了诸如Groovy、JRuby和Clojure这样的动态且运行在JVM上的语言。使用这些语言,我们可以充分利用Java平台的丰富特性和动态语言功能。

相关图书推荐

作者:Venkat Subramaniam

译者:臧秀涛

页数:296

这是一本全面实用的Groovy程序设计指南,既涵盖Groovy编程基础,又涉及该语言的最新高级特性,如模拟对象的单元测试、Builder的使用、在数据库和XML中的以及创建DSL等。本书是具备Java基础的程序员掌握Groovy的首选图书。

败家戳左下角【阅读原文】。

本文转载自:微信公众账号 - 图灵教育,版权归原作者所有!

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部