Programming languages 静态/动态类型与静态/动态绑定

Programming languages 静态/动态类型与静态/动态绑定,programming-languages,dynamic,binding,static,typed,Programming Languages,Dynamic,Binding,Static,Typed,各位,这4个术语之间有什么区别,你们能举个例子吗?类型-指变量类型,以及在程序执行期间是否允许变量更改类型 绑定—正如您在下面所读到的,它可以指变量绑定或库绑定 静态和动态是术语,指解析某些编程元素的时间点。静态表示在构造程序时发生解析。动态表示在程序运行时进行解析 静态和动态类型 类型是指由于数据值(整数、字符、浮点数、字符串、对象等)之间的差异而导致的程序结构的更改。这些差异可能产生许多影响,例如: 内存布局(例如,int为4字节,double为8字节,object为更多) 执行的指令(

各位,这4个术语之间有什么区别,你们能举个例子吗?

类型-指变量类型,以及在程序执行期间是否允许变量更改类型

绑定—正如您在下面所读到的,它可以指变量绑定或库绑定

静态和动态是术语,指解析某些编程元素的时间点。静态表示在构造程序时发生解析。动态表示在程序运行时进行解析

静态和动态类型 类型是指由于数据值(整数、字符、浮点数、字符串、对象等)之间的差异而导致的程序结构的更改。这些差异可能产生许多影响,例如:

  • 内存布局(例如,int为4字节,double为8字节,object为更多)
  • 执行的指令(例如,添加小整数的基本操作,添加大整数的库调用)
  • 程序流(简单子程序调用约定与多方法哈希分派)
静态类型表示在构建时生成的程序的可执行形式将根据程序中找到的数据值的类型而有所不同。动态类型意味着生成的代码将始终相同,而不管类型如何——执行中的任何差异都将在运行时确定

请注意,很少有真正的系统是纯粹的一个或另一个,这只是一个问题,哪一个是首选策略

静态和动态绑定 绑定是指程序文本中的名称与它们所引用的存储位置之间的关联。在静态绑定中,此关联是在构建时预先确定的。对于动态绑定,只有在运行时才能确定此关联

真正的静态绑定几乎消失了。例如,早期的汇编程序和FORTRAN将完全预先计算所有变量和子例程位置的确切内存位置。这种情况并没有持续很长时间,引入了变量的堆栈和堆分配以及子例程的动态加载库

因此,我们必须对这些定义有一些自由。这一概念的精神在这里很重要:静态绑定程序尽可能预计算存储布局,这在现代虚拟内存、垃圾收集、单独编译的应用程序中是可行的。动态绑定的程序尽可能晚地等待

举个例子可能会有所帮助。如果我试图调用一个方法
MyClass.foo()
,静态绑定系统将在构建时验证是否有一个名为
MyClass
的类,以及该类是否有一个名为
foo
的方法。动态绑定系统将等待运行时,以查看其中一个是否存在

对比 静态策略的主要优点是程序翻译器更加了解程序员的意图。这使得:

  • 在构建阶段早期捕获许多常见错误

  • 构建重构工具

  • 在构建时,只需确定一次程序的可执行形式,就会产生大量计算成本

动态战略的主要优势在于它们更容易实施,这意味着:

  • 创建动态工作环境的成本仅为静态环境的一小部分

  • 添加可能很难进行静态检查的语言特性更容易

  • 更容易处理需要自修改代码的情况


维基百科又坏了吗?尽管如此,打字和装订是如此不同的术语,以至于我很惊讶它们出现在一个问题上。