2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:481336
用户头像

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

关注

评论

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

向工程腐化开炮 | Java代码治理

阿里巴巴终端技术

Java android JVM 代码治理

三级等保是最高的吗?有什么用?

行云管家

网络安全 等保 等保2.0

【IT运维】多台海外主机运维用什么工具好?

行云管家

服务器 IT运维 服务器运维 海外主机

【51单片机】室友用一把王者时间,学会了去使用数码管

謓泽

3月月更

如何进行数据挖掘?

郑州埃文科技

数据挖掘 数据库

Gitlab-ci 替代 webhook 触发Jenkins job

网易云信

gitlab

N个技巧,编写更高效 Dockerfile|云效工程师指北

阿里云云效

阿里云 云原生 Dockerfile 部署与维护 构建工具

中国AI的下一站:从两会高地奔涌向产业河谷

脑极体

WebRTC 简单入门

ZEGO即构

WebRTC 动手实践 音视频开发 即构科技

ICASSP 2022 | 前沿音视频成果分享:基于可变形卷积的压缩视频质量增强网络

阿里云CloudImagine

阿里云 计算机视觉 音视频 视频编码 视频云

数字化时代下,智能运维全栈监控解决方案及案例盘点

云智慧AIOps社区

运维 解决方案 场景应用 自动化运维 运维安全

APICloud平台使用融云模块实现音视频通话实践经验总结分享

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 融云 跨端开发

hexo+github搭建个人博客前期部署工作

静Yu

Hexo

大数据培训:Hadoop和MPP有什么区别

@零度

hadoop MPP 大数据开发

【直播回顾】OpenHarmony知识赋能第四期直播——标准系统HDF开发

OpenHarmony开发者

直播 HDF OpenHarmony

如何使用OKR管理团队?

优秀

云计算及国内主流云厂商概述

穿过生命散发芬芳

3月月更

企业内PAAS建设的经验与教训

Crazy

中间件 PaaS 经验 云原生应用

企业知识管理的目标是什么?

小炮

喜讯!openGauss社区入选2021年 “科创中国”榜单

移动域全链路可观测架构和关键技术

阿里巴巴终端技术

架构 App 移动端 体验优化

TiDB 可观测性方案落地探索 | “我们这么菜评委不会生气吧”团队访谈

PingCAP

低代码实现探索(三十七)业务的流程,开发的框架

零道云-混合式低代码平台

java培训:SpringBoot高频面试考点分享

@零度

JAVA开发 springboot

打造优质的车联网体验,仍需注意数据安全保护

FinClip

实用机器学习笔记二十五:超参数优化

打工人!

学习笔记 超参数调优 机器学习算法 3月月更

JavaScript深入理解之闭包

锋享前端

Jaeger docker部署实操

非晓为骁

Docker Jaeger Go 语言 http client

Go HTTP Server 基于OpenTelemetry 使用Jaeger - 代码实操

非晓为骁

Go Docker Trace Jaeger OpenTelemetry

如何从头到脚彻底解决一个MySQL Bug?华为云数据库高级专家带你看

华为云数据库小助手

bug GaussDB 华为云数据库 GaussDB(for MySQL)

OceanBase 社区版 运维管控平台 OCP 功能解读

OceanBase 数据库

OCP oceanbase OceanBase 开源 OceanBase 社区版

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