弱类型与强类型相比的优势

3
所以,我在Stack Overflow上读了很多类似的问题,我认为我对两者之间的区别有很好的理解。我的问题是,除了某些操作对程序员来说更容易一些之外,弱类型是否比强类型有任何优势?虽然我同意强类型语言之间一些类型之间的操作过于复杂,但似乎几乎所有弱类型语言可以做到的事情,在强类型语言中也可以通过一些额外的代码实现。
个人而言,我可能更喜欢强类型语言的额外安全性并处理某些操作的轻微烦恼,但除此之外,弱类型是否有任何优势?强类型永远无法用相同的方式完成某些任务吗?

弱类型和强类型没有铁板一块的定义。这些都是政治术语。从这个角度来看,“弱类型”意味着“某种类型系统不能在我认为应该诊断此类程序的最新时间之前,诊断我不同意的某些程序”,而“强类型”则意味着“类型系统中的束缚和纪律妨碍了表达简单解决方案和日常生产力”。 - Kaz
4个回答

4
一些语言提供了在运行时改变对象或类行为的概念:一个未实现方法的对象可能会决定找到一种方式去响应该方法调用。
在Objective-C中,委托是让另一个对象响应客户端消息的常见方式。对象可以检测到缺少实现并将方法调用传递给代理。当方法被调用时,也可以动态地添加其实现。
这些概念基于动态方法查找,而不是弱类型与强类型之间的区别,但弱类型与动态查找紧密相连,因此我认为这算是一个优点。

2

对我来说,它几乎没有任何优势(只有一堆陷阱)。它容易出错,难以调试,进行单元测试也是麻烦的(我不知道该说什么),还会让编程初学者认为编程很简单,在项目开始时不需要设计。

我需要编译错误,我不喜欢调试动态对象为什么出错,或者......


“……让编程初学者认为编程是如此简单” - 这里有什么危害? - Utsav T

2

显然,这条线上没有可计算性...强类型语言可以是图灵等效的,并且假设弱类型语言不是对教会-图灵论文的反例(如果是这样的话,想必已经广为人知),那么它们至少与弱类型语言一样强大(从计算角度来看)。

然后我们可以问,在这条线上是否存在任何时间或空间复杂度。我个人感觉答案是否定的;在RAM计算模型下,强类型和弱类型之间的区别可能并不重要(从计算复杂性的角度来看)。当然,我的判断可能是错误的。然而,强类型语言可能可以编译成更紧凑的代码,因此实际性能可能更有利于强类型语言。

在我看来,唯一明显的好处是可编程性/可写性/可读性等方面。也就是说,通过允许程序员使用更少的代码和更少的工作量来实现编写更多代码和更多工作量的语言中相同的效果,它可以使程序员的生活更轻松。然而,这也还有待商榷,因为强类型可以使提供正确性/鲁棒性保证变得更容易。


0

弱类型非常容易出错,因为你只能在运行时发现错误。

编译错误非常有优势,因为它们会立即显示出来,而要找到所有的运行时错误,你需要运行每个使用情况的每个场景。除非你正在开发覆盖100%的自动化测试(我还没有见过像那样的人),否则你将得到比强类型语言更脆弱的软件。

弱类型较少冗长,这意味着你输入的内容较少,但这也是一个谬论,因为在强类型语言中,你可以获得代码完成,这意味着比弱类型语言更少的按键次数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接