频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

洞察动态语言与静态语言之争

作者: Sadek Drobi 出处:InfoQ中文站 2008-06-02 13:43    砖    好    评论   进入论坛
阅读提示:Steve Yegge一直以来致力于提倡和推广动态语言。他在斯坦福大学的一个发言对动态语言进行了深入的阐述,最近他将此发言的文稿贴在了博客上,不料此话题在博客圈子里引起了不小的反响。

Steve Yegge一直以来致力于提倡和推广动态语言。他在斯坦福大学的一个发言对动态语言进行了深入的阐述,最近他将此发言的文稿贴在了博客上,不料此话题在博客圈子里引起了不小的反响。他认为静态语言已经发展到了极限,而动态语言相对来说却能给开发者提供更大的空间。虽然承认目前动态语言在性能、可维护性和开发工具上都存在一些问题,但他认为这些问题都不是无法解决的,动态语言推广的主要障碍是业界对尝试新语言的态度不是很积极。

Cedric Beust就此问题写了博客回应,他对Steve的许多看法持否定意见,特别是“构建动态语言开发工具是跟构建静态语言有些不同,但绝不会比它要难”这个结论:

这两者不仅不一样,而且构建动态语言开发工具显然要难得多(在某些情况下甚至是不可能完成的)。你提到静态重构不能覆盖所有的用例,这个观点虽然是对的,但是其覆盖的用例已经快接近100%,这些不是动态工具能企及的。

[…] 

动态类型语言难以大规模替代静态类型语言的结论是基于这样一个事实:源文件中包括大量无类型的代码,这使得自动重构变得无法实现,更别说应用了,程序员自然也就会对重构产生排斥心理。

然而Cedric和Steve都认为在产业界的大规模开发项目中推广使用新的语言是比较困难。在这一点上他们虽然措词不同,观点还是基本一致的。Ted Neward对Steve和Cedric的帖子进行了回应,他持有相反的观点。他认为“发明一种新的语言的门槛从来就没有象今天这么低过”。虽然非常了解“在IT中应用新平台的开销”,但他坚信“在新平台应用到下一个大项目之前,还是有可能进行一些准备工作,还是有足够的时间进行实验和经验积累的”。这些实验日前已经变得相对容易了,因为在老的平台上运行新语言已经变成可能:

运行在业已存在的环境(特别是JVM和CLR)上的强大之处就在于此——实际的部署平台并没有变化,因此IT人员对部署场景多多少少有似曾相识的感觉。这就是JRuby、IronPython、 Jython和IronRuby相对于相应的本地解析语言的优势所在。

Ted Newward总结道“一天过后,你会发现'静态vs动态'可能并不是问题关键所在。”选择语言的标准应该是:

1. 拥有表达人脑中概念的能力

2. 拥有随着人脑中概念的演进而演进的能力     

在谈到多语言编程时,Ola Bini也发表了类似的观点。他认为每种语言——强静态、弱静态和动态——都有各自的优势和缺点,生拉硬扯的比较是没有意义的。我们应该选择最适合目标应用的语言:

不同的语言分别适合不同的应用。好的程序员会用其积累来得出许多有价值的结论,这其中就包括选择最好的语言。如果在同一项功能实现上Ruby比Java快五倍,你怎么看待这一问题?在另一方面,Java的许多IDE在维护代码方面会比较容易,但如果用Ruby的话,你维护的代码只有Java的五分之一,这两点怎样进行折衷?这都不能一概而论,不过在很多情况下,混合方案往往是最好的。

根据Greg Young的观点,静态vs动态语言的讨论也应该考虑契约式设计(Design by contract, Dbc)和“并非只对类型进行静态验证这一概念”。他解释了应用Dbc的附加价值,并且认为静态语言更适合它:

[… …]总体上说,应用动态语言和静态语言是相当简单的,DLR的存在很好的证明了这个观点。然而在理论层面和动态语言实际应用之间还是存在一些差距的。动态语言在概念上属于运行时的范畴,静态验证在概念上属于编译的范畴,动态语言代码在编译时的静态验证是无法实现的。试图在编译阶段验证动态代码会使你陷入停机问题的漩涡。

静态验证和契约式设计理论大部分属于确定性理论的范畴。然而在发言中,Steve Yegge认为验证也可以充分利用“运行时知晓一切”的优势,从而变成非启发式的。他以自然语言处理和语法检查为例说明了概率方法可能更合适于验证工作,并且在计算花销上也更小。

[… ]Microsoft Word的语法检查器用的是Chomsky语法。[… ]实际上你在试图分析出句子结构时候已经做了跟编译器类似的事情。[… ]

这些都不是很管用,计算上的花销太高了,加上语言也是在不断变化之中的。Google在这方面就用到了概率理论。

[…] 十年的潜心研究后,你得到的结论是“嗯,我们只是在做概率上的即兴表演”——[…]他们搜集到巨量的各种语言翻译文档,利用这些文档进行机器学习,得出一个概率模型。在今后的句子翻译中基于得出的模型选出概率最高的组合即可。

查看英文原文:Debate and more Insights on Dynamic vs. Static Languages?

【相关文章】

【责任编辑:碧海蓝天 TEL:(010)68476606】

专题
C++是垃圾语言?!
Java发展动态专题
XML可扩展标识语言详解
UML统一建模语言
Java编程开发手册
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看78541次)
·UML类图详解 (查看69310次)
·C++是垃圾语言?! (查看39335次)
·C#技术开发指南 (查看37953次)
·UML统一建模语言 (查看37739次)
·Java编程开发手册 (1198个砖)
·Java基础教程 (430个砖)
·C#技术开发指南 (311个砖)
·.NET开发手册 (248个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (657个好)
·Java基础教程 (578个好)
·.NET开发手册 (280个好)
·PB开发教程 (212个好)
·Delphi开发技术手册 (199个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
网络工程师的职业规划与生存现状
网络工程师的职业..
充电计划之热门IT认证官方资料汇总
充电计划之热门IT..
勇闯IT培训黑色围城
勇闯IT培训黑色围..
· 勇闯IT培训黑色围城
· 如何有效防御SQL注入攻..
· 2008年上半年全国软考..
· 选择适合自己的IT认证
· IPv6协议--拓展网络无..
· 了解统一威胁管理(UTM)..
· 调查:十大发现 解秘技..
· 技术人求职简历完备手册
· Vista SP1对决XP SP3
· 运营商封堵ADSL共享 中..
· LAMP技术精解
· PHP开发应用手册
· 解析35岁技术人的价值..
· 汶川大地震 IT技术人在..
· SOA 面向服务架构
· 龙芯要做中国的“奔腾”
ARP攻击防范与解决方案
ARP攻击防范与解..
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/..
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
ARP攻击防范与解决方案
ARP攻击防范与解..
SQL Server 2008/2005全解
SQL Server 2008/..
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· RAID——磁盘阵列基础
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册