动态语言的原理及展望

澄清一下动态语言的定义:动态编程语言是一类可以在运行时刻改变自身结构的语言————功能(方法、函数)可以被加入或去除,新的类或对象可以被建立,新的模块可以出现。大多数动态语言采用动态类型。通俗的讲,如果你用的是动态语言,你就可以编写代码在运行时刻增加、删除或修改替换同一程序中的其他代码,让你的程序像变形金刚一样灵活。

有什么意义呢?想必大家都听说过“依赖注入”或者“面向方面”编程,其思想就是按照关注点分别实现相关业务逻辑单元,再通过配置等手段将各个单元进行组装,形成完整的应用系统。好处就是各个单元能够更加简单、独立,将来维护、修改的代价更小。动态语言可以更好地支持“依赖注入”的思想,比如你可以先不管用户身份验证,实现业务功能,再写一个身份验证管理模块,然后写代码让系统在运行时调用每个业务功能前验证用户身份和权限。当然,这个例子在Java等静态语言中已经可以实现,比如用AspectJ, Spring等,但动态语言的优势是:实现类似的功能非常简单,不需要复杂的框架和配置文件!造成差别的原因是:静态语言可以用reflection查找元数据,却不能在运行时刻修改程序结构,所以一定要一个大的框架,实现各种回调及配置机制,以支持代码“织入”。

以上谈的“依赖注入”只是一个例子,实际上动态语言的威力还远远没有挖掘出来。如果各位有兴趣看看Rails的源代码,就会发现很多用动态语言实现起来很简单,用静态语言却很复杂的地方,这也是Rails使用Ruby语言的原因。举个例子,在JAVA编程中,要为每个数据库字段在对应的类中添加一个属性,再用配置文件“告诉”Hibernate这个字段与这个属性是对应的;在Rails中你就不用做这些工作,利用Ruby的动态功能,Rails会悄悄替你添加相关的属性(代码里看不到),你的DB里有什么字段,在代码里就可以直接读写什么属性,很简单吧。你也可以说,这有什么了不起,软件设计的时间主要花在分析设计上,这几分钟省下的时间可以忽略不计。好吧,如果你像我一样,每天都在和几十个表打交道,你知道干这些“体力活”有多烦,敲打着每页代码里的属性声明和get(),set(),简直是浪费生命!实际上,这个例子只是展示了动态语言的九牛一毛,很多动态语言用几行搞定的功能,用静态语言要几十行,不说节省的调试时间,从质量的角度考虑,代码少了错误就少了,测试时间也能省下一些。

好了,当我们理解了基本概念和原理,我们才可以讨论动态语言的前途问题。我不知道PHP算不算动态语言,也不关心Ruby和Python哪个更有前途。从理论上讲动态语言能够做到静态语言所有的事情,同时拥有运行时刻改变自我结构的能力,尽管这种能力还没有被充分发掘,但也在一些具体环节上赢得了不菲的进步。但在实践当中,动态语言对IDE的支持比较差,比如智能输入(那种你在对象名后打个点,系统列出所有方法帮助你输入的功能)就比较难实现;还有,性能不够好;再者,因为多数动态语言是采用动态数据类型的解释性语言,没有编译过程,一些类型引用错误不能及时发现;而且,动态语言的程序大多以源码形式运行,如果用于商品软件,可能不利于保护知识产权......还有一些,恕不一一列举。虽然有诸多缺点,但笔者认为这些都是技术和时间问题。历史的脚步会跟随那些更加简练的、表现力更强大的语言前进。我们也曾质疑过JAVA的性能、IDE、大规模部署案例等等,但我们不能阻止Java变成当今如日中天的语言。

那么,我们再来看看Java和.NET平台对动态语言的态度。无疑,都在全力支持,修改虚拟机添加对动态语言的运行支持能力。最后,也许有一种动态语言会运行在JVM上,取代Java在Java平台上的地位。在.NET世界,原本就不限语言,C#和VB.NET用的较多,但要么C#加入动态支持,要么会有另一种动态语言喧宾夺主。最好的结果是:一种新的动态语言,既可以运行在.NET Framework上,又可以运行在JVM上,可以调用两者积累的大量库功能。再说一遍,我不知道下一个主流语言是什么,但我相信会是一个有动态特性的语言。给出几个候选:Ruby, Python, 动态Java,动态C#,动态D语言,等等。

最后,我不希望又成为谩骂和嘲笑的目标。每个人都有自己的不足之处,所以需要在一起讨论,共同进步。如果你有任何意见,到我的blog上留言,我会认真回复。我已经写15年程序了,现在是一家海外上市公司的软件管理人员,每当外国同事用英文问我:Why are there so many four-letter words in Chinese technical forums? 我就非常尴尬。真的希望大家不要再丢自己人的脸了,我们中国有悠久的文明,可是国外看不到,看到的只是中国人在每个论坛上大骂。我也想在此大骂,可我鄙视骂人者。 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值