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

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

  • 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:441373

评论

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

如何避免写重复代码:善用抽象和组合

阿里技术

Java 代码实战

Spring Boot实现第一次启动时自动初始化数据库

Java spring Spring Boot

莉莉丝游戏与火山引擎ByteHouse达成合作,为实时数仓建设提速

字节跳动数据平台

数据仓库 云原生 实时

内核调试环境搭建

郑州埃文科技

网络安全 网络环境

电商行业实践专栏上线|阿里巴巴风控实战如何解决大规模风控的技术难点?

Apache Flink

大数据 flink 实时计算

Kafka集群是如何选择leader,你知道吗?

Java kafka 集群

kafka集群是如何选择leader,你知道吗?

JAVA旭阳

kafka

Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队

京东科技开发者

MySQL 数据库 企业号 5 月 PK 榜 DDL执行方式 pt-soc

大语言模型技术原理

NineData

AIGC ChatGPT AI大语言模型 大语言模型 技术原理

国内好用的堡垒机推荐-行云管家堡垒机

行云管家

网络安全 堡垒机

小程序容器与PWA的完美结合:提升应用性能与用户体验

FinFish

私有小程序技术 小程序容器 PWA 小程序化 小程序技术

500行代码手写docker-实现硬件资源限制cgroups

蓝胖子的编程梦

容器 k8s ,docker Cgroups #k8s

如何将千亿文件放进一个文件系统,EuroSys'23 CFS 论文背后的故事

百度Geek说

数据库 云计算 百度 企业号 5 月 PK 榜

阿里大神级Elasticsearch学习笔记,还学不会就埋了

Java elasticsearch 分布式搜索引擎 ES

太赞了,京东研发一哥力荐的高可用网站构建技术

Java 架构 京东

MatrixOne 助力开启分布式计算格局新征程

MatrixOrigin

分布式数据库 HTAP MatrixOrigin MatrixOne 矩阵起源

从7天到1天,Kyligence 和亚马逊云科技助力欣和提高数据应用价值

Kyligence

数字化转型 指标平台

Flutter三棵树系列之BuildOwner | 京东云技术团队

京东科技开发者

flutter 移动开发 源码解读 企业号 5 月 PK 榜 BuildOwner

Git入门指南:从新手到高手的完全指南

小万哥

git Linux 程序员 后端 C/C++

ByConity与主流开源OLAP引擎(Clickhouse、Doris、Presto)性能对比分析

墨天轮

数据库 字节跳动 OLAP Clickhouse Doris

双非渣硕,开发两年,苦刷算法47天,四面字节斩获offer

Java 数据结构 算法 LeetCode

Hybrid Shuffle 测试分析和使用建议

Apache Flink

大数据 flink 实时计算

辅助测试和研发人员的一款小插件【数据安全】 | 京东云技术团队

京东科技开发者

浏览器 数据安全 插件开发 企业号 5 月 PK 榜

房地产行业IT运维安全就用行云管家堡垒机!

行云管家

运维 房地产 IT运维

软件测试/测试开发丨学习笔记之Web自动化测试

测试人

程序员 软件测试 自动化测试 测试开发

医疗领域实体抽取:UIE Slim最新升级版含数据标注、serving部署、模型蒸馏等教学,助力工业应用场景快速落地

汀丶人工智能

人工智能 自然语言处理 知识图谱 关系抽取 命名实体识别

全国流体力学盛会召开,飞桨AI4S携最新科研进展亮相西湖大学

飞桨PaddlePaddle

人工智能 百度飞桨 科学计算

精准快速搜索文件:Find Any File 激活版

真大的脸盆

Mac 办公效率 文件搜索 搜索工具 搜索文件

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