相关疑难解决方法(0)

37
推荐指数
4
解决办法
4万
查看次数

我对类型系统的理解是否正确?

以下陈述代表了我对类型系统的理解(它在Java世界之外的实践经验太少); 请更正任何错误.

静态/动态区别似乎非常明确:

  • 静态类型语言为每个变量,字段和参数分配一个类型,编译器会阻止不兼容类型之间的分配.示例:C,Java,Pascal.
  • 动态类型语言将变量视为可以保存任何所需内容的通用容器 - 只有在您对值实际执行操作时才会在运行时检查类型(如果有的话),而不是在分配它们时.示例:Smalltalk,Python,JavaScript.
  • 类型推断允许静态类型语言看起来像(并具有一些优点)动态类型语言,通过从上下文推断类型,这样您就不必在大多数时间声明它们 - 但与动态语言不同,不能例如最初使用变量来保存字符串然后为其分配一个整数.示例:Haskell,Scala

我不太确定强弱差别,我怀疑它的定义不是很明确:

  • 强类型语言为每个运行时值分配一个类型,并且只允许执行为该类型定义的操作,否则会出现显式类型错误.
  • 弱类型语言没有运行时类型检查 - 如果您尝试对不支持的值执行操作,则结果是不可预测的.它实际上可能会做一些有用的事情,但更有可能你会得到损坏的数据,崩溃或一些难以理解的二次错误.
  • 似乎至少有两种不同类型的弱类型语言(或者可能是连续统一体):
    • 在C和汇编程序中,值基本上是比特桶,因此任何事情都是可能的,如果你让编译器解除引用以空字符结尾的字符串的前4个字节,你最好希望它引导一个不包含合法机器代码的地方.
    • PHP和JavaScript通常也被认为是弱类型的,但不要将值视为不透明的位桶; 但是,它们将执行隐式类型转换.
  • 但是这些隐式转换似乎主要适用于字符串/整数/浮点变量 - 这是否真的能保证分类为弱类型?或者还有其他问题,这些语言的类型系统可能会混淆错误?

language-agnostic type-systems

16
推荐指数
2
解决办法
1675
查看次数

弱和强打字的优点和缺点

我正在从Java转换到PHP/Javascript,并发现使用弱类型语言的所有实际方面.

由于我能够完全比较两者,我想知道每种方法的优缺点.此外,还有其他形式的打字吗?

language-agnostic typing weak-typing strong-typing

0
推荐指数
1
解决办法
2862
查看次数