任何人都可以解释有关动态或静态语言的C C ++ Java

任何人都可以解释有关动态类型或静态类型语言的C C ++ Java。 我在某处读到C C ++和Java都是静态语言。但我记得还有其他意见。非常困惑。 谢谢!     
已邀请:
还有什么看法?毫无疑问,C,C ++和Java都是静态类型语言,C ++和Java具有一些动态类型的特性。还有另一个问题:强类型与弱类型,主要与隐式转换和重载有关。网上有很多关于这些问题的深入讨论;你可能想从http://en.wikipedia.org/wiki/Type_system开始     
这是一个频谱。 C没有任何动态类型功能,虽然它允许你使用
void *
和强制转换来自己做一些技巧。 C ++和Java在类方法上有动态调度,因此在C ++和Java中有些情况下,您不知道在运行时直到对象实际调用哪个方法。 Java包含一个反射API,它实际上允许您在运行时检查和修改类型,因此它比C ++更具动态性。然后有像Python和Ruby这样的语言几乎完全是动态的 - 在编译时几乎没有任何东西被检查,并且你有像“鸭子打字”这样的功能,你不关心实际的类型,只要它支持你关心的操作。     
在hlovdal的回答之后,我将再次引用本杰明皮尔斯的问题。我参考并扩展了他的“类型和编程语言”的第1章。 Java是一种安全的语言(即防止运行时类型错误),主要是静态类型检查。但是,由于继承(更准确地说,是子类型),变量的类型可以比指向值的类型更通用。 此外,该语言还允许验证对象是否具有某种类型,以及在运行时向下转换对象 - 在此类操作期间,在运行时检查类型。因此,每个对象都有一个指向其类型的运行时表示的指针。 C是一种不安全的语言,具有静态类型检查功能。运行时不存在类型。 C ++仍然是一种不安全的语言,具有静态类型检查功能,但它也为满足某些条件的类提供了有限的运行时类型识别 - 即具有一些虚拟方法(如Java中的所有对象)。 编辑:“静态类型”不是一个明确定义的概念。为了表明这一点,我将(松散地)定义三个可能与“静态类型”相关的属性。 在执行程序之前,它是类型检查的:Java,C和C ++都满足此标准。 如果程序类型检查,我们可以保证它在运行时它不会有某个类的错误:C和C ++没有这个标准,Java传递它(虽然这是唯一可能的,因为失败的强制类型被明确排除在这类错误之外)。 运行时不存在语言定义的类型表示。这个属性对于Java和C ++都是失败的,并且表征了像C和Pascal这样的语言。 如果你说一个语言是“静态类型的”,如果它具有我上面提到的所有三个属性,那么Java,C和C ++都不是静态类型的。     
关于静态/强类型的不同意见我刚刚在阅读了这个问题之后偶然发现了这个旧的slashdot评论:   我最喜欢的定义是“强者   打字“来自Shriram   Krishnamurthi的编程语言:   申请和解释(第205页):      什么是“强打字”?尽我们所知,这是毫无意义的   短语,人们经常在一个地方使用它   荒谬的时尚。      本杰明皮尔斯(类型和作者的作者)   编程语言)写了一些东西   类似的(见Mark Jason Dominus   引用皮尔斯的“__打字”):      大约一年前,我花了几个星期的时间,试图解决这个问题   术语“强类型”   “静态打字”,“安全”等等   发现它非常困难。身为你的   消息指出,这些的用法   术语是如此多样化以呈现它们   几乎没用。     

要回复问题请先登录注册