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

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

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

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

关注

评论

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

IoTOS-v1.2.1接入J-IM(t-io)后台通知App

开源物联卡管理平台-设备管理

物联网平台 IoT 开源物联网 国产开源 开源项目介绍

Docker学习路线1:介绍

小万哥

Docker 程序员 容器 后端 开发

BFF网关模式开发指南

WizInfo

C++的list-map链表与映射表

芯动大师

华为云流水线CodeArts Pipeline怎么样?能实现哪些功能?

云计算 PaaS 云服务 华为云 华为开发者大会

重磅!用友首个全球交付中心在南昌成立啦!

用友BIP

聚焦前沿技术产业应用,文心大模型应用研讨会于广州顺利举办

飞桨PaddlePaddle

人工智能 百度 paddle 百度飞桨

毕马威:中国算力关联产业规模可达24万亿元|报告

B Impact

暗黑2能用Java开发?还能生成APP?

游戏开发 java17

2023-07-09:给定N、M两个参数, 一共有N个格子,每个格子可以涂上一种颜色,颜色在M种里选, 当涂满N个格子,并且M种颜色都使用了,叫一种有效方法。 求一共有多少种有效方法。 1 <= N,

福大大架构师每日一题

福大大架构师每日一题

全面预算管理对企业盈利能力的影响

智达方通

运营管理 全面预算管理 盈利能力 数据互通 管理报告

直播预约|漫漫用户增长之路,如何快人一手

HarmonyOS SDK

HMS Core

兼容性测试的正确打开方式

老张

兼容性测试 兼容性

华为云出品《深入理解高并发编程:Java线程池核心技术》电子书发布

云计算 华为云 java 技术提升 华为开发者大会

一文熟知网络 – 文章巨长,但是很详细

邹志全

网络编程 计算机网络 架构设计

CSS is、where和has选择器

南城FE

CSS 前端开发 选择器 伪类

聊聊「画图」和工具

Java 架构 画图工具

Huggingface:导出transformers模型到onnx

程序员架构进阶

ONNX 大模型 7月日更 7月月更 huggingface

一文读懂 Kubernetes 存储设计

江湖十年

k8s 后端 存储 Kubernetes 集群

落地领域大模型应知必会(2): 轻量化微调

Baihai IDP

人工智能 企业号 7 月 PK 榜 大模型微调 领域大模型 轻量化微调

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