QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

可伸缩性:动态和静态程序设计语言

  • 2008-02-25
  • 本文字数:1667 字

    阅读完需:约 5 分钟

紧随着个人信息管理项目 Chandler 的消亡,在 TSS 上展开了一场关于动态语言可伸缩性潜力(scalability potential)的讨论。Ted Neward 试图跳出语言之争,就此问题提出一些结构性的见解

首先,Neward 强调一种语言的可伸缩可以按照“项目大小,就像代码行数”或者“处理能力(像‘需要达到每秒处理10 万请求’)”来理解。这两者是需要 加以界定的,因为即使两者都很重要,但它们并不总是齐头并进的:比如使用汇编语言或者C,有助于性能的伸缩性,而不是(项目)大小的伸缩性。

Neward 根据“语言扩展或者增强项目复杂度预算(complexity budget)的能力”来定义大小的伸缩性。他引用了 Mike Clark 的概念,意指“每个项目都有着自己固定的复杂度预算,你在基础架构(infrastructure)和工具上花费的精力越多,那用在业务逻辑上 的精力就越少。”按照 Neward 的观点,这正是关于静态语言和动态语言可伸缩性能力争论的核心。

静态语言的拥护者辩论道,类型安全检查结果减少了程序员的工作量,“作为一个自动化工具运行一系列不需要程序员手写的测试”。此外 IDE 的支持为这些语言 提供了强大的重构工具,这“被广泛认为对动态语言平台来说是不可能的。”然而,动态语言支持者拿出了这样的事实——“这些语言的动态性意味着减少在创建和 维护代码时的工作量,结果便是相对静态语言少的多的代码行数 [……],因而含蓄地提高动态语言的可伸缩性”。

按照 Ted Neward 的观点,“使用动态语言的程序员每行代码可以典型地产出比他使用静态语言的同事更多的工作”,但是他极有可能需要对没有编译器的动态语言编写更多的单元测试,在某种程度上,来确保一定数量的系统测试。

就 IDE 重构方面,Neward 引用为 Eclipse 引入重构支持的 Dave Thomas 的意思。比如,由于动态语言直到运行时才能确定类型信息,所以其给出的信息是有限的。可是,Thomas 强调“简单地搜索和替换整个文件,这 是任何一款非凡的编辑器所提供的,其效果与 Eclipse 或者 IntelliJ 提供的重构功能有很多相同之处,因为类型不再是个问题。”Neward 强调 说他期望 IDE 提供商开发针对动态语言而设计的工具:

[……] 相对容易地想到,IDE 可以主动地去“运行”正在编写中的代码,这与 Eclipse 在整个编辑过程中执行常量编译(constant compile)、跟踪类型信息是相似的。

此外不应该忘记“最初的重构浏览器是为了 Smalltalk(世界上最老的动态语言之一)并使用其构建的”,这是在 TSS 的争论中突显出来的。

至于处理能力的可伸缩性,Ted Neward 强调它是重要的,因为“不能在使用高峰期间处理预期用户负荷的项目实际上是失败的,正如从来没有被安装过的项目一样。”

动态语言反对者争论道,动态语言无法在处理能力方面缩放,因为它们是“构建在其自己的运行时(runtime)之上的,这可以说在工程效果上大大逊色于 JVM Hotspot 或者 CLR 实现中的垃圾收集装置。”而动态语言支持者回应道“现在有许多 web 应用和网站在 MRV(Matz 的 Ruby VM?)解释器(与 Ruby 一同安装,‘开箱即用’)之上具有‘很好的’伸缩性”。

轮到 Ted Neward 时,他指出“随着 JRuby 的发布,以及像 IronRuby 和 Ruby.Net 这样的项目的运作,完全有理由相信动态语言必会运行在像 JVM 和 CLR 这样的现代虚拟机之上的”:

