寻求关于弱类型语言的明显矛盾的澄清

问题:

我认为我理解strong typing,但是每次我找到一个弱键入的例子,我最终都会找到简单地强制/转换类型的编程语言的例子。
例如,在这篇名为Typing: Strong vs. Weak, Static vs. Dynamic的文章中,Python是强类型的,因为如果你尝试:
 蟒蛇

1 + "1"
Traceback (most recent call last):
File "", line 1, in ? 
TypeError: unsupported operand type(s) for +: 'int' and 'str'

然而,这样的事情在Java和C#中是可能的,我们不认为它们是弱类型的。
 Java的

  int a = 10;
  String b = "b";
  String result = a + b;
  System.out.println(result);

 C#

int a = 10;
string b = "b";
string c = a + b;
Console.WriteLine(c);

在另一篇名为Weakly Type Languages的文章中,作者说Perl是弱类型,只是因为我可以将一个字符串连接到一个数字,而不是任何明确的转换。
 Perl的

$a=10;
$b="a";
$c=$a.$b;
print $c; #10a

所以同样的例子使Perl弱键入,但不是Java和C#?
哎,这很混乱enter image description here
作者似乎暗示,阻止对不同类型的值应用某些操作的语言是强类型的,相反的意思是弱类型。
因此,在某些时候,我感到有信心,如果一种语言在类型之间提供了大量的自动转换或强制(如perl),则可能会被认为是弱类型,而其他仅提供少量转换的语言可能最终会被被认为是强类型的。
我倾向于相信,在这个诠释中我一定是错的,我只是不知道为什么或如何解释它。
所以我的问题是:

  • 真正意义上的一种语言是真正的薄弱类型?
  • 你能否提到与语言完成的自动转换/自动强制无关的弱打字的任何好例子?
  • 同一时间,一种语言能弱类型和强类型?

回答:

更新:This question was the subject of my blog on the 15th of October, 2012.感谢伟大的问题!

一种语言是“弱键入”的意思是什么?

这意味着“这种语言使用我觉得厌恶的类型系统”。相比之下,“强类型”语言是一种我觉得愉快的类型系统的语言。
这些术语本质上是无意义的,你应该避免它们。 Wikipedia列出了“强类型”的eleven different meanings,其中几个是矛盾的。这表明在涉及“强类型”或“弱类型”这个术语的任何谈话中,创造的混乱的几率都很高。
所有你真正可以肯定地说的是,正在讨论的“强类型”语言在类型系统中有一些额外的限制,无论是在运行时还是编译时,正在讨论的“弱类型”语言缺乏。如果没有进一步的上下文,那么这个限制是无法确定的。
您应该详细描述您的意思是什么类型的安全性,而不是使用“强类型”和“弱类型”。例如,C#是statically typed语言,type safe语言和memory safe语言for the most part。 C#允许违反“强”类型的所有这三种形式。演员操纵违反静态打字;它对编译器说“我比我们更了解这个表达式的运行时类型”。如果开发人员错误,则运行时将抛出异常以保护类型安全。如果开发商希望打破安全或者记忆安全,可以通过“不安全”的阻挡来关闭安全系统。在不安全的块中,您可以使用指针魔术将int视为浮动(违反类型安全)或写入您不拥有的内存。 (违反记忆安全。)
C#强制在编译时和运行时检查的类型限制,从而使其成为一种“强类型”语言,而不需要较少的编译时检查或较少运行时检查的语言。 C#还允许您在特殊情况下围绕这些限制进行终端运行,使其成为一种“弱类型”语言,而不允许您执行此类终止运行的语言。
这是真的吗不可能说这取决于演讲者的观点和对各种语言特征的态度。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Seeking clarification on apparent contradictions regarding weakly typed languages

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 4 = 2