自动类型推导的作用

发布于 2022-08-16 19:10:14 字数 244 浏览 21 评论 7

我看过一些带自动类型推导的语言的介绍,包括 ML 和 Haskell。它们都强调了自动类型推导减轻了程序员的负担,因为你不必每个函数都写上类型签名。但另一方面,它们又说:写上类型签名好处多多。

我觉得这两个说法是熊掌和鱼,不能兼得。它们这样说,有虚假广告的嫌疑。

个人觉得还是应该写上签名。解释器或编译器其实并不轻信我们的签名,它还会用自动推导来核对。我觉得这才是自动类型推导真正有意义的地方。

大家以为如何?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

想你只要分分秒秒 2022-08-22 13:14:05

原帖由 win_hate 于 2009-3-15 19:02 发表

比如 c 语言,一个表达式最终也能算出一个类型来,但这个应该不是我们所说的“自动类型推导”。

嗯,这个是检查类型是否匹配。

我觉得部分类型没有给出的前提下才需要  infer.

没错。若是全部的类型信息都给出了,只需要检查是否匹配就可以了。

双手揣兜 2022-08-22 13:11:54

原帖由 win_hate 于 2009-3-15 18:55 发表
这样看来,如果我把签名都写上,编译器是不是就不需要类型推导了?只要按我给出的签名检验是否冲突就可以了?

检查有无冲突叫type checking类型检查,和type inference类型推导有很大差别
强大的type inference可以简化编写工作量,更重要的是,有力支持了polymorphic type机制

放手` 2022-08-22 12:37:43

原帖由 MMMIX 于 2009-3-15 18:59 发表

它不推导怎么知道你有没有写对?

比如 c 语言,一个表达式最终也能算出一个类型来,但这个应该不是我们所说的“自动类型推导”。

我觉得部分类型没有给出的前提下才需要  infer.

夜空下最亮的亮点 2022-08-22 12:26:46

原帖由 win_hate 于 2009-3-15 18:55 发表
关于自动推导,资料上是这样写的

这样看来,如果我把签名都写上,编译器是不是就不需要类型推导了?只要按我给出的签名检验是否冲突就可以了?

它不推导怎么知道你有没有写对?

甜妞爱困 2022-08-22 12:17:06

>> 这只是一方面,类型还可以起到文档的作用,Haskell 的许多函数,你只要看它的类型,往往就能猜到它的语义,更不要说能了解它的用法了。

是有这个作用。

宁愿没拥抱 2022-08-22 02:32:22

关于自动推导,资料上是这样写的

1. First, every well-typed expression is guaranteed to have a unique principal type(explained below),

2. the principal type can be inferred automatically.

An expression's or function's principal type is the least general type that, intuitively, "contains all instances of the expression". For example, the principal type of head is [a]->a, not ->a.

这样看来,如果我把签名都写上,编译器是不是就不需要类型推导了?只要按我给出的签名检验是否冲突就可以了?

夏天碎花小短裙 2022-08-17 12:13:45

原帖由 win_hate 于 2009-3-15 18:18 发表
我看过一些带自动类型推导的语言的介绍,包括 ML 和 Haskell。它们都强调了自动类型推导减轻了程序员的负担,因为你不必每个函数都写上类型签名。但另一方面,它们又说:写上类型签名好处多多。

我觉得这两个说法是熊掌和鱼,不能兼得。它们这样说,有虚假广告的嫌疑。

也不能这么说。许多时候做快速原型开发的时候,完全可以不写类型而尽量依赖自动推导。这就好像 Perl 的词法变量,在你写一些一次性脚本的时候完全可以不用,但在做工程性开发的时候最好还是尽量用

个人觉得还是应该写上签名。解释器或编译器其实并不轻信我们的签名,它还会用自动推导来核对。我觉得这才是自动类型推导真正有意义的地方。

这只是一方面,类型还可以起到文档的作用,Haskell 的许多函数,你只要看它的类型,往往就能猜到它的语义,更不要说能了解它的用法了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文