我正在尝试理解类型安全的语言意味着什么。在动态类型语言中,类型检查是在运行时执行的,例如,如果我运行以下 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 等)。
最佳答案
“类型安全”通常表示“内存类型安全”,即不能将包含一种类型的内存视为另一种类型。
根据这个定义,大多数高级语言,包括动态类型语言,都是类型安全的,因为任何不正确使用类型的尝试都会在它们中导致错误(编译时或运行时)。
因此,类型安全主要是低级语言的一个问题,尤其是 C 和 C++。这些问题通常涉及指针或强制转换(例如 C++ 中的 reinterpret_cast
)。
C# 是一个介于两组之间的有趣案例:默认情况下它是类型安全的,但您可以使用 unsafe
关键字(通常是为了性能或互操作原因)。
但如果将类型安全与静态类型结合起来,并不一定意味着必须编写类型。许多静态类型安全语言,尤其是函数式语言或受其启发的语言,使用 type inference .这意味着编译器可以根据分配给它的内容自行确定变量的类型,因此您不必键入它。例如,C++ 中的 auto
关键字和 C# 中的 var
。
关于php - 类型安全的语言是否需要静态类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043062/