写点什么

试着发挥静态类型语言的最大功效

  • 2008-04-17
  • 本文字数:943 字

    阅读完需:约 3 分钟

Debasish Ghosh 对一场动态 VS. 静态语言的讨论做出了回应,提出了用静态语言编程时动态类型检查的使用问题。他回忆了 Greenspun 第十编程法则:“任何使用静态类型检查语言编写的、足够复杂的程序都包含一个特定、非正式定义、容易引入 Bug 且缓慢的动态检查语言实现。”

Ghosh 认为如今不一定要这样。他主张,Java 泛型(比如 Guice 和 EasyMock)能避免那些为了强制执行运行时类型检查而采取的权宜之计:

原先在有些情况下不得不模拟运行时类型检查,既缓慢又容易引入 Bug,而利用 Java 泛型,这些框架就可以通过编译时类型检查来达到同样的效果。Guice 和 EasyMock 是我用过的比较优秀的两个框架,它们利用泛型实现了突出的类型安全。[……]

看一下下面这段代码,它用 Guice Binder 把实现SpecialServiceImpl``绑定到接口``<span id="tnuu">Service</span> 上。

public class MyModule implements Module {
public void configure(Binder binder) {
binder.bind(Service.class)
.to(SpecialServiceImpl.class)
.in(Scopes.SINGLETON);
}
}

尽管“Service和 <span id="q4qw">SpecialServiceImpl</span>``之间的“<span id="fddp"><strong id="yod5"> 实现 </strong></span>``”关系看起来是在运行时完成的”,但所有的类型检查实际上是在编译时进行的:

快速看一下 Guice 的源码,可以看到 BinderImpl.bind() 方法返回 BindingBuilderImpl……

public BindingBuilderImpl bind(Class clazz) {
return bind(Key.get(clazz));
}

BindingBuilderImpl.to() 方法则把 Class 作为输入——加在类型通配符上的限制使对参数的编译时类型检查实际上起到检查“实现”关系的作用……

public ScopedBindingBuilder to(Class extends T> implementation) {
return to(TypeLiteral.get(implementation));
}

Debasish Ghosh 提倡使用这种解决方法,而不是试图实现动态类型检查。这种方法不仅能避免 Greenspun 第十编程法则,还能充分利用静态类型,因为它能保证强大的类型安全:

在你用静态类型语言编程的时候,利用适当的语言特性让大部分的类型检查在编译时进行。这样,在你点击运行按钮之前,你就能确信你的代码符合类型系统的规则。你还能够对你的代码集进行更为简单的重构和更加清晰的改进。

查看英文原文: Try to get the best of your Statically Typed Language

2008-04-17 19:491235
用户头像

发布了 151 篇内容, 共 68.5 次阅读, 收获喜欢 18 次。

关注

评论

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

赠送 10 张三天通票,和我们来畅聊 CommunityOverCode Asia 2025

阿里巴巴云原生

AI管理平台重磅发布:企业智能体管理中枢,告别碎片化治理!

奇点云

AI

等保测评后的持续改进策略

等保测评

AI赋能心理咨询 - 华为开发者空间基于DeepSeek与Dify的解决方案

华为云开发者联盟

华为云ModelArts 华为开发者空间 AI 大模型

存力中国行正式启动,多方共探存力高质量发展新路径

科技热闻

Android适配16 KB Page Size,看这一篇就够了! | 优测云真机实验室

优测云服务平台

an'droid 优测

通义灵码进阶指南:超越基础提示,解锁智能编程新境界

阿里云云效

阿里云 通义灵码

在Google Play应用上实施中间人攻击 | 金融科技漏洞赏金系列第3部分

qife122

移动安全 Android逆向

语音 AI 公司 Deepgram 发布 Saga,面向开发者的语音操作系统;OpenS2S:完全开源的共情语音大模型丨日报

声网

中烟创新致敬“DeepSeek”,以坚守创新托举美好未来

中烟创新

通义灵码进阶指南:超越基础提示,解锁智能编程新境界

阿里巴巴云原生

阿里云 通义灵码

AI大模型入门 (一):什么是大模型?

测吧(北京)科技有限公司

企业级数据库解决方案 - OpenGauss主备系统在开发者空间的落地实践

华为云开发者联盟

opengauss 华为开发者空间

烟草行业信创迁移-企业综合管理平台上线运行

中烟创新

Crabc助力企业接口开发效率

Crabc低代码平台

低代码 数据服务 API 管理

AI技术在英语背单词App中的应用

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI英语口语

软件工厂,从设想走向现实的半个世纪

DevOps和数字孪生

杭州基础软件和工业软件产业联盟成立,玖章算术成为首批联盟成员

NineData

玖章算术 工业软件 杭州市基础软件联盟 杭州工业软件产业技术联盟 国产基础软件

IT服务台经理怎样算成功?-ManageEngine卓豪

ServiceDesk_Plus

IT服务台

海外营收增长700%!阿里云助力云鲸智能出海

新消费日报

等保测评流程的优化与变革

等保测评

【ICML2025】大模型训练性能4倍提升!阿里云PAI团队研究成果ChunkFlow中选

阿里云大数据AI技术

人工智能 机器学习 云计算 大数据 模型

如何在手机上查看三维图纸?

在路上

cad

锂电池制造行业MES特色解决方案:差异化生产管控与智能工厂实践

万界星空科技

制造业 mes 万界星空科技mes 新能源电池 锂电池mes

中烟创新入选“2024卓越软件项目优秀案例”

中烟创新

繁花有声|阿里云与产品伙伴共绘AI生态新图景

科技热闻

TDBC2025大会聚焦AI与数据库融合 极限科技发布新一代Coco AI搜索平台

新消费日报

极限科技亮相TDBC2025可信数据库发展大会 连续三年荣登信通院《中国数据库产业图谱》

新消费日报

手机上接收的CAD图纸如何在电脑端查看?

在路上

cad

权威认可!KaiwuDB 连续三年入选信通院数据库产业图谱

KaiwuDB

优测发布IoT云联解决方案,赋能生态应用创新跨端体验!

优测云服务平台

解决方案 loT 优测

试着发挥静态类型语言的最大功效_架构_Sadek Drobi_InfoQ精选文章