写点什么

Bill Burke 谈动态语言的现状与神话

  • 2008-02-23
  • 本文字数:2440 字

    阅读完需:约 8 分钟

“我是个 Java 的狂徒么?”——这是个好问题。Bill Burke 在他的博客文章“动态语言的现状与神话”中回答了这个问题:

也许是吧,但是我并不这么认为。…我也不相信 Java 是一切的终结。语言需要优雅的、类型安全的闭包功能,这样才能利用 Annotation 实现 DSL。它需要一种标准的、非代码生成的方式为 Annation 添加新行为。它需要一种结构化的句法来简化初始化。AOP 支持可能也很好,或者至少 JVM 的支持可以让实现类似于 AOP 的特性更容易些。在 JVM 和 Java EE、Seam、Hibernate、Spring 和 JBoss AS 等产品的 API 中,更好的 Zero-turnaround 开发特性会为开发任务带来极大的帮助。

他继续说道:

如果有一种新语言支持下面的这些特性,我倒是愿意放弃 Java,但是这种语言必须满足:

  • 类型安全,静态类型
  • 能够找到一个可与现代 Java IDE 相匹敌的 IDE
  • 存在丰富的 API 和库,可以很容易地构建应用程序
  • 存在一个生机勃勃的商业生态系统
  • 存在一个活跃的开源社区

尽管当前的动态语言具备了上述的部分条件,但却没有哪个可以包含一切。所以目前为止 Java 仍然是我的选择,而我也仍然是一个 Java 的追随者。

文章还中肯扼要地探究了动态语言的一些现实与神话。动态语言的现实状况包括:

  • 某某动态语言无法在某些基准测试中超越 Java
  • Ruby VM 不支持内核级线程
  • Ruby、Python 这些动态语言不是类型安全 / 静态类型的
  • 缺少了类型安全,语言在大型团队中很难具有良好的伸缩性
  • 缺少了类型安全,就无法在现代的 IDE 中进行可靠的重构

动态语言的神话包括: - 软件工程师在工作中一定要用最好的语言

  • 代码行数越大,意味着错误越多,因此动态语言比静态语言好
  • 我使用某某动态语言的生产率高,是因为它的语法更清晰、更优雅、更强大

你可以在 Bill 的博客上读到每一项的更多细节,不过就其中大部分内容的争论已经由来已久了。最有趣的反倒是回复中的内容。关于动态语言,John Wilson 发表了非常精辟的看法:

动态语言不是万能药,但是要想解决某些问题,它们的确是非常适合的工具。 Java 曾经对于非专业的程序员也是很友好的,但是它现在已经渐渐地偏离了这个方向(嘿,泛型,我就是在说你!)。在这种状态下,给 Java 添加任何特性 都不能让它变得更易用。IDE 能够帮助专业程序员极大地提高生产力,但是需要程序员花很大力气去学习 Idea、Eclipse 和 Netbeans,这样做 需要极大的时间和精力的投入。

我们建立了越来越多的障碍,使得编写 JVM 逐渐变得困难。如果持续下去,JVM 就会死掉。如果开发 JVM 只剩下唯一的方式:去雇用昂贵的超级专家,那么一切就结束了。

如果专家们有了什么绝妙的想法,可以在几天之内迅速地开发了一个 Jython、JRuby 或者 Groovy 实现,假如这个实现不工作,他们其实并没有什么损失。但是如果这个实现可以工作,它会面临很多问题:速度慢、无法扩展、难以维护(注意,这些问题只有在应用程序成功后才会遇到)。然后你可以通过增加资源来修复这个问题(Twitter 的开发者们似乎还没有指出过这些问题)。但是,如果完成实现所需的资源并不容易得到满足,那么能够从理论走到现实的想法就会大量地减少。

在另一篇回复中,Hypothetical Labs 将Java 的遗产看作是与Bill 列出的各个特性相关的问题: > 问题在于Java 社区如何对待语言的变化。所有的变化都要做到向后兼容。由于担心会在某些地方破坏了一些应用程序,人们是不会轻易改变任何语言特性的。理 论上,我可以让自己写于上世纪九十年代的代码运行在最新的JVM 上。这有些疯狂。[不!这是Java!-Leonidas] 糟糕的代码(cruft)受制于语言的发展变化,并堆积这些变化,直到语言的某些特性不得不被去除。看看泛型的产生过程以及正在制定中的闭包规范,就可以 知道现实中的单一设计决策对这种语言的发展究竟意味着什么…最后的结果是,语言和核心社区很担心变化。

Enrique Utrilla 在一篇回复中提到,支持了 Neal Ford 提出的关于多语言开发者的观点,以及 Ola Bini Stuart Halloway 的语言层解决方法的观点:

恕我直言,这个问题最终归结为三个关键概念间的平衡:生产力、维护的简单性和运行时效率。 也许我错了,但是动态在生产力方面上胜过了 Java,就像 Java 打败 c,c 打败汇编语言一样。你可以很快地完成某些事情,这很棒,比如,建立原型和证明概念的正确性。

在维护的简单性这点上,Java 和类似的语言(包括.NET,Scala 和其他任何你喜欢的非动态的、高层的语言)胜过了动态语言。重构对于现代 IDE 来 说已经司空见惯了,而且大多能在编译时发现错误。然而动态语言只能在运行时才能检查到错误,最糟糕的是,仅仅是有时。

