【发布时间】:2015-01-20 10:31:26
【问题描述】:
我试图理解语言类型安全意味着什么。在动态类型语言中,类型检查是在运行时执行的,例如,如果我运行以下 PHP 代码:
<?php
class MyClass
{
}
// Create a MyClass instance
$mc = new MyClass();
// Create an int variable
$i = 1234;
// Add $mc and $i
$result = $mc + $i;
?>
我会收到一个错误,因为+ operator 不支持MyClass 数据类型。所以基本上类型检查是在运行时执行的。
类型安全是否意味着无论是在编译时还是运行时都执行类型检查,还是意味着类型检查必须仅在编译时执行,因此必须明确地为每个变量指定数据类型(如 C、Pascal、Java 等)。
【问题讨论】:
-
对于这种特殊情况,有某种类型安全,但如果你说
function x() { $i = 0; if (true) { $i = "bla"; } return $i; }... -
顺便说一句。您的示例将导致 1235,因此那里也没有安全性
-
@Royal Bg 如果一种语言在运行时执行类型检查并在发现类型错误时停止程序,那么这种语言是否称为类型安全语言?
-
很可能不是。在某些论文中,您可能会发现这些语言是有限类型安全语言或在有限上下文中类型安全。对我来说,没有类型安全,如果您可以将其隐藏在
if()块中 -
C 不是完全类型安全的。如果是这样,它就不会像它那样有那么多未定义的行为。 C# 不一定是静态的、强类型的,但它被认为是类型安全的。但是话又说回来,如果您不希望它是,它不必是。 Java 被设计为类型安全的,但仍有一系列异常需要您抛出/处理,以防类型系统让您失望(
BigDecimal.divide、NullPointerException、...)
标签: php programming-languages type-safety dynamic-typing static-typing