虽然动态语言运行在针对静态类型语言而设计的 VM 上通常会带来一定的性能和内存的损失,但工作在 DLR 和 MLVM(译注:多语言 VM)之上,以及对底层平台的增强将更有利于动态语言场景(scenario),而这将减少性能和内存的损失。

Ted Neward 似乎认为这是一个机会,在项目大小和处理能力两个方面通过配合工具并针对其特征优化运行时环境来改善动态语言的可伸缩性。更一般而言,他相当 反对将静态语言和动态语言对立的做法。他强调一个事实,就是一些应用(例如 Excel)成功地将两者结合起来,“通过创建一个核心引擎,和围绕它的一个脚 本引擎——非编程人员可以通过有意义的方式运用这个引擎。”

Neward 以改撰马克思的一句话作为总结:“各尽语言所能,按项目需要分配。”

查看英文原文 Scalability: Dynamic and Static Programming Languages

2008-02-25 00:441071

评论

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

你必须明白的新生代垃圾回收:YoungGC

小Q

Java 架构 面试 JVM GC

如果你不知道从哪本书开始阅读,那就从这本开始吧

小天同学

读书 好书推荐 读后感 4月日更

shell的三种循环

做个人吧

菩萨心肠 霹雳手段|靠谱点评

无量靠谱

技术向上,雪坡向下:拼多多的“新帅”与新路

脑极体

“Windows找不到文件...”,怎么处理?

Emotion

Windows 10 系统 找不到系统文件 错误弹窗 windows找不到文件

【翻译】JVM-技术专题-ZGC学习手册(1)概念定义

码界西柚

翻译 ZGC JVM 基本概念

接纳不完美的自己,才能拥有完整的人生|靠谱点评

无量靠谱

不想搞Java了,现在Java面试为何这么难

Java架构师迁哥

seata-golang 一周年回顾

阿里巴巴云原生

Java 数据库 微服务 云原生 Go 语言

话题讨论|三大运营商Q1业绩大增,5G开始收割?

程序员架构进阶

5G 话题讨论 28天写作 4月日更 通信运营商

Dubbo 注册中心

青年IT男

dubbo

太简单了!这套java内部类和异常的总结,只学了2个小时就学会了

牛哄哄的java大师

Java

002 ES NGram 分词 + suggest

小林-1025

ES es7

认识流媒体协议,从RTSP协议解析开始!

明儿

c c++ 协议 Wireshark rtp

漫游语音识别技术——带你走进语音识别技术的世界

攻城先森

深度学习 学习 音视频 nlp 语音识别

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

Java 程序员 架构 面试

资源数据治理的应用实践

鲸品堂

数据 治理 运营商

大数据技术发展的过程

菜菜

关于企业数字化转型的一些思考

石云升

数字化转型 28天写作 4月日更

奋力前行,感谢有你

IT蜗壳-Tango

IT蜗壳 人气作者 TOP10

这份清华学霸的Java反射完整版学习笔记,2小时带你从入门到入土

飞飞JAva

数据人上班划水都聊什么

数据社

大数据 程序员

精选8道Java集合最常见面试题,进大厂99%都会被问到,限时送!

飞飞JAva

JAVA集合

弱网下的极限实时视频通信

疯狂的驸马

音视频 编码 极限视频通信

头一次见到阿里大牛把spring boot讲的如此通俗易懂

Java 编程 程序员 架构

Spring 实战:自定义 Filter 优雅获取请求参数和响应结果

看山

Spring实战

笔记分享--弱网下的极限实时视频通信

攻城先森

音视频 端到端 #弱网 极限视频通信

公安局情指勤一体化指挥调度系统开发

WebAssembly + Dapr = 下一代云原生运行时?

阿里巴巴云原生

云计算 容器 开发者 运维 云原生

写作平台一周年-感谢曾经的自己

数据社

InfoQ 写作平台 1 周年 人气作者 TOP10

可伸缩性:动态和静态程序设计语言_编程语言_Sadek Drobi_InfoQ精选文章