我最亲睐的方案是博取众家之长,提供一个多种语言之间的良好整合。用 Java 编写各个关键算法,然后用最合适的语言将它们粘合到一起。相对于纯动态语言的 实现,这样做在整体上提升了系统性能。这种方法对于 Groovy 尤其有用,它同时具备了与 Java 的相似性和与 Java 无缝集成的能力。(我承认我并没有 用 Groovy 写过很多程序,但它已经成为我第二钟爱的语言了)。这还是各个因素之间的平衡。

我认为作为开发者,我们都应该被问到这个问题“我们的社区在哪里?”当开发者在不同的语言和平台之间游走时,会遇到比新手写得好一些代码以及“骨灰 级专家”写的简明扼要的代码么?这些代码都需要重写,以便于软件的维护。语言应该变得足够简单么?这样我们依赖于 IDE,并且非专业的程序员也可以做一些 事情,而我们,专业的程序员,就可以关注和扩展新的特性和非功能性需求,比如可伸缩性。我们应该保证向后可维护性么?还是在语言和库设计者没有考虑到的时 候,动态语言的灵活性允许我们添加向后兼容性?由于以前的开发者都纷纷转入到大量新生的动态语言和 JVM 平台语言社区上来,Java 原本生机勃勃的开源社 区会日渐衰落么?

不过,Bill 最后说道:> 我在博客中表达的真实意图不是要去抨击 Ruby 和其他动态语言,而是要去抨击所有含糊其辞的说法。

就这一点来说,希望无论对于动态语言还是 Java,都应该是这样的。查看原文链接 Bill Burke on Dynamic Languages: Rationalizations and Myths

2008-02-23 20:481030
用户头像

发布了 53 篇内容, 共 14.6 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

zookeeper使用篇-Zookeeper Api实践,从入门到真香

android 程序员 移动开发

[译]内存泄露的八种花样(1),音视频开发工程师前景

android 程序员 移动开发

[Android-Gradle]-搞定Groovy闭包这一篇就够了,android编程权威指南

android 程序员 移动开发

[译]使用 MODEL-VIEW-INTENT 第四部分 — 独立 UI 组件

android 程序员 移动开发

[译] Kotlin Clean 架构,移动端h5开发全过程

android 程序员 移动开发

Weex原理之带你去蹲坑,kotlin参数默认值

android 程序员 移动开发

zookeeper开山篇-编译安装与zk基础命令使用(1),android综合面试

android 程序员 移动开发

[正确]的使用Kotlin Flow进行搜索优化,移动端开发技术路线

android 程序员 移动开发

[译] Flutter —— 根据不同屏幕尺寸高效的适配 UI,Android插件化入门指南

android 程序员 移动开发

渗透测试之内网渗透学习

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

[译] WorkManager 基础入门,android小游戏源代码

android 程序员 移动开发

[译]Android原生开发的现状,截止到2019年12月,一招彻底弄懂

android 程序员 移动开发

数字化工具是数字化转型很好的切入点,但是千万不要只见树木不见森林|DBT How

王和全

数字化转型 数字化

WMRouter:美团外卖Android开源路由框架,2021年Android高级面试题

android 程序员 移动开发

XTableView:一个带侧滑菜单的二维表格控件,kotlin高阶函数源码讲解

android 程序员 移动开发

阿里大佬倾情力荐:Java全线成长宝典,从P5到P8一应俱全

Java MySQL 编程 程序员

zookeeper原理篇-Zookeeper启动流程分析,2021大厂Android面试最火问题

android 程序员 移动开发

积跬步至千里:QUIC 协议在蚂蚁集团落地之综述

阿里巴巴终端技术

网络协议 移动端 客户端 QUIC协议

[干货]设计模式:六种单例的创建方式,外加一大波Android进阶架构师资料分享

android 程序员 移动开发

直播预告|App 首页如何动态化更新?来看蚂蚁技术专家详解「支付宝」全新卡片技术栈

蚂蚁集团移动开发平台 mPaaS

大前端 支付宝 移动开发 mPaS 卡片技术

[译] 管中窥豹:RxJava 与 Kotlin 协程的对比,Android社招面试题

android 程序员 移动开发

[译]内存泄露的八种花样,app优化的内容及策略

android 程序员 移动开发

WiFi配网~智能家居配网解决方案,腾讯T3大牛总结

android 程序员 移动开发

WorkManager完全解析+重构轮询系统,android事件分发机制面试

android 程序员 移动开发

《Linux一学就会》第一章第一节:学习环境搭建

侠盗安全

Linux linux运维 云计算架构师

zookeeper开山篇-编译安装与zk基础命令使用,实战篇

android 程序员 移动开发

[Android]使用函数指针实现native层异步回调,鸿蒙app开发工具

android 程序员 移动开发

[译] 如何将 Stackdriver 连接到智能家居服务器以进行错误记录

android 程序员 移动开发

[译] 改善 Android Studio 的构建速度,网易资深Android架构师

android 程序员 移动开发

[译]使用 MODEL-VIEW-INTENT 第四部分 — 独立 UI 组件 (1)

android 程序员 移动开发

爱奇艺自研QAV1编码器,将在4K高清画质为用户节省36.6%的流量

爱奇艺技术产品团队

Bill Burke谈动态语言的现状与神话_Java_Ian Roughley_InfoQ精选文章