`
andyhu1007
  • 浏览: 199733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

绑定和绑定时间

阅读更多

1. 绑定和绑定时间是程序设计语言中的十分重要的概念。在设计一门新的语言时,首先要确定的就是这种语言的绑定以及绑定发生的时间,为语言的特性和实现定下了一个基调。

 

2. 一段程序实际上是由不同元素组成的,这些元素包括实体和属性,有时一个元素既可作为实体,也可作为属性。在c语言中,语句int count = 5;中,int本身可以被认为是实体—整数类型,它的属性则是该类型所表示的整数范围,16位机器上为−32768~32767;同时int也是变量 count的属性,表明count是一个整型变量。

 

3. 为了保证程序元素的语义完整性和可理解性,对于程序中的每个实体都要求有相关的语义信息,即要从一个可能的性质集合中选择一个性质作为实体的性质或属性 值,确定实体和属性的约束关系。这种约束关系的确定称为绑定,绑定相对于程序翻译和处理的时间称为绑定时间,绑定时间决定了语言的特性。

 

4. 绑定可以发生从语言的设计和实现到程序的翻译、连接和执行的各个阶段。

 

5. 在语言定义时,首先构造了一个支撑语言的虚拟机,确定了一个语言的大部分结构,例如,选择语句的形式、数据类型及其所能表示的范围和程序结构。在语言实现 时,确定语言定义的细节在具体计算机上的实现方式,不同的实现存在着很大的差别。比如Microsoft C和Turbo C都是C语言的实现。

 

6. 要使一个以静态文本方式存放的程序成为一个可执行的程序要经过编译、连接和执行步骤。在C/C++语言中,.c文件经过编译后,程序中变量的类型、数据成员的偏移量、数组的存储方式以及静态变量的存储位置都确定下来,并且完成了类型检查和转换工作

 

7. 对于文件作用域中尚未定义的外部符号,在连接步骤中连接程序负责在其他的编译单元查找,并将找的符号名所表示的内容绑定到目标代码中的符号生成可执行代码。因此,库函数调用时函数名与函数体的绑定关系发生在连接过程中。

 

8. 一个已经顺利的通过编译和连接的程序,一定可以顺利地在计算机上运行吗?答案是否定的。因为程序中还有一部分绑定需要在程序执行时才能确定下来,如果在确 定绑定关系时发生了错误,那么程序的运行也会发生异常。大部分语言中,这些绑定包括数据对象和其存储单元(临时存储单元)、动态内存分配、调用函数时的形 参和实参的连接、形参和实际存储单元的对应关系、调用子程序的返回结果等等。

 

9. 我们将绑定时间分为两类:一类是在运行前确定绑定关系,称之为“早绑定”;另一类是在运行时确定绑定关系,称之为“晚绑定”。“早绑定”在程序运行前就把 大部分程序元素的属性确定下来,运行时只需要完成少部分的绑定,因而执行效率高,但不够灵活,要求程序员在程序运行之前尽可能确定程序元素的属性,一旦确 定下来修改起来就十分困难,需要重新编写、编译、连接整个程序。而“晚绑定”恰恰与之相反,它把程序中大部分绑定关系推迟到执行时确定下来,程序执行时要 完成大部分的绑定工作,所以灵活但效率不高。

 

10. “早绑定”和“晚绑定”的优缺点实际上是语言的灵活性和效率的冲突。所谓“鱼和熊掌不可兼得”,关键要根据语言设计的目标在两者之间寻找一个最佳的平衡 点。优先考虑执行效率、以执行效率为主要目标的语言通常设计为绑定尽可能地在程序运行之前确定下来的“早绑定”,如Fortran、C、Pascal。而 对于追求灵活性的语言来说,如Smalltalk、LISP、Python,ML,采用的则是“晚绑定”。有些语言(Ada)提供了对绑定时间的选择机 制,允许程序员自己根据实际情况选择合适的绑定时间。

 

11. 基于绑定时间的概念可以定义和比较语言的特性。在程序设计语言中,有两个使用广泛的、相对的术语——静态和动态——实际上是根据绑定时间划分的。一般提到 “静态”指的是在执行前所发生的动作,“动态”是指在执行时发生的动作。由此,“早绑定”也可称为静态绑定,“晚绑定”称为动态绑定。一般来讲,“静态” 具有执行效率高而灵活性不够的特点,相反,“动态”具有执行效率低但灵活性高的特点,两者是一对相对的术语,是一组对立统一的辨证关系。程序设计语言中有 许多概念都涉及到这两者,如静态类型检查和动态类型检查、静态内存分配和动态内存分配、静态作用域和动态作用域,以及本文所阐述的静态语言和动态语言。

分享到:
评论

相关推荐

    java代码绑定时间

    ### Java代码绑定时间:深入理解Oracle绑定变量的重要性 在Java编程中,特别是在处理与数据库交互的应用场景下,正确地使用数据库绑定变量对于提升系统性能、减少资源消耗具有至关重要的作用。本文将围绕“Java代码...

    wpf 数据绑定 经典 数据绑定 经典

    WPF 数据绑定支持多种模式,包括单向绑定、双向绑定和只读绑定。单向绑定(OneWay)将数据源更新到目标,而双向绑定(TwoWay)则允许数据在目标和源之间双向同步。只读绑定(OneTime)只在初始加载时将数据源赋值给...

    服务器双网卡绑定

    【服务器双网卡绑定】是一种网络技术,常用于提高服务器的网络连接稳定性和带宽,同时也能增强网络的冗余性。在Linux操作系统中,这种技术通常被称为“网卡聚合”或“网络 bonding”。本篇将重点介绍在Windows环境下...

    layui动态绑定事件的方法

    在前端开发中,动态绑定事件是一项非常重要的技术,尤其是在处理动态创建的DOM元素时。...通过上述方法,即使是动态添加到页面上的元素,也能确保事件能够正确地绑定和触发,从而为用户带来良好的交互体验。

    C#利用网卡来绑定软件

    因此,"WPF绑定网卡"的概念与WinForms绑定方式基本一致,只是界面呈现和交互部分采用了WPF技术。 在提供的压缩包文件"RegSoftByNetworkCard"中,可能包含了实现这一功能的示例代码或者整个软件注册过程。学习和理解...

    JQ 循环获取ID绑定时间代码

    JQ 循环获取ID绑定时间代码 根据你的需求可以改正click hover 等一系列的时间相应操作数据,纯手写 我一直在使用。 重复使用很有价值。 文件后缀是.PHP但是里面是纯JQ代码。 带注释!

    Android DataBinding的官方双向绑定示例

    双向绑定可以使得数据与用户界面保持同步,减少代码量和开发时间。 在 Android DataBinding 中,双向绑定可以通过在布局文件中使用 `@={}` 语法来实现。例如,在一个简单的用户名绑定示例中,我们可以使用以下代码...

    c#数据绑定实验c#数据绑定实验

    C#数据绑定是.NET框架中一个关键的概念,它在Windows Forms、WPF(Windows Presentation Foundation)和ASP.NET等环境中广泛使用。数据绑定允许UI(用户界面)组件与数据源进行同步,使得数据的变化能够实时反映在...

    ip+mac绑定器(超强绑定)

    绑定器的定时更新功能可以减少管理员在持续监控网络状态上的时间投入,确保网络的稳定运行。此外,对普通用户而言,了解如何使用IP-MAC绑定技术,也能够使他们更加安全地接入网络,防止个人信息在不知情的情况下被...

    winfrom 解决 radioButton 双向绑定

    在工作中遇到了这样一个问题,就是在同一界面下放了多个RadioButton来进行双向绑定,但是经过绑定后,在修改对象值后,发现数据和界面不同步的问题。然后在网上找了一些资料很多解决办法不好。用来很长时间找到的...

    Delphi 动态绑定事件处理函数过程

    在 Delphi 编程环境中,动态绑定事件处理函数是一个强大的特性,它允许程序在运行时动态地连接事件和对应的处理函数,而不是在编译时静态地确定。这为开发提供了更大的灵活性,特别是在处理不确定数量的对象或者需要...

    大漠插件绑定测试工具(VIP专用)v61.zip

    5. **性能测试**:评估插件的加载速度、响应时间和资源占用,优化插件的性能。 6. **安全检测**:检查插件是否存在潜在的安全风险,如数据泄露、权限滥用等。 7. **自动化测试**:支持编写测试脚本,实现自动化...

    Activity绑定Service(Kotlin)

    在Android应用开发中,Service是用于执行长时间运行操作的一个组件,而Activity是用户与应用交互的界面。将Activity与Service绑定是一种常见的通信方式,尤其在需要在后台运行任务且需要与用户界面保持交互时。本...

    线程/进程绑定CPU代码

    3. **减少竞态条件**:在多线程环境中,某些数据访问可能需要同步,绑定线程到特定核心可以减少竞态条件的发生,因为同一时间只有一个核心上的线程能访问特定数据。 在CSDN博客链接中提到的文章,作者可能详细介绍...

    service的启动和绑定

    本文将深入探讨“Service的启动和绑定”以及“AIDL(Android Interface Definition Language)”的运用。 首先,我们来理解Service的启动和绑定。Service有两种启动方式:startService()和bindService()。 1. **...

    2D人物骨骼绑定

    2D人物骨骼绑定是动画制作中的核心技术之一,它允许我们为二维角色创建动态表现和复杂的动作。在 Moho 这个强大的2D动画软件中,骨骼绑定系统提供了高效且直观的方式来控制角色的运动,使动画师能够赋予角色栩栩如生...

    易语言日期时间框绑定编辑框

    "易语言日期时间框绑定编辑框"是一个典型的用户界面设计问题,它涉及到如何将日期时间选择组件(日期时间框)与文本输入组件(编辑框)有效地结合,以便用户可以通过图形界面方便地查看和修改日期时间信息。...

    绑定本地和远程Service的Demo.zip

    在Android应用开发中,Service是Android四大组件之一,主要用于在后台执行长时间运行的任务,比如播放音乐、网络通信等。本教程将深入讲解如何在Android应用中绑定本地Service以及远程Service的Demo,帮助开发者理解...

    大漠后台绑定测试工具--唐涛

    在大漠后台绑定测试工具中,用户可以方便地配置和执行各种复杂的测试场景,无论是常规的业务流程还是特定的异常处理,都能够被有效地捕获和评估。 其次,该工具提供了丰富的自定义功能,允许用户根据项目需求定制...

    本地服务(绑定与未绑定)

    在Android应用开发中,"本地服务(绑定与未绑定)"是一个关键的概念,它涉及到应用程序如何在后台执行长时间运行的任务而不干扰用户界面。本地服务(Local Service)是Android系统提供的一个组件,允许开发者创建长...

Global site tag (gtag.js) - Google Analytics